访问被拒绝错误 - CreateFileMApping

时间:2012-08-08 06:08:11

标签: c++ windows winapi windows-7 memory-mapped-files

大家好 我为CreateFileMapping函数获取了GetLastError 5(访问被拒绝)。任何人都可以帮助我。我的代码如下

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 CallBack函数中,我通过从NtSetInformationFile函数传递FileHandle来调用GetFileNameFromHandle()函数,所以在GetFileNameFromHandle函数里面我使用相同的句柄调用CreateFileMapping。

如果上述代码有任何不妥之处,请帮助我。

1 个答案:

答案 0 :(得分:0)

[覆盖应该是评论的初始答案]

行。您可能遇到以下两个问题之一: 1)如果此代码在设备驱动程序的上下文中执行,则它可能作为具有系统权限的系统进程执行。来自使用用户权限执行的应用程序传入的文件句柄是什么?这可以解释拒绝访问。

2)文件是在没有FILE_SHARE_READ和/或FILE_SHARE_WRITE的情况下打开的。