diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c
index 679821ec4a7dc8f8d646b5162b90ad63f3d2ad04..ac7ecb59c73dc62a8f7798d625961d38fb0b0a4a 100644
--- a/dlls/advapi32/service.c
+++ b/dlls/advapi32/service.c
@@ -262,8 +262,8 @@ OpenSCManagerW( LPCWSTR lpMachineName, LPCWSTR lpDatabaseName,
 BOOL WINAPI
 AllocateLocallyUniqueId( PLUID lpluid )
 {
-	lpluid->s.LowPart = time(NULL);
-	lpluid->s.HighPart = 0;
+	lpluid->LowPart = time(NULL);
+	lpluid->HighPart = 0;
 	return TRUE;
 }
 
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index be0dcdbc789a86ab2f2a7cb1380595f51462eeab..46f1a107d19448e01b74f43381842dd36b96cb1f 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -692,12 +692,15 @@ NTSTATUS WINAPI NtPowerInformation(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5)
  */
 NTSTATUS WINAPI NtAllocateLocallyUniqueId(PLUID Luid)
 {
-	static LUID luid;
+    static LUID luid;
 
-	FIXME("%p (0x%08lx%08lx)\n", Luid, luid.DUMMYSTRUCTNAME.HighPart, luid.DUMMYSTRUCTNAME.LowPart);
+    FIXME("%p (0x%08lx%08lx)\n", Luid, luid.HighPart, luid.LowPart);
 
-	luid.QuadPart++;
-	
-	Luid->QuadPart = luid.QuadPart;
-	return STATUS_SUCCESS;
+    luid.LowPart++;
+    if (luid.LowPart==0)
+        luid.HighPart++;
+    Luid->HighPart = luid.HighPart;
+    Luid->LowPart = luid.LowPart;
+
+    return STATUS_SUCCESS;
 }
diff --git a/include/winnt.h b/include/winnt.h
index 40a1ff1edf3c068b4a6940790b8be536255564f1..4c12835202a79363ef4197db711830c0ea2e49ee 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -3591,12 +3591,15 @@ typedef union _ULARGE_INTEGER {
  * Locally Unique Identifier
  */
 
-typedef LARGE_INTEGER LUID,*PLUID;
+typedef struct _LUID {
+    DWORD LowPart;
+    LONG HighPart;
+} LUID, *PLUID;
 
 typedef struct _LUID_AND_ATTRIBUTES {
-  LUID   Luid; 
-  DWORD  Attributes; 
-} LUID_AND_ATTRIBUTES; 
+  LUID   Luid;
+  DWORD  Attributes;
+} LUID_AND_ATTRIBUTES;
 
 /*
  * PRIVILEGE_SET