Commit 58a69888 authored by Alexandre Julliard's avatar Alexandre Julliard

advapi32: Make rpcrt4 a delayed import to work around circular dependencies with native.

parent 5b3750e2
...@@ -5,7 +5,8 @@ SRCDIR = @srcdir@ ...@@ -5,7 +5,8 @@ SRCDIR = @srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
MODULE = advapi32.dll MODULE = advapi32.dll
IMPORTLIB = advapi32 IMPORTLIB = advapi32
IMPORTS = rpcrt4 kernel32 ntdll IMPORTS = kernel32 ntdll
DELAYIMPORTS = rpcrt4
EXTRALIBS = @SECURITYLIB@ EXTRALIBS = @SECURITYLIB@
C_SRCS = \ C_SRCS = \
......
...@@ -284,40 +284,30 @@ static void CRYPT_CreateMachineGuid(void) ...@@ -284,40 +284,30 @@ static void CRYPT_CreateMachineGuid(void)
r = RegQueryValueExW(key, machineGuidW, NULL, NULL, NULL, &size); r = RegQueryValueExW(key, machineGuidW, NULL, NULL, NULL, &size);
if (r == ERROR_FILE_NOT_FOUND) if (r == ERROR_FILE_NOT_FOUND)
{ {
static const WCHAR rpcrt4[] = { UUID uuid;
'r','p','c','r','t','4',0 }; WCHAR buf[37];
HMODULE lib = LoadLibraryW(rpcrt4); RPC_STATUS rs;
static const WCHAR uuidFmt[] = {
if (lib) '%','0','8','x','-','%','0','4','x','-',
{ '%','0','4','x','-','%','0','2','x',
RPC_STATUS (RPC_ENTRY *pUuidCreate)(UUID *); '%','0','2','x','-','%','0','2','x',
UUID uuid; '%','0','2','x','%','0','2','x',
WCHAR buf[37]; '%','0','2','x','%','0','2','x',
RPC_STATUS rs; '%','0','2','x',0 };
static const WCHAR uuidFmt[] = {
'%','0','8','x','-','%','0','4','x','-', rs = UuidCreate(&uuid);
'%','0','4','x','-','%','0','2','x', if (rs == S_OK)
'%','0','2','x','-','%','0','2','x', {
'%','0','2','x','%','0','2','x', sprintfW(buf, uuidFmt,
'%','0','2','x','%','0','2','x', uuid.Data1, uuid.Data2, uuid.Data3,
'%','0','2','x',0 }; uuid.Data4[0], uuid.Data4[1],
uuid.Data4[2], uuid.Data4[3],
pUuidCreate = (void *)GetProcAddress(lib, "UuidCreate"); uuid.Data4[4], uuid.Data4[5],
rs = pUuidCreate(&uuid); uuid.Data4[6], uuid.Data4[7] );
if (rs == S_OK) RegSetValueExW(key, machineGuidW, 0, REG_SZ,
{ (const BYTE *)buf,
sprintfW(buf, uuidFmt, (lstrlenW(buf)+1)*sizeof(WCHAR));
uuid.Data1, uuid.Data2, uuid.Data3, }
uuid.Data4[0], uuid.Data4[1],
uuid.Data4[2], uuid.Data4[3],
uuid.Data4[4], uuid.Data4[5],
uuid.Data4[6], uuid.Data4[7] );
RegSetValueExW(key, machineGuidW, 0, REG_SZ,
(const BYTE *)buf,
(lstrlenW(buf)+1)*sizeof(WCHAR));
}
FreeLibrary(lib);
}
} }
RegCloseKey(key); RegCloseKey(key);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment