Implement CM_Request_Eject_PC[_Ex].
Modified: trunk/reactos/include/idl/pnp.idl
Modified: trunk/reactos/include/wine/cfgmgr32.h
Modified: trunk/reactos/lib/setupapi/cfgmgr.c
Modified: trunk/reactos/services/umpnpmgr/umpnpmgr.c
Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h

Modified: trunk/reactos/include/idl/pnp.idl
--- trunk/reactos/include/idl/pnp.idl	2005-10-02 09:42:12 UTC (rev 18206)
+++ trunk/reactos/include/idl/pnp.idl	2005-10-02 10:07:25 UTC (rev 18207)
@@ -134,4 +134,7 @@
   /* Function 38 */
   CONFIGRET PNP_IsDockStationPresent(handle_t BindingHandle,
                                      [out]PBOOL Present);
+
+  /* Function 39 */
+  CONFIGRET PNP_RequestEjectPC(handle_t BindingHandle);
 }

Modified: trunk/reactos/include/wine/cfgmgr32.h
--- trunk/reactos/include/wine/cfgmgr32.h	2005-10-02 09:42:12 UTC (rev 18206)
+++ trunk/reactos/include/wine/cfgmgr32.h	2005-10-02 10:07:25 UTC (rev 18207)
@@ -223,6 +223,9 @@
 CONFIGRET WINAPI CM_Open_Class_Key_ExW(LPGUID, LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE);
 #define     CM_Open_Class_Key_Ex WINELIB_NAME_AW(CM_Open_Class_Key_Ex)
 
+CONFIGRET WINAPI CM_Request_Eject_PC( VOID );
+CONFIGRET WINAPI CM_Request_Eject_PC_Ex( HMACHINE );
+
 CONFIGRET WINAPI CM_Set_DevNode_Problem( DEVINST, ULONG, ULONG );
 CONFIGRET WINAPI CM_Set_DevNode_Problem_Ex( DEVINST, ULONG, ULONG, HMACHINE );
 CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyA( DEVINST, ULONG, PCVOID, ULONG, ULONG );

Modified: trunk/reactos/lib/setupapi/cfgmgr.c
--- trunk/reactos/lib/setupapi/cfgmgr.c	2005-10-02 09:42:12 UTC (rev 18206)
+++ trunk/reactos/lib/setupapi/cfgmgr.c	2005-10-02 10:07:25 UTC (rev 18207)
@@ -1539,7 +1539,7 @@
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
 
-    FIXME("%p %lx\n", pbPresent, hMachine);
+    TRACE("%p %lx\n", pbPresent, hMachine);
 
     if (pbPresent == NULL)
         return CR_INVALID_POINTER;
@@ -1836,6 +1836,42 @@
 
 
 /***********************************************************************
+ * CM_Request_Eject_PC [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Request_Eject_PC(VOID)
+{
+    TRACE("\n");
+    return CM_Request_Eject_PC_Ex(NULL);
+}
+
+
+/***********************************************************************
+ * CM_Request_Eject_PC_Ex [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Request_Eject_PC_Ex(
+    HMACHINE hMachine)
+{
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+
+    TRACE("%lx\n", hMachine);
+
+    if (hMachine != NULL)
+    {
+        BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+        if (BindingHandle == NULL)
+            return CR_FAILURE;
+    }
+    else
+    {
+        if (!PnpGetLocalHandles(&BindingHandle, NULL))
+            return CR_FAILURE;
+    }
+
+    return PNP_RequestEjectPC(BindingHandle);
+}
+
+
+/***********************************************************************
  * CM_Set_DevNode_Problem [SETUPAPI.@]
  */
 CONFIGRET WINAPI CM_Set_DevNode_Problem(

Modified: trunk/reactos/services/umpnpmgr/umpnpmgr.c
--- trunk/reactos/services/umpnpmgr/umpnpmgr.c	2005-10-02 09:42:12 UTC (rev 18206)
+++ trunk/reactos/services/umpnpmgr/umpnpmgr.c	2005-10-02 10:07:25 UTC (rev 18207)
@@ -794,6 +794,7 @@
 }
 
 
+/* Function 38 */
 CONFIGRET
 PNP_IsDockStationPresent(handle_t BindingHandle,
                          unsigned long *Present)
@@ -844,6 +845,22 @@
 }
 
 
+/* Function 39 */
+CONFIGRET
+PNP_RequestEjectPC(handle_t BindingHandle)
+{
+    CONFIGRET ret = CR_SUCCESS;
+
+    DPRINT1("PNP_RequestEjectPC() called\n");
+
+    ret = CR_FAILURE; /* FIXME */
+
+    DPRINT1("PNP_RequestEjectPC() done (returns %lx)\n", ret);
+
+    return ret;
+}
+
+
 static DWORD WINAPI
 PnpEventThread(LPVOID lpParameter)
 {

Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h
--- trunk/reactos/w32api/include/ddk/cfgmgr32.h	2005-10-02 09:42:12 UTC (rev 18206)
+++ trunk/reactos/w32api/include/ddk/cfgmgr32.h	2005-10-02 10:07:25 UTC (rev 18207)
@@ -1773,8 +1773,18 @@
 #define CM_Request_Device_Eject_Ex CM_Request_Device_Eject_ExA
 #endif /* UNICODE */
 
-/* FIXME: Obsolete CM_Request_Eject_PC */
-/* FIXME: Obsolete CM_Request_Eject_PC_Ex */
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Eject_PC(
+  VOID);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Request_Eject_PC_Ex(
+  IN HMACHINE  hMachine);
+
 /* FIXME: Obsolete CM_Run_Detection */
 /* FIXME: Obsolete CM_Run_Detection_Ex */
 /* FIXME: Obsolete CM_Set_Class_Registry_Property */