大家好 我为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。
如果上述代码有任何不妥之处,请帮助我。答案 0 :(得分:0)
[覆盖应该是评论的初始答案]
行。您可能遇到以下两个问题之一: 1)如果此代码在设备驱动程序的上下文中执行,则它可能作为具有系统权限的系统进程执行。来自使用用户权限执行的应用程序传入的文件句柄是什么?这可以解释拒绝访问。
2)文件是在没有FILE_SHARE_READ和/或FILE_SHARE_WRITE的情况下打开的。