Zhiyi Zhang : ntoskrnl.exe: Implement ExUuidCreate().
Alexandre Julliard
julliard at winehq.org
Fri Mar 1 16:42:10 CST 2019
Module: wine
Branch: master
Commit: 948d39c52905c6927d67b5eefaeb4a8fab537db1
URL: https://source.winehq.org/git/wine.git/?a=commit;h=948d39c52905c6927d67b5eefaeb4a8fab537db1
Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date: Wed Feb 27 11:08:42 2019 +0800
ntoskrnl.exe: Implement ExUuidCreate().
This is mostly a copy of UuidCreate() in rpcrt4 with NTSTATUS return code.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntoskrnl.exe/ntoskrnl.c | 33 +++++++++++++++++++++++++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +-
include/ddk/ntddk.h | 2 ++
3 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 7578ebc..52e0228 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -41,6 +41,7 @@
#include "dbt.h"
#include "winreg.h"
#include "setupapi.h"
+#include "ntsecapi.h"
#include "ddk/csq.h"
#include "ddk/ntddk.h"
#include "ddk/ntifs.h"
@@ -4128,3 +4129,35 @@ static struct _OBJECT_TYPE token_type =
};
POBJECT_TYPE SeTokenObjectType = &token_type;
+
+/*************************************************************************
+ * ExUuidCreate (NTOSKRNL.@)
+ *
+ * Creates a 128bit UUID.
+ *
+ * RETURNS
+ *
+ * STATUS_SUCCESS if successful.
+ * RPC_NT_UUID_LOCAL_ONLY if UUID is only locally unique.
+ *
+ * NOTES
+ *
+ * Follows RFC 4122, section 4.4 (Algorithms for Creating a UUID from
+ * Truly Random or Pseudo-Random Numbers)
+ */
+NTSTATUS WINAPI ExUuidCreate(UUID *uuid)
+{
+ RtlGenRandom(uuid, sizeof(*uuid));
+ /* Clear the version bits and set the version (4) */
+ uuid->Data3 &= 0x0fff;
+ uuid->Data3 |= (4 << 12);
+ /* Set the topmost bits of Data4 (clock_seq_hi_and_reserved) as
+ * specified in RFC 4122, section 4.4.
+ */
+ uuid->Data4[0] &= 0x3f;
+ uuid->Data4[0] |= 0x80;
+
+ TRACE("%s\n", debugstr_guid(uuid));
+
+ return STATUS_SUCCESS;
+}
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 975f6c0..438f720 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -185,7 +185,7 @@
@ stub ExSystemExceptionFilter
@ stdcall ExSystemTimeToLocalTime(ptr ptr) RtlSystemTimeToLocalTime
@ stub ExUnregisterCallback
-@ stub ExUuidCreate
+@ stdcall ExUuidCreate(ptr)
@ stub ExVerifySuite
@ stub ExWindowStationObjectType
@ stub Exi386InterlockedDecrementLong
diff --git a/include/ddk/ntddk.h b/include/ddk/ntddk.h
index 452e510..fb8cacc 100644
--- a/include/ddk/ntddk.h
+++ b/include/ddk/ntddk.h
@@ -202,7 +202,9 @@ typedef NTSTATUS (WINAPI *PIO_QUERY_DEVICE_ROUTINE)(PVOID,PUNICODE_STRING,INTERF
PKEY_VALUE_FULL_INFORMATION*,CONFIGURATION_TYPE,ULONG,PKEY_VALUE_FULL_INFORMATION*);
typedef void (NTAPI EXPAND_STACK_CALLOUT)(void*);
typedef EXPAND_STACK_CALLOUT *PEXPAND_STACK_CALLOUT;
+typedef GUID UUID;
+NTSTATUS WINAPI ExUuidCreate(UUID*);
NTSTATUS WINAPI IoQueryDeviceDescription(PINTERFACE_TYPE,PULONG,PCONFIGURATION_TYPE,PULONG,
PCONFIGURATION_TYPE,PULONG,PIO_QUERY_DEVICE_ROUTINE,PVOID);
void WINAPI IoRegisterDriverReinitialization(PDRIVER_OBJECT,PDRIVER_REINITIALIZE,PVOID);
More information about the wine-cvs
mailing list