【发布时间】: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