ChangeLog, gen_uuid_nt.c:
  gen_uuid_nt.c (uuid_generate): W2K strikes again!  An incompatible
  	interface change means we need to detect whether the code is running
  	on an NT4 or NT5 system.
config.h, ChangeLog:
  config.h: Add #define's for strcasecmp and strncasecmp

diff --git a/include/nonunix/ChangeLog b/include/nonunix/ChangeLog
new file mode 100644
index 0000000..6656a31
--- /dev/null
+++ b/include/nonunix/ChangeLog
@@ -0,0 +1,3 @@
+1999-10-25    <tytso@valinux.com>
+
+	* config.h: Add #define's for strcasecmp and strncasecmp
diff --git a/include/nonunix/config.h b/include/nonunix/config.h
index cc8ac19..e269d20 100644
--- a/include/nonunix/config.h
+++ b/include/nonunix/config.h
@@ -8,6 +8,9 @@
 #define HAVE_SETJMP_H  1
 
 #define HAVE_STRCASECMP 1
+#define strcasecmp     _stricmp
+#define strncasecmp     _strnicmp
+
 #define HAVE_CONIO_H   1
 
 #define HAVE_EXT2_INODE_VERSION 1
diff --git a/lib/uuid/ChangeLog b/lib/uuid/ChangeLog
index 3cedaf0..83abc89 100644
--- a/lib/uuid/ChangeLog
+++ b/lib/uuid/ChangeLog
@@ -1,3 +1,9 @@
+1999-10-25    <tytso@valinux.com>
+
+	* gen_uuid_nt.c (uuid_generate): W2K strikes again!  An
+		incompatible interface change means we need to detect
+		whether the code is running on an NT4 or NT5 system.
+
 1999-10-22    <tytso@valinux.com>
 
 	* Release of E2fsprogs 1.16
diff --git a/lib/uuid/gen_uuid_nt.c b/lib/uuid/gen_uuid_nt.c
index 56aeecb..aa44bfd 100644
--- a/lib/uuid/gen_uuid_nt.c
+++ b/lib/uuid/gen_uuid_nt.c
@@ -1,16 +1,35 @@
-
-
-//
-// Use NT api to generate uuid
-//
-
+/*
+ * gen_uuid_nt.c -- Use NT api to generate uuid
+ *
+ * Written by Andrey Shedel (andreys@ns.cr.cyco.com)
+ */
 
 
 #include "uuidP.h"
 
+#pragma warning(push,4)
 
 #pragma comment(lib, "ntdll.lib")
 
+//
+// Here is a nice example why it's not a good idea
+// to use native API in ordinary applications.
+// Number of parameters in function below was changed from 3 to 4
+// for NT5.
+//
+//
+// NTSYSAPI
+// NTSTATUS
+// NTAPI
+// NtAllocateUuids(
+//     OUT PULONG p1,
+//     OUT PULONG p2,
+//     OUT PULONG p3,
+//     OUT PUCHAR Seed // 6 bytes
+//   );
+//
+//
+
 unsigned long
 __stdcall
 NtAllocateUuids(
@@ -19,7 +38,55 @@
    void* p3   // 4 bytes
    );
 
+typedef
+unsigned long
+(__stdcall*
+NtAllocateUuids_2000)(
+   void* p1,  // 8 bytes
+   void* p2,  // 4 bytes
+   void* p3,  // 4 bytes
+   void* seed // 6 bytes
+   );
+
+
+
+//
+// Nice, but instead of including ntddk.h ot winnt.h
+// I should define it here because they MISSED __stdcall in those headers.
+//
+
+__declspec(dllimport)
+struct _TEB*
+__stdcall
+NtCurrentTeb(void);
+
+
+//
+// The only way to get version information from the system is to examine
+// one stored in PEB. But it's pretty dangerouse because this value could
+// be altered in image header.
+//
+
+static
+int
+Nt5(void)
+{
+	//return NtCuttentTeb()->Peb->OSMajorVersion >= 5;
+	return (int)*(int*)((char*)(int)(*(int*)((char*)NtCurrentTeb() + 0x30)) + 0xA4) >= 5;
+}
+
+
+
+
 void uuid_generate(uuid_t out)
 {
-	NtAllocateUuids(out, ((char*)out)+8, ((char*)out)+12 );
+	if(Nt5())
+	{
+		unsigned char seed[6];
+		((NtAllocateUuids_2000)NtAllocateUuids)(out, ((char*)out)+8, ((char*)out)+12, &seed[0] );
+	}
+	else
+	{
+		NtAllocateUuids(out, ((char*)out)+8, ((char*)out)+12);
+	}
 }