You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
407 lines
10 KiB
407 lines
10 KiB
//=================================================================
|
|
|
|
//
|
|
|
|
// NTDllApi.h
|
|
|
|
//
|
|
|
|
// Copyright (c) 1999-2001 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
//=================================================================
|
|
|
|
#ifndef _NTDLLAPI_H_
|
|
#define _NTDLLAPI_H_
|
|
|
|
/******************************************************************************
|
|
* #includes to Register this class with the CResourceManager.
|
|
*****************************************************************************/
|
|
extern const GUID g_guidNtDllApi;
|
|
extern const TCHAR g_tstrNtDll[];
|
|
|
|
|
|
/******************************************************************************
|
|
* Function pointer typedefs. Add new functions here as required.
|
|
*****************************************************************************/
|
|
|
|
typedef DWORD (WINAPI *PFN_NTDLL_RTL_INIT_UNICODE_STRING)
|
|
(
|
|
UNICODE_STRING*,
|
|
LPCWSTR
|
|
);
|
|
|
|
typedef void ( NTAPI *PFN_NTDLL_RTL_FREE_UNICODE_STRING )
|
|
(
|
|
PUNICODE_STRING UnicodeString
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_NTDLL_NT_SET_SYSTEM_ENVIRONMENT_VALUE)
|
|
(
|
|
UNICODE_STRING*,
|
|
UNICODE_STRING*
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_NTDLL_NT_QUERY_SYSTEM_ENVIRONMENT_VALUE)
|
|
(
|
|
PUNICODE_STRING,
|
|
PWSTR,
|
|
USHORT,
|
|
PUSHORT
|
|
);
|
|
|
|
//#if defined(EFI_NVRAM_ENABLED)
|
|
#if defined(_IA64_)
|
|
typedef DWORD (WINAPI *PFN_NTDLL_NT_QUERY_BOOT_OPTIONS)
|
|
(
|
|
PBOOT_OPTIONS,
|
|
PULONG
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_NTDLL_NT_SET_BOOT_OPTIONS)
|
|
(
|
|
PBOOT_OPTIONS,
|
|
ULONG
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_NTDLL_NT_QUERY_BOOT_ENTRY_ORDER)
|
|
(
|
|
PULONG,
|
|
PULONG
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_NTDLL_NT_SET_BOOT_ENTRY_ORDER)
|
|
(
|
|
PULONG,
|
|
ULONG
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_NTDLL_NT_ENUMERATE_BOOT_ENTRIES)
|
|
(
|
|
PVOID,
|
|
PULONG
|
|
);
|
|
|
|
#endif // defined(EFI_NVRAM_ENABLED)
|
|
|
|
typedef NTSTATUS (WINAPI *PFN_NTDLL_NT_CREATE_FILE)
|
|
(
|
|
HANDLE*,
|
|
ACCESS_MASK,
|
|
POBJECT_ATTRIBUTES,
|
|
PIO_STATUS_BLOCK,
|
|
PLARGE_INTEGER,
|
|
ULONG,
|
|
ULONG,
|
|
ULONG,
|
|
ULONG,
|
|
PVOID,
|
|
ULONG
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *PFN_NT_QUERY_SYSTEM_INFORMATION)
|
|
(
|
|
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
|
|
OUT PVOID SystemInformation,
|
|
IN ULONG SystemInformationLength,
|
|
OUT PULONG ReturnLength OPTIONAL
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *PFN_NTQUERYINFORMATIONPROCESS)
|
|
(
|
|
IN HANDLE ProcessHandle,
|
|
IN PROCESSINFOCLASS ProcessInformationClass,
|
|
OUT PVOID ProcessInformation,
|
|
IN ULONG ProcessInformationLength,
|
|
OUT PULONG ReturnLength OPTIONAL
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *PFN_NT_QUERY_DIRECTORY_OBJECT)
|
|
(
|
|
IN HANDLE DirectoryHandle,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
IN BOOLEAN ReturnSingleEntry,
|
|
IN BOOLEAN RestartScan,
|
|
IN OUT PULONG Context,
|
|
OUT PULONG ReturnLength OPTIONAL
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *PFN_NT_QUERY_OBJECT)
|
|
(
|
|
IN HANDLE Handle,
|
|
IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
|
|
OUT PVOID ObjectInformation,
|
|
IN ULONG Length,
|
|
OUT PULONG ReturnLength OPTIONAL
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *PFN_NT_OPEN_DIRECTORY_OBJECT)
|
|
(
|
|
OUT PHANDLE DirectoryHandle,
|
|
IN ACCESS_MASK DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes
|
|
);
|
|
|
|
typedef NTSTATUS ( NTAPI *PFN_NT_QUERY_INFORMATION_TOKEN )
|
|
(
|
|
IN HANDLE TokenHandle,
|
|
IN TOKEN_INFORMATION_CLASS TokenInformationClass,
|
|
OUT PVOID TokenInformation,
|
|
IN ULONG TokenInformationLength,
|
|
OUT PULONG ReturnLength
|
|
);
|
|
|
|
typedef NTSTATUS ( NTAPI *PFN_NT_OPEN_FILE )
|
|
(
|
|
OUT PHANDLE FileHandle,
|
|
IN ACCESS_MASK DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG OpenOptions
|
|
);
|
|
|
|
typedef NTSTATUS ( NTAPI *PFN_NT_CLOSE )
|
|
(
|
|
IN HANDLE Handle
|
|
);
|
|
|
|
typedef NTSTATUS ( NTAPI *PFN_NT_FS_CONTROL_FILE )
|
|
(
|
|
IN HANDLE FileHandle,
|
|
IN HANDLE Event OPTIONAL,
|
|
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
|
|
IN PVOID ApcContext OPTIONAL,
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
IN ULONG FsControlCode,
|
|
IN PVOID InputBuffer OPTIONAL,
|
|
IN ULONG InputBufferLength,
|
|
OUT PVOID OutputBuffer OPTIONAL,
|
|
IN ULONG OutputBufferLength
|
|
);
|
|
|
|
typedef NTSTATUS ( NTAPI *PFN_NT_QUERY_VOLUME_INFORMATION_FILE )
|
|
(
|
|
IN HANDLE FileHandle,
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
OUT PVOID FsInformation,
|
|
IN ULONG Length,
|
|
IN FS_INFORMATION_CLASS FsInformationClass
|
|
);
|
|
|
|
/******************************************************************************
|
|
* Wrapper class for NtDll load/unload, for registration with CResourceManager.
|
|
*****************************************************************************/
|
|
class CNtDllApi : public CDllWrapperBase
|
|
{
|
|
private:
|
|
|
|
// Member variables (function pointers) pointing to NtDll functions.
|
|
// Add new functions here as required.
|
|
|
|
PFN_NTDLL_RTL_INIT_UNICODE_STRING m_pfnRtlInitUnicodeString;
|
|
PFN_NTDLL_RTL_FREE_UNICODE_STRING m_pfnRtlFreeUnicodeString;
|
|
PFN_NTDLL_NT_SET_SYSTEM_ENVIRONMENT_VALUE m_pfnNtSetSystemEnvironmentValue;
|
|
PFN_NTDLL_NT_QUERY_SYSTEM_ENVIRONMENT_VALUE m_pfnNtQuerySystemEnvironmentValue;
|
|
//#if defined(EFI_NVRAM_ENABLED)
|
|
#if defined(_IA64_)
|
|
PFN_NTDLL_NT_QUERY_BOOT_OPTIONS m_pfnNtQueryBootOptions;
|
|
PFN_NTDLL_NT_SET_BOOT_OPTIONS m_pfnNtSetBootOptions;
|
|
PFN_NTDLL_NT_QUERY_BOOT_ENTRY_ORDER m_pfnNtQueryBootEntryOrder;
|
|
PFN_NTDLL_NT_SET_BOOT_ENTRY_ORDER m_pfnNtSetBootEntryOrder;
|
|
PFN_NTDLL_NT_ENUMERATE_BOOT_ENTRIES m_pfnNtEnumerateBootEntries;
|
|
#endif // defined(EFI_NVRAM_ENABLED)
|
|
PFN_NTDLL_NT_CREATE_FILE m_pfnNtCreateFile;
|
|
PFN_NT_QUERY_SYSTEM_INFORMATION m_pfnNtQuerySystemInformation;
|
|
PFN_NT_QUERY_DIRECTORY_OBJECT m_pfnNtQueryDirectoryObject;
|
|
PFN_NT_QUERY_OBJECT m_pfnNtQueryObject;
|
|
PFN_NT_OPEN_DIRECTORY_OBJECT m_pfnNtOpenDirectoryObject;
|
|
PFN_NTQUERYINFORMATIONPROCESS m_pfnNtQueryInformationProcess ;
|
|
PFN_NT_QUERY_INFORMATION_TOKEN m_pfnNtQueryInformationToken ;
|
|
PFN_NT_OPEN_FILE m_pfnNtOpenFile ;
|
|
PFN_NT_CLOSE m_pfnNtClose ;
|
|
PFN_NT_FS_CONTROL_FILE m_pfnNtFsControlFile ;
|
|
PFN_NT_QUERY_VOLUME_INFORMATION_FILE m_pfnNtQueryVolumeInformationFile;
|
|
|
|
public:
|
|
|
|
// Constructor and destructor:
|
|
CNtDllApi(LPCTSTR a_tstrWrappedDllName);
|
|
~CNtDllApi();
|
|
|
|
// Initialization function to check function pointers.
|
|
virtual bool Init();
|
|
|
|
// Member functions wrapping NtDll functions.
|
|
// Add new functions here as required:
|
|
|
|
DWORD RtlInitUnicodeString (
|
|
|
|
UNICODE_STRING* a_pustr,
|
|
LPCWSTR a_wstr
|
|
);
|
|
|
|
VOID RtlFreeUnicodeString (
|
|
|
|
PUNICODE_STRING UnicodeString
|
|
) ;
|
|
|
|
DWORD NtSetSystemEnvironmentValue (
|
|
|
|
UNICODE_STRING* a_pustr1,
|
|
UNICODE_STRING* a_pustr2
|
|
);
|
|
|
|
DWORD NtQuerySystemEnvironmentValue (
|
|
|
|
PUNICODE_STRING a_pustr,
|
|
PWSTR a_pwstr,
|
|
USHORT a_us,
|
|
PUSHORT a_pus
|
|
);
|
|
|
|
//#if defined(EFI_NVRAM_ENABLED)
|
|
#if defined(_IA64_)
|
|
|
|
DWORD NtQueryBootOptions (
|
|
|
|
PBOOT_OPTIONS BootOptions,
|
|
PULONG BootOptionsLength
|
|
);
|
|
|
|
DWORD NtSetBootOptions (
|
|
|
|
PBOOT_OPTIONS BootOptions,
|
|
ULONG FieldsToChange
|
|
);
|
|
|
|
DWORD NtQueryBootEntryOrder (
|
|
|
|
PULONG Ids,
|
|
PULONG Count
|
|
);
|
|
|
|
DWORD NtSetBootEntryOrder (
|
|
|
|
PULONG Ids,
|
|
ULONG Count
|
|
);
|
|
|
|
DWORD NtEnumerateBootEntries (
|
|
|
|
PVOID Buffer,
|
|
PULONG BufferLength
|
|
);
|
|
|
|
#endif // defined(EFI_NVRAM_ENABLED)
|
|
|
|
NTSTATUS NtCreateFile (
|
|
|
|
HANDLE *a_ph,
|
|
ACCESS_MASK a_am,
|
|
POBJECT_ATTRIBUTES a_pa,
|
|
PIO_STATUS_BLOCK a_sb,
|
|
PLARGE_INTEGER a_pla,
|
|
ULONG a_ul1,
|
|
ULONG a_ul2,
|
|
ULONG a_ul3,
|
|
ULONG a_ul4,
|
|
PVOID a_pv,
|
|
ULONG a_ul5
|
|
);
|
|
|
|
NTSTATUS NtQuerySystemInformation
|
|
(
|
|
SYSTEM_INFORMATION_CLASS a_SystemInformationClass,
|
|
PVOID a_SystemInformation,
|
|
ULONG a_SystemInformationLength,
|
|
PULONG a_ReturnLength
|
|
);
|
|
|
|
NTSTATUS NtQueryDirectoryObject
|
|
(
|
|
HANDLE a_DirectoryHandle,
|
|
PVOID a_Buffer,
|
|
ULONG a_Length,
|
|
BOOLEAN a_ReturnSingleEntry,
|
|
BOOLEAN a_RestartScan,
|
|
PULONG a_Context,
|
|
PULONG a_ReturnLength
|
|
);
|
|
|
|
NTSTATUS NtQueryObject
|
|
(
|
|
HANDLE a_Handle,
|
|
OBJECT_INFORMATION_CLASS a_ObjectInformationClass,
|
|
PVOID a_ObjectInformation,
|
|
ULONG a_Length,
|
|
PULONG a_ReturnLength
|
|
);
|
|
|
|
NTSTATUS NtOpenDirectoryObject
|
|
(
|
|
PHANDLE a_DirectoryHandle,
|
|
ACCESS_MASK a_DesiredAccess,
|
|
POBJECT_ATTRIBUTES a_ObjectAttributes
|
|
);
|
|
|
|
NTSTATUS NtQueryInformationProcess (
|
|
|
|
IN HANDLE ProcessHandle,
|
|
IN PROCESSINFOCLASS ProcessInformationClass,
|
|
OUT PVOID ProcessInformation,
|
|
IN ULONG ProcessInformationLength,
|
|
OUT PULONG ReturnLength OPTIONAL
|
|
);
|
|
|
|
NTSTATUS NtQueryInformationToken (
|
|
|
|
IN HANDLE TokenHandle,
|
|
IN TOKEN_INFORMATION_CLASS TokenInformationClass,
|
|
OUT PVOID TokenInformation,
|
|
IN ULONG TokenInformationLength,
|
|
OUT PULONG ReturnLength
|
|
) ;
|
|
|
|
NTSTATUS NtOpenFile (
|
|
|
|
OUT PHANDLE FileHandle,
|
|
IN ACCESS_MASK DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG OpenOptions
|
|
);
|
|
|
|
NTSTATUS NtClose (
|
|
|
|
IN HANDLE Handle
|
|
);
|
|
|
|
NTSTATUS NtFsControlFile (
|
|
|
|
IN HANDLE FileHandle,
|
|
IN HANDLE Event OPTIONAL,
|
|
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
|
|
IN PVOID ApcContext OPTIONAL,
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
IN ULONG FsControlCode,
|
|
IN PVOID InputBuffer OPTIONAL,
|
|
IN ULONG InputBufferLength,
|
|
OUT PVOID OutputBuffer OPTIONAL,
|
|
IN ULONG OutputBufferLength
|
|
);
|
|
|
|
NTSTATUS NtQueryVolumeInformationFile(
|
|
IN HANDLE FileHandle,
|
|
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
|
OUT PVOID FsInformation,
|
|
IN ULONG Length,
|
|
IN FS_INFORMATION_CLASS FsInformationClass);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|