Wine keyboard and mouse have now their own UIDs.

diff --git a/windows/dinput.c b/windows/dinput.c
index 2ee1fcf..fbc2fc0 100644
--- a/windows/dinput.c
+++ b/windows/dinput.c
@@ -46,6 +46,23 @@
 static IDirectInputDeviceA_VTable SysKeyboardAvt;
 static IDirectInputDeviceA_VTable SysMouseAvt;
 
+/* UIDs for Wine "drivers".
+   When enumerating each device supporting DInput, they have two UIDs :
+    - the 'windows' UID
+    - a vendor UID */
+static GUID DInput_Wine_Mouse_GUID = { /* 9e573ed8-7734-11d2-8d4a-23903fb6bdf7 */
+  0x9e573ed8,
+  0x7734,
+  0x11d2,
+  {0x8d, 0x4a, 0x23, 0x90, 0x3f, 0xb6, 0xbd, 0xf7}
+};
+static GUID DInput_Wine_Keyboard_GUID = { /* 0ab8648a-7735-11d2-8c73-71df54a96441 */
+  0x0ab8648a,
+  0x7735,
+  0x11d2,
+  {0x8c, 0x73, 0x71, 0xdf, 0x54, 0xa9, 0x64, 0x41}
+};
+
 /******************************************************************************
  *	DirectInputCreate32A
  */
@@ -74,8 +91,8 @@
   
   if ((dwDevType == 0) || (dwDevType == DIDEVTYPE_KEYBOARD)) {
   /* Return keyboard */
-  devInstance.guidInstance = GUID_SysKeyboard;
-  devInstance.guidProduct = GUID_SysKeyboard;
+    devInstance.guidInstance = GUID_SysKeyboard;         /* DInput's GUID */
+    devInstance.guidProduct = DInput_Wine_Keyboard_GUID; /* Vendor's GUID */
     devInstance.dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);
   strcpy(devInstance.tszInstanceName, "Keyboard");
   strcpy(devInstance.tszProductName, "Wine Keyboard");
@@ -89,8 +106,8 @@
   
   if ((dwDevType == 0) || (dwDevType == DIDEVTYPE_KEYBOARD)) {
   /* Return mouse */
-  devInstance.guidInstance = GUID_SysMouse;
-  devInstance.guidProduct = GUID_SysMouse;
+    devInstance.guidInstance = GUID_SysMouse;         /* DInput's GUID */
+    devInstance.guidProduct = DInput_Wine_Mouse_GUID; /* Vendor's GUID */
     devInstance.dwDevType = DIDEVTYPE_MOUSE | (DIDEVTYPEMOUSE_UNKNOWN << 8);
   strcpy(devInstance.tszInstanceName, "Mouse");
   strcpy(devInstance.tszProductName, "Wine Mouse");
@@ -124,7 +141,8 @@
 	
 	WINE_StringFromCLSID(rguid,xbuf);
 	FIXME(dinput,"(this=%p,%s,%p,%p): stub\n",this,xbuf,pdev,punk);
-	if (!memcmp(&GUID_SysKeyboard,rguid,sizeof(GUID_SysKeyboard))) {
+	if ((!memcmp(&GUID_SysKeyboard,rguid,sizeof(GUID_SysKeyboard))) ||          /* Generic Keyboard */
+	    (!memcmp(&DInput_Wine_Keyboard_GUID,rguid,sizeof(GUID_SysKeyboard)))) { /* Wine Keyboard */
 		*pdev = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysKeyboard32A));
 		(*pdev)->ref = 1;
 		(*pdev)->lpvtbl = &SysKeyboardAvt;
@@ -132,7 +150,8 @@
 		memset(((LPSYSKEYBOARD32A)(*pdev))->keystate,0,256);
 		return 0;
 	}
-	if (!memcmp(&GUID_SysMouse,rguid,sizeof(GUID_SysMouse))) {
+	if ((!memcmp(&GUID_SysMouse,rguid,sizeof(GUID_SysMouse))) ||             /* Generic Mouse */
+	    (!memcmp(&DInput_Wine_Mouse_GUID,rguid,sizeof(GUID_SysKeyboard)))) { /* Wine Mouse */
 		*pdev = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SysMouse32A));
 		(*pdev)->ref = 1;
 		(*pdev)->lpvtbl = &SysMouseAvt;