[NTDLL]: Add, export, and stubplement RtlComputeImportTableHash and document in NDK.
authorAlex Ionescu <aionescu@gmail.com>
Sun, 15 Jan 2012 03:16:00 +0000 (03:16 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Sun, 15 Jan 2012 03:16:00 +0000 (03:16 +0000)
[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

reactos/dll/ntdll/def/ntdll.pspec
reactos/dll/ntdll/def/ntdll.spec
reactos/dll/ntdll/ldr/ldrinit.c
reactos/dll/ntdll/rtl/libsupp.c
reactos/include/ndk/pstypes.h
reactos/include/ndk/rtlfuncs.h
reactos/include/ndk/umfuncs.h
reactos/include/reactos/subsys/csrss/csrss.h

index bbddbb2..d1ae0cb 100644 (file)
 @ 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)
index f5aab51..d102647 100644 (file)
 @ 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)
index bd7084d..fdf28f7 100644 (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;
index 6a8ed29..0fbe0c9 100644 (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 */
index d7a90a3..f13d19b 100644 (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
 //
index 71d23b0..1556698 100644 (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
index 45eb393..3af7928 100644 (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
index 9a31dee..cdebdb6 100644 (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;