Leaked source code of windows server 2003
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

//=================================================================
//
// 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