Module: wine Branch: master Commit: 948d39c52905c6927d67b5eefaeb4a8fab537db1 URL: https://source.winehq.org/git/wine.git/?a=commit;h=948d39c52905c6927d67b5eef...
Author: Zhiyi Zhang zzhang@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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);