[ros-diffs] [ekohl] 22745: Enable CM_Connect_MachineW to connect to the local machine.

ekohl at svn.reactos.org ekohl at svn.reactos.org
Sat Jul 1 23:02:00 CEST 2006


Author: ekohl
Date: Sun Jul  2 01:01:59 2006
New Revision: 22745

URL: http://svn.reactos.org/svn/reactos?rev=22745&view=rev
Log:
Enable CM_Connect_MachineW to connect to the local machine.

Modified:
    trunk/reactos/dll/win32/setupapi/cfgmgr.c

Modified: trunk/reactos/dll/win32/setupapi/cfgmgr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/setupapi/cfgmgr.c?rev=22745&r1=22744&r2=22745&view=diff
==============================================================================
--- trunk/reactos/dll/win32/setupapi/cfgmgr.c (original)
+++ trunk/reactos/dll/win32/setupapi/cfgmgr.c Sun Jul  2 01:01:59 2006
@@ -42,6 +42,7 @@
     WCHAR szMachineName[MAX_PATH];
     RPC_BINDING_HANDLE BindingHandle;
     HSTRING_TABLE StringTable;
+    BOOL bLocal;
 } MACHINE_INFO, *PMACHINE_INFO;
 
 
@@ -251,33 +252,48 @@
 
     TRACE("%s %p\n", debugstr_w(UNCServerName), phMachine);
 
-    if (!UNCServerName)
-    {
-        FIXME("Connection to local machine not implemented\n");
-        *phMachine = NULL;
-        return CR_SUCCESS;
-    }
+    if (phMachine == NULL)
+        return CR_INVALID_POINTER;
+
+    *phMachine = NULL;
 
     pMachine = HeapAlloc(GetProcessHeap(), 0, sizeof(MACHINE_INFO));
     if (pMachine == NULL)
         return CR_OUT_OF_MEMORY;
 
-    lstrcpyW(pMachine->szMachineName, UNCServerName);
-
-    pMachine->StringTable = StringTableInitialize();
-    if (pMachine->StringTable == NULL)
-    {
-        HeapFree(GetProcessHeap(), 0, pMachine);
-        return CR_FAILURE;
-    }
-
-    StringTableAddString(pMachine->StringTable, L"PLT", 1);
-
-    if (!PnpBindRpc(UNCServerName, &pMachine->BindingHandle))
-    {
-        StringTableDestroy(pMachine->StringTable);
-        HeapFree(GetProcessHeap(), 0, pMachine);
-        return CR_INVALID_MACHINENAME;
+    if (UNCServerName == NULL || *UNCServerName == 0)
+    {
+        pMachine->bLocal = TRUE;
+
+        /* FIXME: store the computers name in pMachine->szMachineName */
+
+        if (!PnpGetLocalHandles(&pMachine->BindingHandle,
+                                &pMachine->StringTable))
+        {
+            HeapFree(GetProcessHeap(), 0, pMachine);
+            return CR_FAILURE;
+        }
+    }
+    else
+    {
+        pMachine->bLocal = FALSE;
+        lstrcpyW(pMachine->szMachineName, UNCServerName);
+
+        pMachine->StringTable = StringTableInitialize();
+        if (pMachine->StringTable == NULL)
+        {
+            HeapFree(GetProcessHeap(), 0, pMachine);
+            return CR_FAILURE;
+        }
+
+        StringTableAddString(pMachine->StringTable, L"PLT", 1);
+
+        if (!PnpBindRpc(UNCServerName, &pMachine->BindingHandle))
+        {
+            StringTableDestroy(pMachine->StringTable);
+            HeapFree(GetProcessHeap(), 0, pMachine);
+            return CR_INVALID_MACHINENAME;
+        }
     }
 
     phMachine = (PHMACHINE)pMachine;
@@ -551,11 +567,14 @@
     if (pMachine == NULL)
         return CR_SUCCESS;
 
-    if (pMachine->StringTable != NULL)
-        StringTableDestroy(pMachine->StringTable);
-
-    if (!PnpUnbindRpc(pMachine->BindingHandle))
-        return CR_ACCESS_DENIED;
+    if (pMachine->bLocal == FALSE)
+    {
+        if (pMachine->StringTable != NULL)
+            StringTableDestroy(pMachine->StringTable);
+
+        if (!PnpUnbindRpc(pMachine->BindingHandle))
+            return CR_ACCESS_DENIED;
+    }
 
     HeapFree(GetProcessHeap(), 0, pMachine);
 




More information about the Ros-diffs mailing list