[NTDLL]: Add, export, and stubplement RtlComputeImportTableHash and document in NDK.

[NTDLL]: Use HANDLE instead of Win32 HKEY.
[NDK]: Add missing NtCreateProcessEx flags and some missing Ldr functions + missing RtlGetFullPathName_UstrEx.
[CSRSS]: Define two new CSRSS messages (not implemented): UpdateVdmEntry and GetVdmExitCode.

svn path=/trunk/; revision=54968
This commit is contained in:
Alex Ionescu 2012-01-15 03:16:00 +00:00
parent 4902210307
commit 4a76b4fbe8
8 changed files with 99 additions and 13 deletions

View file

@ -485,7 +485,7 @@
@ stdcall RtlCompareUnicodeString (ptr ptr long)
@ stdcall RtlCompressBuffer(long ptr long ptr long long ptr ptr)
@ stdcall RtlComputeCrc32(long ptr long)
//@ stdcall RtlComputeImportTableHash
@ stdcall RtlComputeImportTableHash(ptr ptr long)
//@ stdcall RtlComputePrivatizedDllName_U
//@ stdcall RtlConsoleMultiByteToUnicodeN
@ stdcall RtlConvertExclusiveToShared(ptr)

View file

@ -483,7 +483,7 @@
@ stdcall RtlCompareUnicodeString (ptr ptr long)
@ stdcall RtlCompressBuffer(long ptr long ptr long long ptr ptr)
@ stdcall RtlComputeCrc32(long ptr long)
;@ stdcall RtlComputeImportTableHash
@ stdcall RtlComputeImportTableHash(ptr ptr long)
;@ stdcall RtlComputePrivatizedDllName_U
;@ stdcall RtlConsoleMultiByteToUnicodeN
@ stdcall RtlConvertExclusiveToShared(ptr)

View file

@ -18,8 +18,8 @@
/* GLOBALS *******************************************************************/
HKEY ImageExecOptionsKey;
HKEY Wow64ExecOptionsKey;
HANDLE ImageExecOptionsKey;
HANDLE Wow64ExecOptionsKey;
UNICODE_STRING ImageExecOptionsString = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options");
UNICODE_STRING Wow64OptionsString = RTL_CONSTANT_STRING(L"");
UNICODE_STRING NtDllString = RTL_CONSTANT_STRING(L"ntdll.dll");
@ -104,9 +104,9 @@ NTSTATUS
NTAPI
LdrOpenImageFileOptionsKey(IN PUNICODE_STRING SubKey,
IN BOOLEAN Wow64,
OUT PHKEY NewKeyHandle)
OUT PHANDLE NewKeyHandle)
{
PHKEY RootKeyLocation;
PHANDLE RootKeyLocation;
HANDLE RootKey;
UNICODE_STRING SubKeyString;
OBJECT_ATTRIBUTES ObjectAttributes;
@ -174,7 +174,7 @@ LdrOpenImageFileOptionsKey(IN PUNICODE_STRING SubKey,
*/
NTSTATUS
NTAPI
LdrQueryImageFileKeyOption(IN HKEY KeyHandle,
LdrQueryImageFileKeyOption(IN HANDLE KeyHandle,
IN PCWSTR ValueName,
IN ULONG Type,
OUT PVOID Buffer,
@ -345,7 +345,7 @@ LdrQueryImageFileExecutionOptionsEx(IN PUNICODE_STRING SubKey,
IN BOOLEAN Wow64)
{
NTSTATUS Status;
HKEY KeyHandle;
HANDLE KeyHandle;
/* Open a handle to the key */
Status = LdrOpenImageFileOptionsKey(SubKey, Wow64, &KeyHandle);
@ -1326,10 +1326,10 @@ LdrpInitializeApplicationVerifierPackage(PUNICODE_STRING ImagePathName, PPEB Peb
NTSTATUS
NTAPI
LdrpInitializeExecutionOptions(PUNICODE_STRING ImagePathName, PPEB Peb, PHKEY OptionsKey)
LdrpInitializeExecutionOptions(PUNICODE_STRING ImagePathName, PPEB Peb, PHANDLE OptionsKey)
{
NTSTATUS Status;
HKEY KeyHandle;
HANDLE KeyHandle;
ULONG ExecuteOptions, MinimumStackCommit = 0, GlobalFlag;
/* Return error if we were not provided a pointer where to save the options key handle */
@ -1467,12 +1467,12 @@ LdrpInitializeProcess(IN PCONTEXT Context,
PPEB Peb = NtCurrentPeb();
BOOLEAN IsDotNetImage = FALSE;
BOOLEAN FreeCurDir = FALSE;
//HKEY CompatKey;
//HANDLE CompatKey;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
//LPWSTR ImagePathBuffer;
ULONG ConfigSize;
UNICODE_STRING CurrentDirectory;
HKEY OptionsKey;
HANDLE OptionsKey;
ULONG HeapFlags;
PIMAGE_NT_HEADERS NtHeader;
LPWSTR NtDllName = NULL;

View file

@ -562,4 +562,18 @@ RtlWow64EnableFsRedirectionEx(IN PVOID Wow64FsEnableRedirection,
return STATUS_NOT_IMPLEMENTED;
}
/*
* @unimplemented
*/
NTSYSAPI
NTSTATUS
NTAPI
RtlComputeImportTableHash(IN HANDLE FileHandle,
OUT PCHAR Hash,
IN ULONG ImporTTableHashSize)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
/* EOF */

View file

@ -73,6 +73,15 @@ Author:
#define FLG_DEBUG_INITIAL_COMMAND_EX 0x04000000
#define FLG_VALID_BITS 0x07FFFFFF
//
// Flags for NtCreateProcessEx
//
#define PROCESS_CREATE_FLAGS_BREAKAWAY 0x00000001
#define PROCESS_CREATE_FLAGS_NO_DEBUG_INHERIT 0x00000002
#define PROCESS_CREATE_FLAGS_INHERIT_HANDLES 0x00000004
#define PROCESS_CREATE_FLAGS_OVERRIDE_ADDRESS_SPACE 0x00000008
#define PROCESS_CREATE_FLAGS_LARGE_PAGES 0x00000010
//
// Process priority classes
//

View file

@ -2513,7 +2513,7 @@ NTAPI
RtlDosPathNameToRelativeNtPathName_U(
IN PCWSTR DosName,
OUT PUNICODE_STRING NtName,
OUT PCWSTR * PartName,
OUT PCWSTR *PartName,
OUT PRTL_RELATIVE_NAME_U RelativeName
);
@ -2545,6 +2545,19 @@ RtlGetFullPathName_U(
OUT PWSTR *ShortName
);
ULONG
NTAPI
RtlGetFullPathName_UstrEx(
IN PUNICODE_STRING FileName,
IN PUNICODE_STRING StaticString,
IN PUNICODE_STRING DynamicString,
IN PUNICODE_STRING *StringUsed,
IN PSIZE_T FilePartSize,
OUT PBOOLEAN NameInvalid,
OUT RTL_PATH_TYPE* PathType,
OUT PULONG LengthNeeded
);
NTSYSAPI
ULONG
NTAPI
@ -3824,6 +3837,15 @@ NTAPI
RtlGUIDFromString(
IN PUNICODE_STRING GuidString,
OUT GUID *Guid);
NTSYSAPI
NTSTATUS
NTAPI
RtlComputeImportTableHash(
IN HANDLE hFile,
OUT PCHAR Hash,
IN ULONG ImportTableHashRevision
);
#endif
#ifdef __cplusplus

View file

@ -314,4 +314,23 @@ LdrVerifyImageMatchesChecksum(
OUT PUSHORT ImageCharacterstics
);
NTSTATUS
NTAPI
LdrOpenImageFileOptionsKey(
IN PUNICODE_STRING SubKey,
IN BOOLEAN Wow64,
OUT PHANDLE NewKeyHandle
);
NTSTATUS
NTAPI
LdrQueryImageFileKeyOption(
IN HANDLE KeyHandle,
IN PCWSTR ValueName,
IN ULONG Type,
OUT PVOID Buffer,
IN ULONG BufferSize,
OUT PULONG ReturnedLength OPTIONAL
);
#endif

View file

@ -530,6 +530,24 @@ typedef struct
ULONG VideoMode;
} CSRSS_SOUND_SENTRY, *PCSRSS_SOUND_SENTRY;
typedef struct
{
ULONG iTask;
ULONG BinaryType;
HANDLE ConsoleHandle;
HANDLE VDMProcessHandle;
HANDLE WaitObjectForParent;
USHORT EntryIndex;
USHORT VDMCreationState;
} CSRSS_UPDATE_VDM_ENTRY, *PCSRSS_UPDATE_VDM_ENTRY;
typedef struct
{
HANDLE ConsoleHandle;
HANDLE hParent;
ULONG ExitCode;
} CSRSS_GET_VDM_EXIT_CODE, *PCSRSS_GET_VDM_EXIT_CODE;
#define CSR_API_MESSAGE_HEADER_SIZE(Type) (FIELD_OFFSET(CSR_API_MESSAGE, Data) + sizeof(Type))
#define CSRSS_MAX_WRITE_CONSOLE (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE))
#define CSRSS_MAX_WRITE_CONSOLE_OUTPUT_CHAR (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE_OUTPUT_CHAR))
@ -612,6 +630,8 @@ typedef struct
#define GET_TEMP_FILE (0x48)
#define DEFINE_DOS_DEVICE (0X49)
#define SOUND_SENTRY (0x50)
#define UPDATE_VDM_ENTRY (0x51)
#define GET_VDM_EXIT_CODE (0x52)
/* Keep in sync with definition below. */
#define CSRSS_HEADER_SIZE (sizeof(PORT_MESSAGE) + sizeof(ULONG) + sizeof(NTSTATUS))
@ -696,6 +716,8 @@ typedef struct _CSR_API_MESSAGE
CSRSS_GET_TEMP_FILE GetTempFile;
CSRSS_DEFINE_DOS_DEVICE DefineDosDeviceRequest;
CSRSS_SOUND_SENTRY SoundSentryRequest;
CSRSS_UPDATE_VDM_ENTRY UpdateVdmEntry;
CSRSS_GET_VDM_EXIT_CODE GetVdmExitCode;
} Data;
} CSR_API_MESSAGE, *PCSR_API_MESSAGE;