0

大家
好,我正在为 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 回调函数中,我通过从 NtSetInformationFile 函数传递 FileHandle 来调用 GetFileNameFromHandle() 函数,因此在 GetFileNameFromHandle 函数中,我使用相同的句柄调用 CreateFileMapping。

如果上述代码有任何问题,请帮助我。

4

1 回答 1

0

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

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

2) 打开文件时没有 FILE_SHARE_READ 和/或 FILE_SHARE_WRITE。

于 2012-08-08T06:37:34.667 回答