Ошибка отказа в доступе — CreateFileMApping

Привет всем
Я получаю GetLastError 5 (доступ запрещен) для функции CreateFileMapping. Кто-нибудь может мне помочь . мой код, как показано ниже

typedef NTSTATUS(WINAPI *NtSetInformationFileNext)(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID FileInformation,
                                                  ULONG Length, FILE_INFORMATION_CLASS FileInformationClass);
NtSetInformationFileNext Real_NtSetInformationFileData = NULL;
NtSetInformationFileNext Real_NtSetInformationFileVar ;

NTSTATUS WINAPI NtSetInformationFileCallback(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID FileInformation,
                                                  ULONG Length, FILE_INFORMATION_CLASS FileInformationClass)
{

if(FileInformationClass == 10)
{

    FILE_RENAME_INFORMATION *pInfo = (PFILE_RENAME_INFORMATION)FileInformation;

            GetFileNameFromHandle(FileHandle);

    MessageBoxW(NULL, pInfo->FileName, L"Renamed To", MB_OK);   
}

return Real_NtSetInformationFileData(FileHandle, IoStatusBlock, FileInformation, Length, FileInformationClass);
}

В приведенной выше функции обратного вызова NtSetInformationFile я вызываю функцию GetFileNameFromHandle(), передавая функцию FileHandle From NtSetInformationFile, поэтому внутри функции GetFileNameFromHandle я вызываю CreateFileMapping, используя тот же дескриптор.

пожалуйста, помогите мне, если что-то не так в приведенном выше коде.


person Kantesh N    schedule 08.08.2012    source источник
comment
Гм, нигде в вашем коде нет вызова CreateFileMapping. Это похоже на какую-то функцию исправления, которая по своей сути не поддерживается. (В частности, вы вызываете ядро, которое перезаписывает внутреннее состояние.)   -  person Raymond Chen    schedule 08.08.2012


Ответы (1)


[Перезаписывая первоначальный ответ, который должен был быть комментарием]

OK. Вероятно, у вас есть одна из двух проблем: 1) Если этот код выполняется в контексте драйвера устройства, то, скорее всего, он выполняется как системный процесс с системными разрешениями. Был ли передан дескриптор файла из приложения, выполняющегося с разрешениями пользователя? Это может объяснить отказ в доступе.

2) Файл был открыт без FILE_SHARE_READ и/или FILE_SHARE_WRITE.

person Kent    schedule 08.08.2012
comment
Все вполне разумные вещи можно сказать, но это не ответ на вопрос. Это действительно должен быть комментарий. - person jahhaj; 08.08.2012
comment
Хорошо, Кент... теперь я собираюсь разместить эту часть перехвата функции NtSetInformationFile, пожалуйста, повторите ее еще раз. - person Kantesh N; 08.08.2012