[KSPROXY]
[reactos.git] / reactos / dll / cpl / sysdm / sysdm.c
index 43ec94e..b03a0ee 100644 (file)
 
 LONG CALLBACK SystemApplet(VOID);
 HINSTANCE hApplet = 0;
+HWND hCPLWindow;
 
 /* Applets */
 APPLET Applets[NUM_APPLETS] =
 {
-  {IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet}
+    {IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet}
 };
 
 #define MAX_SYSTEM_PAGES    32
@@ -99,95 +100,106 @@ Fail:
 LONG CALLBACK
 SystemApplet(VOID)
 {
-  HPROPSHEETPAGE hpsp[MAX_SYSTEM_PAGES];
-  PROPSHEETHEADER psh;
-  HMODULE hNetIdDll;
-  HPSXA hpsxa;
-  LONG Ret;
-  static INITCOMMONCONTROLSEX icc = {sizeof(INITCOMMONCONTROLSEX), ICC_LINK_CLASS};
-
-  if (!InitCommonControlsEx(&icc))
-      return 0;
-
-  ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
-  psh.dwSize = sizeof(PROPSHEETHEADER);
-  psh.dwFlags =  PSH_PROPTITLE;
-  psh.hwndParent = NULL;
-  psh.hInstance = hApplet;
-  psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
-  psh.pszCaption = MAKEINTRESOURCE(IDS_CPLSYSTEMNAME);
-  psh.nPages = 0;
-  psh.nStartPage = 0;
-  psh.phpage = hpsp;
-  psh.pfnCallback = NULL;
-
-  InitPropSheetPage(&psh, IDD_PROPPAGEGENERAL, (DLGPROC) GeneralPageProc);
-  hNetIdDll = AddNetIdPage(&psh);
-  InitPropSheetPage(&psh, IDD_PROPPAGEHARDWARE, (DLGPROC) HardwarePageProc);
-  InitPropSheetPage(&psh, IDD_PROPPAGEADVANCED, (DLGPROC) AdvancedPageProc);
-
-  Ret = (LONG)(PropertySheet(&psh) != -1);
-
-  if (hNetIdDll != NULL)
-      FreeLibrary(hNetIdDll);
-
-  return Ret;
+    HPROPSHEETPAGE hpsp[MAX_SYSTEM_PAGES];
+    PROPSHEETHEADER psh;
+    HMODULE hNetIdDll;
+    HPSXA hpsxa = NULL;
+    LONG Ret;
+    static INITCOMMONCONTROLSEX icc = {sizeof(INITCOMMONCONTROLSEX), ICC_LINK_CLASS};
+
+    if (!InitCommonControlsEx(&icc))
+        return 0;
+
+    ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
+    psh.dwSize = sizeof(PROPSHEETHEADER);
+    psh.dwFlags =  PSH_PROPTITLE;
+    psh.hwndParent = hCPLWindow;
+    psh.hInstance = hApplet;
+    psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
+    psh.pszCaption = MAKEINTRESOURCE(IDS_CPLSYSTEMNAME);
+    psh.nPages = 0;
+    psh.nStartPage = 0;
+    psh.phpage = hpsp;
+    psh.pfnCallback = NULL;
+
+    InitPropSheetPage(&psh, IDD_PROPPAGEGENERAL, (DLGPROC) GeneralPageProc);
+    hNetIdDll = AddNetIdPage(&psh);
+    InitPropSheetPage(&psh, IDD_PROPPAGEHARDWARE, (DLGPROC) HardwarePageProc);
+    InitPropSheetPage(&psh, IDD_PROPPAGEADVANCED, (DLGPROC) AdvancedPageProc);
+
+    /* Load additional pages provided by shell extensions */
+    hpsxa = SHCreatePropSheetExtArray(HKEY_LOCAL_MACHINE, REGSTR_PATH_CONTROLSFOLDER TEXT("\\System"), MAX_SYSTEM_PAGES - psh.nPages);
+    if (hpsxa != NULL)
+    {
+        SHAddFromPropSheetExtArray(hpsxa, PropSheetAddPage, (LPARAM)&psh);
+    }
+
+    Ret = (LONG)(PropertySheet(&psh) != -1);
+
+    if (hpsxa != NULL)
+    {
+        SHDestroyPropSheetExtArray(hpsxa);
+    }
+
+    if (hNetIdDll != NULL)
+        FreeLibrary(hNetIdDll);
+
+    return Ret;
 }
 
 /* Control Panel Callback */
 LONG CALLBACK
-CPlApplet(
-       HWND hwndCPl,
-       UINT uMsg,
-       LPARAM lParam1,
-       LPARAM lParam2)
+CPlApplet(HWND hwndCPl,
+          UINT uMsg,
+          LPARAM lParam1,
+          LPARAM lParam2)
 {
-  int i = (int)lParam1;
-  UNREFERENCED_PARAMETER(hwndCPl);
+    INT i = (INT)lParam1;
 
-  switch(uMsg)
-  {
-    case CPL_INIT:
-    {
-      return TRUE;
-    }
-    case CPL_GETCOUNT:
-    {
-      return NUM_APPLETS;
-    }
-    case CPL_INQUIRE:
-    {
-      CPLINFO *CPlInfo = (CPLINFO*)lParam2;
-      CPlInfo->lData = 0;
-      CPlInfo->idIcon = Applets[i].idIcon;
-      CPlInfo->idName = Applets[i].idName;
-      CPlInfo->idInfo = Applets[i].idDescription;
-      break;
-    }
-    case CPL_DBLCLK:
+    UNREFERENCED_PARAMETER(hwndCPl);
+
+    switch (uMsg)
     {
-      Applets[i].AppletProc();
-      break;
+        case CPL_INIT:
+            return TRUE;
+
+        case CPL_GETCOUNT:
+            return NUM_APPLETS;
+
+        case CPL_INQUIRE:
+            {
+                 CPLINFO *CPlInfo = (CPLINFO*)lParam2;
+                 CPlInfo->lData = 0;
+                 CPlInfo->idIcon = Applets[i].idIcon;
+                 CPlInfo->idName = Applets[i].idName;
+                 CPlInfo->idInfo = Applets[i].idDescription;
+            }
+            break;
+
+        case CPL_DBLCLK:
+            hCPLWindow = hwndCPl;
+            Applets[i].AppletProc();
+            break;
     }
-  }
-  return FALSE;
+
+    return FALSE;
 }
 
 
-BOOL STDCALL
-DllMain(
-       HINSTANCE hinstDLL,
-       DWORD     dwReason,
-       LPVOID    lpvReserved)
+BOOL WINAPI
+DllMain(HINSTANCE hinstDLL,
+        DWORD dwReason,
+        LPVOID lpvReserved)
 {
-  UNREFERENCED_PARAMETER(lpvReserved);
-  switch(dwReason)
-  {
-    case DLL_PROCESS_ATTACH:
-    case DLL_THREAD_ATTACH:
-      hApplet = hinstDLL;
-      break;
-  }
-  return TRUE;
-}
+    UNREFERENCED_PARAMETER(lpvReserved);
+
+    switch (dwReason)
+    {
+        case DLL_PROCESS_ATTACH:
+        case DLL_THREAD_ATTACH:
+            hApplet = hinstDLL;
+            break;
+    }
 
+    return TRUE;
+}