Я попытался использовать функцию под названием NTCreateFile
. Когда я скомпилировал его, он дал мне ошибку: «Идентификатор _NTCreateFile не найден». Я включил заголовок winternl.h
. Итак, я попытался использовать ZwCreatFile
, в соответствии с MSDN я включил ntifs.h
, но я не могу включить этот заголовок. В нем говорится: «Невозможно открыть/найти каталог». Я использую V @ 2008. В чем проблема? Я что-то пропустил?Не удалось включить ntifs.h в проект win32
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 не было должным образом сохранено во время вызова функции. Обычно это результат вызова функции, объявленной с одним вызовом, с указателем функции, объявленным с другим соглашением о вызовах.
Вы должны публиковать выходные сообщения компилятора verbatim (копия и вставка будут проще и точнее, чем описание *); важно знать, является ли это ошибкой компоновщика или компилятора (сообщение сообщит нам об этом). Очевидно, что файл не найден, это пропроцессорная ошибка, но как насчет * до * вашей попытки исправить исходную проблему? – Clifford