【问题标题】:Access Denied Error - CreateFileMApping访问被拒绝错误 - CreateFileMApping
【发布时间】:2012-08-05 05:06:21
【问题描述】:

大家好
我正在为 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。

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

【问题讨论】:

  • 嗯,您的代码中的任何地方都没有调用CreateFileMapping。这看起来像是某种修补功能,本质上是不受支持的。 (特别是,您正在回调内核,这将覆盖内部状态。)

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


【解决方案1】:

[覆盖原本应该是 cmets 的初始答案]

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

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

【讨论】:

  • 所有完全合理的说法,但这不是问题的答案。真的应该是评论。
  • 好的,Kent ...现在我要放置 NtSetInformationFile 函数 Hooking 部分,请再过一遍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 2012-12-21
  • 2010-12-23
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多