ntoskrnl.exe: implement IoIsWdmVersionAvailable

Damjan Jovanovic damjan.jov at gmail.com
Wed Mar 17 15:46:57 CDT 2010


Changelog:
* ntoskrnl.exe: implement IoIsWdmVersionAvailable

Damjan Jovanovic
-------------- next part --------------
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 0131d24..3513b01 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -2,6 +2,7 @@
  * ntoskrnl.exe implementation
  *
  * Copyright (C) 2007 Alexandre Julliard
+ * Copyright (C) 2010 Damjan Jovanovic
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -678,6 +679,72 @@ PCONFIGURATION_INFORMATION WINAPI IoGetConfigurationInformation(void)
 
 
 /***********************************************************************
+ *           IoIsWdmVersionAvailable     (NTOSKRNL.EXE.@)
+ */
+NTSTATUS WINAPI IoIsWdmVersionAvailable(UCHAR MajorVersion, UCHAR MinorVersion)
+{
+    DWORD version;
+    DWORD major;
+    DWORD minor;
+
+    TRACE( "%d, 0x%X\n", MajorVersion, MinorVersion );
+
+    version = GetVersion();
+    major = LOBYTE(version);
+    minor = HIBYTE(LOWORD(version));
+
+    if (MajorVersion == 6 && MinorVersion == 0)
+    {
+        /* Windows Vista, Windows Server 2008, Windows 7 */
+    }
+    else if (MajorVersion == 1)
+    {
+        if (MinorVersion == 0x30)
+        {
+            /* Windows server 2003 */
+            MajorVersion = 6;
+            MinorVersion = 0;
+        }
+        else if (MinorVersion == 0x20)
+        {
+            /* Windows XP */
+            MajorVersion = 5;
+            MinorVersion = 1;
+        }
+        else if (MinorVersion == 0x10)
+        {
+            /* Windows 2000 */
+            MajorVersion = 5;
+            MinorVersion = 0;
+        }
+        else if (MinorVersion == 0x05)
+        {
+            /* Windows ME */
+            MajorVersion = 4;
+            MinorVersion = 0x5a;
+        }
+        else if (MinorVersion == 0x00)
+        {
+            /* Windows 98 */
+            MajorVersion = 4;
+            MinorVersion = 0x0a;
+        }
+        else
+        {
+            FIXME( "unknown major %d minor 0x%X\n", MajorVersion, MinorVersion );
+            return FALSE;
+        }
+    }
+    else
+    {
+        FIXME( "unknown major %d minor 0x%X\n", MajorVersion, MinorVersion );
+        return FALSE;
+    }
+    return major > MajorVersion || (major == MajorVersion && minor >= MinorVersion);
+}
+
+
+/***********************************************************************
  *           IoQueryDeviceDescription    (NTOSKRNL.EXE.@)
  */
 NTSTATUS WINAPI IoQueryDeviceDescription(PINTERFACE_TYPE itype, PULONG bus, PCONFIGURATION_TYPE ctype,
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 5e11bf9..0cbbbc6 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -406,7 +406,7 @@
 @ stub IoIsOperationSynchronous
 @ stub IoIsSystemThread
 @ stub IoIsValidNameGraftingBuffer
-@ stub IoIsWdmVersionAvailable
+@ stdcall IoIsWdmVersionAvailable(long long)
 @ stub IoMakeAssociatedIrp
 @ stub IoOpenDeviceInterfaceRegistryKey
 @ stub IoOpenDeviceRegistryKey


More information about the wine-patches mailing list