diff options
Diffstat (limited to 'src/lib/nt/ntstuff.h')
-rw-r--r-- | src/lib/nt/ntstuff.h | 573 |
1 files changed, 573 insertions, 0 deletions
diff --git a/src/lib/nt/ntstuff.h b/src/lib/nt/ntstuff.h new file mode 100644 index 0000000..03439b4 --- /dev/null +++ b/src/lib/nt/ntstuff.h @@ -0,0 +1,573 @@ +/* $Id: ntstuff.h 3223 2018-03-31 02:29:56Z bird $ */ +/** @file + * Definitions, types, prototypes and globals for NT. + */ + +/* + * Copyright (c) 2005-2013 knut st. osmundsen <bird-kBuild-spamx@anduin.net> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Alternatively, the content of this file may be used under the terms of the + * GPL version 2 or later, or LGPL version 2.1 or later. + */ + + +#ifndef ___nt_ntstuff_h +#define ___nt_ntstuff_h + +#define timeval timeval_Windows +#define WIN32_NO_STATUS +#include <Windows.h> +#include <winternl.h> +#undef WIN32_NO_STATUS +#include <ntstatus.h> +#undef timeval + +#include <k/kTypes.h> + + +/** @defgroup grp_nt_ntstuff NT Stuff + * @{ */ + +typedef LONG MY_NTSTATUS; +typedef ULONG MY_ACCESS_MASK; + +typedef struct MY_IO_STATUS_BLOCK +{ + union + { + MY_NTSTATUS Status; + PVOID Pointer; + } u; + ULONG_PTR Information; +} MY_IO_STATUS_BLOCK; + +typedef VOID WINAPI MY_IO_APC_ROUTINE(PVOID, MY_IO_STATUS_BLOCK *, ULONG); + +typedef struct MY_UNICODE_STRING +{ + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +} MY_UNICODE_STRING; + +typedef struct MY_STRING +{ + USHORT Length; + USHORT MaximumLength; + PCHAR Buffer; +} MY_STRING; +typedef MY_STRING MY_ANSI_STRING; + +typedef struct MY_CURDIR +{ + UNICODE_STRING DosPath; + HANDLE Handle; +} MY_CURDIR; +typedef MY_CURDIR *PMY_CURDIR; + +typedef struct MY_RTL_DRIVE_LETTER_CURDIR +{ + USHORT Flags; + USHORT Length; + ULONG TimeStamp; + MY_ANSI_STRING DosPath; +} MY_RTL_DRIVE_LETTER_CURDIR; +typedef MY_RTL_DRIVE_LETTER_CURDIR *PRTL_DRIVE_LETTER_CURDIR; + +typedef struct MY_RTL_USER_PROCESS_PARAMETERS +{ + ULONG MaximumLength; + ULONG Length; + ULONG Flags; + ULONG DebugFlags; + HANDLE ConsoleHandle; + ULONG ConsoleFlags; + HANDLE StandardInput; + HANDLE StandardOutput; + HANDLE StandardError; + MY_CURDIR CurrentDirectory; + MY_UNICODE_STRING DllPath; + MY_UNICODE_STRING ImagePathName; + MY_UNICODE_STRING CommandLine; + PWSTR Environment; + ULONG StartingX; + ULONG StartingY; + ULONG CountX; + ULONG CountY; + ULONG CountCharsX; + ULONG CountCharsY; + ULONG FillAttribute; + ULONG WindowFlags; + ULONG ShowWindowFlags; + MY_UNICODE_STRING WindowTitle; + MY_UNICODE_STRING DesktopInfo; + MY_UNICODE_STRING ShellInfo; + MY_UNICODE_STRING RuntimeInfo; + MY_RTL_DRIVE_LETTER_CURDIR CurrentDirectories[0x20]; + SIZE_T EnvironmentSize; /* >= Vista+ */ + SIZE_T EnvironmentVersion; /* >= Windows 7. */ + PVOID PackageDependencyData; /* >= Windows 8 or Windows 8.1. */ + ULONG ProcessGroupId; /* >= Windows 8 or Windows 8.1. */ +} MY_RTL_USER_PROCESS_PARAMETERS; +typedef MY_RTL_USER_PROCESS_PARAMETERS *PMY_RTL_USER_PROCESS_PARAMETERS; + +typedef struct MY_OBJECT_ATTRIBUTES +{ + ULONG Length; + HANDLE RootDirectory; + MY_UNICODE_STRING *ObjectName; + ULONG Attributes; + PVOID SecurityDescriptor; + PVOID SecurityQualityOfService; +} MY_OBJECT_ATTRIBUTES; + +#define MyInitializeObjectAttributes(a_pAttr, a_pName, a_fAttribs, a_hRoot, a_pSecDesc) \ + do { \ + (a_pAttr)->Length = sizeof(MY_OBJECT_ATTRIBUTES); \ + (a_pAttr)->RootDirectory = (a_hRoot); \ + (a_pAttr)->Attributes = (a_fAttribs); \ + (a_pAttr)->ObjectName = (a_pName); \ + (a_pAttr)->SecurityDescriptor = (a_pSecDesc); \ + (a_pAttr)->SecurityQualityOfService = NULL; \ + } while (0) + + + +typedef struct MY_FILE_BASIC_INFORMATION +{ + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + ULONG FileAttributes; +} MY_FILE_BASIC_INFORMATION; + +typedef struct MY_FILE_STANDARD_INFORMATION +{ + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG NumberOfLinks; + BOOLEAN DeletePending; + BOOLEAN Directory; +} MY_FILE_STANDARD_INFORMATION; + +typedef struct MY_FILE_NETWORK_OPEN_INFORMATION +{ + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG FileAttributes; + ULONG AlignmentPadding; +} MY_FILE_NETWORK_OPEN_INFORMATION; + +typedef struct MY_FILE_INTERNAL_INFORMATION +{ + LARGE_INTEGER IndexNumber; +} MY_FILE_INTERNAL_INFORMATION; + +typedef struct MY_FILE_EA_INFORMATION +{ + ULONG EaSize; +} MY_FILE_EA_INFORMATION; + +typedef struct MY_FILE_ACCESS_INFORMATION +{ + ACCESS_MASK AccessFlags; +} MY_FILE_ACCESS_INFORMATION; + +typedef struct MY_FILE_POSITION_INFORMATION +{ + LARGE_INTEGER CurrentByteOffset; +} MY_FILE_POSITION_INFORMATION; + +typedef struct MY_FILE_MODE_INFORMATION +{ + ULONG Mode; +} MY_FILE_MODE_INFORMATION; + +typedef struct MY_FILE_ALIGNMENT_INFORMATION +{ + ULONG AlignmentRequirement; +} MY_FILE_ALIGNMENT_INFORMATION; + +typedef struct MY_FILE_NAME_INFORMATION +{ + ULONG FileNameLength; + WCHAR FileName[1]; +} MY_FILE_NAME_INFORMATION; + +typedef struct MY_FILE_ALL_INFORMATION +{ + MY_FILE_BASIC_INFORMATION BasicInformation; + MY_FILE_STANDARD_INFORMATION StandardInformation; + MY_FILE_INTERNAL_INFORMATION InternalInformation; + MY_FILE_EA_INFORMATION EaInformation; + MY_FILE_ACCESS_INFORMATION AccessInformation; + MY_FILE_POSITION_INFORMATION PositionInformation; + MY_FILE_MODE_INFORMATION ModeInformation; + MY_FILE_ALIGNMENT_INFORMATION AlignmentInformation; + MY_FILE_NAME_INFORMATION NameInformation; +} MY_FILE_ALL_INFORMATION; + +typedef struct MY_FILE_ATTRIBUTE_TAG_INFORMATION +{ + ULONG FileAttributes; + ULONG ReparseTag; +} MY_FILE_ATTRIBUTE_TAG_INFORMATION; + + +typedef struct MY_FILE_NAMES_INFORMATION +{ + ULONG NextEntryOffset; + ULONG FileIndex; + ULONG FileNameLength; + WCHAR FileName[1]; +} MY_FILE_NAMES_INFORMATION; +/** The sizeof(MY_FILE_NAMES_INFORMATION) without the FileName. */ +#define MIN_SIZEOF_MY_FILE_NAMES_INFORMATION (4 + 4 + 4) + + +typedef struct MY_FILE_ID_FULL_DIR_INFORMATION +{ + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} MY_FILE_ID_FULL_DIR_INFORMATION; +/** The sizeof(MY_FILE_NAMES_INFORMATION) without the FileName. */ +#define MIN_SIZEOF_MY_FILE_ID_FULL_DIR_INFORMATION ( (size_t)&((MY_FILE_ID_FULL_DIR_INFORMATION *)0)->FileName ) + +typedef struct MY_FILE_BOTH_DIR_INFORMATION +{ + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + WCHAR FileName[1]; +} MY_FILE_BOTH_DIR_INFORMATION; +/** The sizeof(MY_FILE_BOTH_DIR_INFORMATION) without the FileName. */ +#define MIN_SIZEOF_MY_FILE_BOTH_DIR_INFORMATION ( (size_t)&((MY_FILE_BOTH_DIR_INFORMATION *)0)->FileName ) + + +typedef struct MY_FILE_ID_BOTH_DIR_INFORMATION +{ + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} MY_FILE_ID_BOTH_DIR_INFORMATION; +/** The sizeof(MY_FILE_NAMES_INFORMATION) without the FileName. */ +#define MIN_SIZEOF_MY_FILE_ID_BOTH_DIR_INFORMATION ( (size_t)&((MY_FILE_ID_BOTH_DIR_INFORMATION *)0)->FileName ) + + +typedef struct MY_FILE_DISPOSITION_INFORMATION +{ + BOOLEAN DeleteFile; +} MY_FILE_DISPOSITION_INFORMATION; + + +typedef enum MY_FILE_INFORMATION_CLASS +{ + MyFileDirectoryInformation = 1, + MyFileFullDirectoryInformation, /* = 2 */ + MyFileBothDirectoryInformation, /* = 3 */ + MyFileBasicInformation, /* = 4 */ + MyFileStandardInformation, /* = 5 */ + MyFileInternalInformation, /* = 6 */ + MyFileEaInformation, /* = 7 */ + MyFileAccessInformation, /* = 8 */ + MyFileNameInformation, /* = 9 */ + MyFileRenameInformation, /* = 10 */ + MyFileLinkInformation, /* = 11 */ + MyFileNamesInformation, /* = 12 */ + MyFileDispositionInformation, /* = 13 */ + MyFilePositionInformation, /* = 14 */ + MyFileFullEaInformation, /* = 15 */ + MyFileModeInformation, /* = 16 */ + MyFileAlignmentInformation, /* = 17 */ + MyFileAllInformation, /* = 18 */ + MyFileAllocationInformation, /* = 19 */ + MyFileEndOfFileInformation, /* = 20 */ + MyFileAlternateNameInformation, /* = 21 */ + MyFileStreamInformation, /* = 22 */ + MyFilePipeInformation, /* = 23 */ + MyFilePipeLocalInformation, /* = 24 */ + MyFilePipeRemoteInformation, /* = 25 */ + MyFileMailslotQueryInformation, /* = 26 */ + MyFileMailslotSetInformation, /* = 27 */ + MyFileCompressionInformation, /* = 28 */ + MyFileObjectIdInformation, /* = 29 */ + MyFileCompletionInformation, /* = 30 */ + MyFileMoveClusterInformation, /* = 31 */ + MyFileQuotaInformation, /* = 32 */ + MyFileReparsePointInformation, /* = 33 */ + MyFileNetworkOpenInformation, /* = 34 */ + MyFileAttributeTagInformation, /* = 35 */ + MyFileTrackingInformation, /* = 36 */ + MyFileIdBothDirectoryInformation, /* = 37 */ + MyFileIdFullDirectoryInformation, /* = 38 */ + MyFileValidDataLengthInformation, /* = 39 */ + MyFileShortNameInformation, /* = 40 */ + MyFileIoCompletionNotificationInformation, /* = 41 */ + MyFileIoStatusBlockRangeInformation, /* = 42 */ + MyFileIoPriorityHintInformation, /* = 43 */ + MyFileSfioReserveInformation, /* = 44 */ + MyFileSfioVolumeInformation, /* = 45 */ + MyFileHardLinkInformation, /* = 46 */ + MyFileProcessIdsUsingFileInformation, /* = 47 */ + MyFileNormalizedNameInformation, /* = 48 */ + MyFileNetworkPhysicalNameInformation, /* = 49 */ + MyFileIdGlobalTxDirectoryInformation, /* = 50 */ + MyFileIsRemoteDeviceInformation, /* = 51 */ + MyFileAttributeCacheInformation, /* = 52 */ + MyFileNumaNodeInformation, /* = 53 */ + MyFileStandardLinkInformation, /* = 54 */ + MyFileRemoteProtocolInformation, /* = 55 */ + MyFileMaximumInformation +} MY_FILE_INFORMATION_CLASS; + + +typedef struct MY_FILE_FS_VOLUME_INFORMATION +{ + LARGE_INTEGER VolumeCreationTime; + ULONG VolumeSerialNumber; + ULONG VolumeLabelLength; + BOOLEAN SupportsObjects; + WCHAR VolumeLabel[1]; +} MY_FILE_FS_VOLUME_INFORMATION; + +typedef struct _MY_FILE_FS_ATTRIBUTE_INFORMATION +{ + ULONG FileSystemAttributes; + LONG MaximumComponentNameLength; + ULONG FileSystemNameLength; + WCHAR FileSystemName[1]; +} MY_FILE_FS_ATTRIBUTE_INFORMATION; + +typedef enum MY_FSINFOCLASS +{ + MyFileFsVolumeInformation = 1, + MyFileFsLabelInformation, /* = 2 */ + MyFileFsSizeInformation, /* = 3 */ + MyFileFsDeviceInformation, /* = 4 */ + MyFileFsAttributeInformation, /* = 5 */ + MyFileFsControlInformation, /* = 6 */ + MyFileFsFullSizeInformation, /* = 7 */ + MyFileFsObjectIdInformation, /* = 8 */ + MyFileFsDriverPathInformation, /* = 9 */ + MyFileFsVolumeFlagsInformation, /* = 10 */ + MyFileFsMaximumInformation +} MY_FS_INFORMATION_CLASS; + + +typedef struct MY_RTLP_CURDIR_REF +{ + LONG RefCount; + HANDLE Handle; +} MY_RTLP_CURDIR_REF; + +typedef struct MY_RTL_RELATIVE_NAME_U +{ + MY_UNICODE_STRING RelativeName; + HANDLE ContainingDirectory; + MY_RTLP_CURDIR_REF CurDirRef; +} MY_RTL_RELATIVE_NAME_U; + + +#ifndef OBJ_INHERIT +# define OBJ_INHERIT 0x00000002U +# define OBJ_PERMANENT 0x00000010U +# define OBJ_EXCLUSIVE 0x00000020U +# define OBJ_CASE_INSENSITIVE 0x00000040U +# define OBJ_OPENIF 0x00000080U +# define OBJ_OPENLINK 0x00000100U +# define OBJ_KERNEL_HANDLE 0x00000200U +# define OBJ_FORCE_ACCESS_CHECK 0x00000400U +# define OBJ_VALID_ATTRIBUTES 0x000007f2U +#endif + +#ifndef FILE_OPEN +# define FILE_SUPERSEDE 0x00000000U +# define FILE_OPEN 0x00000001U +# define FILE_CREATE 0x00000002U +# define FILE_OPEN_IF 0x00000003U +# define FILE_OVERWRITE 0x00000004U +# define FILE_OVERWRITE_IF 0x00000005U +# define FILE_MAXIMUM_DISPOSITION 0x00000005U +#endif + +#ifndef FILE_DIRECTORY_FILE +# define FILE_DIRECTORY_FILE 0x00000001U +# define FILE_WRITE_THROUGH 0x00000002U +# define FILE_SEQUENTIAL_ONLY 0x00000004U +# define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008U +# define FILE_SYNCHRONOUS_IO_ALERT 0x00000010U +# define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020U +# define FILE_NON_DIRECTORY_FILE 0x00000040U +# define FILE_CREATE_TREE_CONNECTION 0x00000080U +# define FILE_COMPLETE_IF_OPLOCKED 0x00000100U +# define FILE_NO_EA_KNOWLEDGE 0x00000200U +# define FILE_OPEN_REMOTE_INSTANCE 0x00000400U +# define FILE_RANDOM_ACCESS 0x00000800U +# define FILE_DELETE_ON_CLOSE 0x00001000U +# define FILE_OPEN_BY_FILE_ID 0x00002000U +# define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000U +# define FILE_NO_COMPRESSION 0x00008000U +# define FILE_RESERVE_OPFILTER 0x00100000U +# define FILE_OPEN_REPARSE_POINT 0x00200000U +# define FILE_OPEN_NO_RECALL 0x00400000U +# define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000U +#endif + +#ifndef DUPLICATE_CLOSE_SOURCE /* For the misnomer NtDuplicateObject. */ +# define DUPLICATE_CLOSE_SOURCE 0x00000001U +# define DUPLICATE_SAME_ACCESS 0x00000002U +#endif +#ifndef DUPLICATE_SAME_ATTRIBUTES +# define DUPLICATE_SAME_ATTRIBUTES 0x00000004U +#endif + + +/** @name NT status codes and associated macros. + * @{ */ +#define MY_NT_SUCCESS(a_ntRc) ((MY_NTSTATUS)(a_ntRc) >= 0) +#define MY_NT_FAILURE(a_ntRc) ((MY_NTSTATUS)(a_ntRc) < 0) +#define MY_STATUS_NO_MORE_FILES ((MY_NTSTATUS)0x80000006) +#define MY_STATUS_OBJECT_NAME_INVALID ((MY_NTSTATUS)0xc0000033) +#define MY_STATUS_OBJECT_NAME_NOT_FOUND ((MY_NTSTATUS)0xc0000034) +#define MY_STATUS_OBJECT_PATH_INVALID ((MY_NTSTATUS)0xc0000039) +#define MY_STATUS_OBJECT_PATH_NOT_FOUND ((MY_NTSTATUS)0xc000003a) +#define MY_STATUS_OBJECT_PATH_SYNTAX_BAD ((MY_NTSTATUS)0xc000003b) +/** @} */ + +/** The pseudohandle for the current process. */ +#define MY_NT_CURRENT_PROCESS ((HANDLE)~(uintptr_t)0) +/** The pseudohandle for the current thread. */ +#define MY_NT_CURRENT_THREAD ((HANDLE)~(uintptr_t)1) + +typedef struct MY_CLIENT_ID +{ + HANDLE UniqueProcess; + HANDLE UniqueThread; +} MY_CLIENT_ID; + +/** Partial TEB. */ +typedef struct MY_PARTIAL_TEB +{ + NT_TIB NtTib; + PVOID EnvironmentPointer; + MY_CLIENT_ID ClientId; + PVOID ActiveRpcHandle; + PVOID ThreadLocalStoragePointer; + PPEB ProcessEnvironmentBlock; + KU32 LastErrorValue; + KU32 CountOfOwnedCriticalSections; + PVOID CsrClientThread; + PVOID Win32ThreadInfo; +} MY_PARTIAL_TEB; + +/** Internal macro for reading uintptr_t sized TEB members. */ +#if K_ARCH == K_ARCH_AMD64 +# define MY_NT_READ_TEB_WORKER(a_offTebMember) ( __readgsqword(a_offTebMember) ) +#elif K_ARCH == K_ARCH_X86_32 +# define MY_NT_READ_TEB_WORKER(a_offTebMember) ( __readfsdword(a_offTebMember) ) +#else +# error "Port me!" +#endif +/** Get the PEB pointer. + * @remark Needs stddef.h. */ +#define MY_NT_CURRENT_PEB() ( (PPEB)MY_NT_READ_TEB_WORKER(offsetof(MY_PARTIAL_TEB, ProcessEnvironmentBlock)) ) +/** Get the TEB pointer. + * @remark Needs stddef.h. */ +#define MY_NT_CURRENT_TEB() ( (PTEB)MY_NT_READ_TEB_WORKER(offsetof(NT_TIB, Self)) ) + + +/******************************************************************************* +* Global Variables * +*******************************************************************************/ +extern MY_NTSTATUS (WINAPI * g_pfnNtClose)(HANDLE); +extern MY_NTSTATUS (WINAPI * g_pfnNtCreateFile)(PHANDLE, MY_ACCESS_MASK, MY_OBJECT_ATTRIBUTES *, MY_IO_STATUS_BLOCK *, + PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG); +extern MY_NTSTATUS (WINAPI * g_pfnNtDeleteFile)(MY_OBJECT_ATTRIBUTES *); +extern MY_NTSTATUS (WINAPI * g_pfnNtDuplicateObject)(HANDLE hSrcProc, HANDLE hSrc, HANDLE hDstProc, HANDLE *phRet, + MY_ACCESS_MASK fDesiredAccess, ULONG fAttribs, ULONG fOptions); +extern MY_NTSTATUS (WINAPI * g_pfnNtReadFile)(HANDLE hFile, HANDLE hEvent, MY_IO_APC_ROUTINE *pfnApc, PVOID pvApcCtx, + MY_IO_STATUS_BLOCK *, PVOID pvBuf, ULONG cbToRead, PLARGE_INTEGER poffFile, + PULONG puKey); +extern MY_NTSTATUS (WINAPI * g_pfnNtQueryInformationFile)(HANDLE, MY_IO_STATUS_BLOCK *, + PVOID, LONG, MY_FILE_INFORMATION_CLASS); +extern MY_NTSTATUS (WINAPI * g_pfnNtQueryVolumeInformationFile)(HANDLE, MY_IO_STATUS_BLOCK *, + PVOID, LONG, MY_FS_INFORMATION_CLASS); +extern MY_NTSTATUS (WINAPI * g_pfnNtQueryDirectoryFile)(HANDLE, HANDLE, MY_IO_APC_ROUTINE *, PVOID, MY_IO_STATUS_BLOCK *, + PVOID, ULONG, MY_FILE_INFORMATION_CLASS, BOOLEAN, + MY_UNICODE_STRING *, BOOLEAN); +extern MY_NTSTATUS (WINAPI * g_pfnNtQueryAttributesFile)(MY_OBJECT_ATTRIBUTES *, MY_FILE_BASIC_INFORMATION *); +extern MY_NTSTATUS (WINAPI * g_pfnNtQueryFullAttributesFile)(MY_OBJECT_ATTRIBUTES *, MY_FILE_NETWORK_OPEN_INFORMATION *); +extern MY_NTSTATUS (WINAPI * g_pfnNtSetInformationFile)(HANDLE, MY_IO_STATUS_BLOCK *, PVOID, LONG, MY_FILE_INFORMATION_CLASS); +extern BOOLEAN (WINAPI * g_pfnRtlDosPathNameToNtPathName_U)(PCWSTR, MY_UNICODE_STRING *, PCWSTR *, MY_RTL_RELATIVE_NAME_U *); +extern MY_NTSTATUS (WINAPI * g_pfnRtlAnsiStringToUnicodeString)(MY_UNICODE_STRING *, MY_ANSI_STRING const *, BOOLEAN); +extern MY_NTSTATUS (WINAPI * g_pfnRtlUnicodeStringToAnsiString)(MY_ANSI_STRING *, MY_UNICODE_STRING *, BOOLEAN); +extern BOOLEAN (WINAPI * g_pfnRtlEqualUnicodeString)(MY_UNICODE_STRING const *pUniStr1, MY_UNICODE_STRING const *pUniStr2, + BOOLEAN fCaseInsensitive); +extern BOOLEAN (WINAPI * g_pfnRtlEqualString)(MY_ANSI_STRING const *pAnsiStr1, MY_ANSI_STRING const *pAnsiStr2, + BOOLEAN fCaseInsensitive); +extern UCHAR (WINAPI * g_pfnRtlUpperChar)(UCHAR uch); +extern ULONG (WINAPI * g_pfnRtlNtStatusToDosError)(MY_NTSTATUS rcNt); +extern VOID (WINAPI * g_pfnRtlAcquirePebLock)(VOID); +extern VOID (WINAPI * g_pfnRtlReleasePebLock)(VOID); + + +/** @} */ + +#endif + |