我試圖使用名爲NTCreateFile
的函數。當我編譯它給了我一個錯誤,說 「_NTCreateFile標識符找不到」。我輸入了標題winternl.h
。所以接下來我嘗試使用ZwCreatFile
,根據MSDN我包括ntifs.h
,但我不能包括該頭。它說「無法打開/查找目錄」。我正在使用V @ 2008。問題是什麼?我錯過了什麼?無法在win32項目中包含ntifs.h
EDIT1:
typedef NTSTATUS (*fp_CreatFile)(
OUT PHANDLE FileHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN PLARGE_INTEGER AllocationSize OPTIONAL,
IN ULONG FileAttributes,
IN ULONG ShareAccess,
IN ULONG CreateDisposition,
IN ULONG CreateOptions,
IN PVOID EaBuffer OPTIONAL,
IN ULONG EaLength
);
OBJECT_ATTRIBUTES myAttributes;
int _tmain(int argc, _TCHAR* argv[])
{
fp_CreatFile myFunction;
HMODULE module = LoadLibrary(L"ntdll.dll");
if(NULL != module)
{
myFunction = (fp_CreatFile)GetProcAddress(module,"NtCreateFile");
}
UNICODE_STRING string;
IO_STATUS_BLOCK fileStatus;
string.Length = 56;
string.Buffer = L"C:\\user\\kiddo\\Desktop\\7zFM.exe";
string.MaximumLength = 56;
HANDLE fileHandle;
myAttributes.ObjectName = &string;
myAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
long mystatus = myFunction(&fileHandle,FILE_GENERIC_READ,&myAttributes ,&fileStatus,NULL,FILE_ATTRIBUTE_NORMAL,FILE_SHARE_READ,
NULL,NULL,NULL,NULL);
return 0;
}
當試圖調用,它提供了以下錯誤消息框。 錯誤: 運行時檢查失敗#0 - ESP的值未正確保存在函數調用中。這通常是調用一個調用約定的函數聲明的結果,其中函數指針聲明的調用約定不同。
你應該逐字地發佈編譯器輸出消息(複製和粘貼會更簡單和更準確的說明*);知道這是否是鏈接器或編譯器錯誤(該消息會告訴我們這一點)非常重要。很明顯,找不到的文件是一個處理器錯誤,但是在你嘗試修復原始問題之前*怎麼辦? – Clifford 2010-06-03 10:19:53