2012-08-08 342 views
0

大家好
我得到GetLastError 5(訪問被拒絕)的CreateFileMapping函數。請任何人幫助我。我的代碼如下訪問被拒絕的錯誤 - CreateFileMApping

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回調函數我打電話GetFileNameFromHandle()函數通過傳遞的FileHandle從NtSetInformationFile功能,所以GetFileNameFromHandle函數內部我正在通過使用相同的句柄調用的CreateFileMapping。

如果在上面的代碼中有任何錯誤,請幫助我。

+0

嗯,在你的代碼中沒有任何地方調用'CreateFileMapping'。這看起來像某種修補功能,這本質上是不受支持的。 (特別是,你打回內核會覆蓋內部狀態。) – 2012-08-08 15:59:35

回答

0

[改寫最初的回答應該已經評論]

確定。您可能遇到以下兩個問題之一: 1)如果此代碼在設備驅動程序的上下文中執行,那麼它很可能作爲具有系統權限的系統進程執行。文件句柄是否來自使用用戶權限執行的應用程序?這可以解釋拒絕訪問。

2)該文件在沒有FILE_SHARE_READ和/或FILE_SHARE_WRITE的情況下打開。

+1

所有完全合理的事情要說,但這不是問題的答案。它應該是一個評論。 – jahhaj 2012-08-08 06:41:16

+0

好的肯特......現在我要把NtSetInformationFile函數掛鉤部分再次通過它。 – 2012-08-08 06:49:30