我试图使用名为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