[DEVMGR]
authorGed Murphy <gedmurphy@reactos.org>
Tue, 7 Jul 2015 11:43:15 +0000 (11:43 +0000)
committerGed Murphy <gedmurphy@reactos.org>
Tue, 7 Jul 2015 11:43:15 +0000 (11:43 +0000)
I know this *_new thing is a bit overused, but there are a lot of changes coming to devmgr and rather than take it out of the build for a few days, it's easier to do it this way

svn path=/trunk/; revision=68369

53 files changed:
reactos/dll/win32/devmgr_new/CMakeLists.txt [new file with mode: 0644]
reactos/dll/win32/devmgr_new/advprop.c [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/ClassNode.cpp [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/ClassNode.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/DeviceNode.cpp [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/DeviceNode.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/DeviceView.cpp [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/DeviceView.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/MainWindow.cpp [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/MainWindow.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/Node.cpp [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/Node.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/Resource.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/RootNode.cpp [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/RootNode.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/devmgmt.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/lang/en-US.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/lang/tr-TR.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/res/computer.ico [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/res/root.bmp [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/res/toolbar.bmp [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/rsrc.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgmt/stdafx.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgr.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devmgr.spec [new file with mode: 0644]
reactos/dll/win32/devmgr_new/devprblm.c [new file with mode: 0644]
reactos/dll/win32/devmgr_new/hwpage.c [new file with mode: 0644]
reactos/dll/win32/devmgr_new/hwresource.c [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/bg-BG.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/cs-CZ.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/de-DE.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/el-GR.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/en-US.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/es-ES.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/fr-FR.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/he-IL.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/hu-HU.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/id-ID.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/it-IT.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/no-NO.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/pl-PL.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/pt-BR.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/ro-RO.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/ru-RU.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/sk-SK.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/sq-AL.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/tr-TR.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/lang/uk-UA.rc [new file with mode: 0644]
reactos/dll/win32/devmgr_new/misc.c [new file with mode: 0644]
reactos/dll/win32/devmgr_new/precomp.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/resource.h [new file with mode: 0644]
reactos/dll/win32/devmgr_new/resources/devmgr.ico [new file with mode: 0644]
reactos/dll/win32/devmgr_new/stubs.c [new file with mode: 0644]

diff --git a/reactos/dll/win32/devmgr_new/CMakeLists.txt b/reactos/dll/win32/devmgr_new/CMakeLists.txt
new file mode 100644 (file)
index 0000000..179e0ce
--- /dev/null
@@ -0,0 +1,23 @@
+
+spec2def(devmgr.dll devmgr.spec ADD_IMPORTLIB)
+
+list(APPEND SOURCE
+    advprop.c
+    devprblm.c
+    hwpage.c
+    hwresource.c
+    misc.c
+    stubs.c
+    precomp.h
+    ${CMAKE_CURRENT_BINARY_DIR}/devmgr_stubs.c)
+
+add_library(devmgr SHARED
+    ${SOURCE}
+    devmgr.rc
+    ${CMAKE_CURRENT_BINARY_DIR}/devmgr.def)
+
+set_module_type(devmgr win32dll UNICODE)
+target_link_libraries(devmgr uuid wine)
+add_importlibs(devmgr setupapi advapi32 newdev user32 version msvcrt kernel32 ntdll)
+add_pch(devmgr precomp.h SOURCE)
+add_cd_file(TARGET devmgr DESTINATION reactos/system32 FOR all)
diff --git a/reactos/dll/win32/devmgr_new/advprop.c b/reactos/dll/win32/devmgr_new/advprop.c
new file mode 100644 (file)
index 0000000..2b83fb5
--- /dev/null
@@ -0,0 +1,3308 @@
+/*
+ * ReactOS Device Manager Applet
+ * Copyright (C) 2004 - 2005 ReactOS Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+/*
+ *
+ * PROJECT:         ReactOS devmgr.dll
+ * FILE:            lib/devmgr/advprop.c
+ * PURPOSE:         ReactOS Device Manager
+ * PROGRAMMER:      Thomas Weidenmueller <w3seek@reactos.com>
+ *                  Ged Murphy <gedmurphy@reactos.org>
+ * UPDATE HISTORY:
+ *      04-04-2004  Created
+ */
+
+#include "precomp.h"
+
+#include <winver.h>
+
+
+static UINT WINAPI
+EnumDeviceDriverFilesCallback(IN PVOID Context,
+                              IN UINT Notification,
+                              IN UINT_PTR Param1,
+                              IN UINT_PTR Param2)
+{
+    LVITEM li;
+    PENUMDRIVERFILES_CONTEXT EnumDriverFilesContext = (PENUMDRIVERFILES_CONTEXT)Context;
+
+    li.mask = LVIF_TEXT | LVIF_STATE;
+    li.iItem = EnumDriverFilesContext->nCount++;
+    li.iSubItem = 0;
+    li.state = (li.iItem == 0 ? LVIS_SELECTED : 0);
+    li.stateMask = LVIS_SELECTED;
+    li.pszText = (LPWSTR)Param1;
+    (void)ListView_InsertItem(EnumDriverFilesContext->hDriversListView,
+                              &li);
+    return NO_ERROR;
+}
+
+
+static VOID
+UpdateDriverDetailsDlg(IN HWND hwndDlg,
+                       IN HWND hDriversListView,
+                       IN PDEVADVPROP_INFO dap)
+{
+    HDEVINFO DeviceInfoSet;
+    PSP_DEVINFO_DATA DeviceInfoData;
+    SP_DRVINFO_DATA DriverInfoData;
+    ENUMDRIVERFILES_CONTEXT EnumDriverFilesContext;
+
+    if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+    {
+        DeviceInfoSet = dap->CurrentDeviceInfoSet;
+        DeviceInfoData = &dap->CurrentDeviceInfoData;
+    }
+    else
+    {
+        DeviceInfoSet = dap->DeviceInfoSet;
+        DeviceInfoData = &dap->DeviceInfoData;
+    }
+
+    /* set the device image */
+    SendDlgItemMessage(hwndDlg,
+                       IDC_DEVICON,
+                       STM_SETICON,
+                       (WPARAM)dap->hDevIcon,
+                       0);
+
+    /* set the device name edit control text */
+    SetDlgItemText(hwndDlg,
+                   IDC_DEVNAME,
+                   dap->szDevName);
+
+    /* fill the driver files list view */
+    EnumDriverFilesContext.hDriversListView = hDriversListView;
+    EnumDriverFilesContext.nCount = 0;
+
+    (void)ListView_DeleteAllItems(EnumDriverFilesContext.hDriversListView);
+    DriverInfoData.cbSize = sizeof(SP_DRVINFO_DATA);
+    if (FindCurrentDriver(DeviceInfoSet,
+                          DeviceInfoData,
+                          &DriverInfoData) &&
+        SetupDiSetSelectedDriver(DeviceInfoSet,
+                                 DeviceInfoData,
+                                 &DriverInfoData))
+    {
+        HSPFILEQ queueHandle;
+
+        queueHandle = SetupOpenFileQueue();
+        if (queueHandle != (HSPFILEQ)INVALID_HANDLE_VALUE)
+        {
+            SP_DEVINSTALL_PARAMS DeviceInstallParams = {0};
+            DeviceInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
+            if (SetupDiGetDeviceInstallParams(DeviceInfoSet,
+                                              DeviceInfoData,
+                                              &DeviceInstallParams))
+            {
+                DeviceInstallParams.FileQueue = queueHandle;
+                DeviceInstallParams.Flags |= DI_NOVCP;
+
+                if (SetupDiSetDeviceInstallParams(DeviceInfoSet,
+                                                  DeviceInfoData,
+                                                  &DeviceInstallParams) &&
+                    SetupDiCallClassInstaller(DIF_INSTALLDEVICEFILES,
+                                              DeviceInfoSet,
+                                              DeviceInfoData))
+                {
+                    DWORD scanResult;
+                    RECT rcClient;
+                    LVCOLUMN lvc;
+
+                    /* enumerate the driver files */
+                    SetupScanFileQueue(queueHandle,
+                                       SPQ_SCAN_USE_CALLBACK,
+                                       NULL,
+                                       EnumDeviceDriverFilesCallback,
+                                       &EnumDriverFilesContext,
+                                       &scanResult);
+
+                    /* update the list view column width */
+                    GetClientRect(hDriversListView,
+                                  &rcClient);
+                    lvc.mask = LVCF_WIDTH;
+                    lvc.cx = rcClient.right;
+                    (void)ListView_SetColumn(hDriversListView,
+                                             0,
+                                             &lvc);
+
+                    /* highlight the first item from list */
+                    if (ListView_GetSelectedCount(hDriversListView) != 0)
+                    {
+                        ListView_SetItemState(hDriversListView,
+                                              0,
+                                              LVIS_FOCUSED | LVIS_SELECTED,
+                                              LVIS_FOCUSED | LVIS_SELECTED);
+                    }
+                }
+            }
+
+            SetupCloseFileQueue(queueHandle);
+        }
+    }
+}
+
+
+static VOID
+UpdateDriverVersionInfoDetails(IN HWND hwndDlg,
+                               IN LPCWSTR lpszDriverPath)
+{
+    DWORD dwHandle;
+    DWORD dwVerInfoSize;
+    LPVOID lpData = NULL;
+    LPVOID lpInfo;
+    UINT uInfoLen;
+    DWORD dwLangId;
+    WCHAR szLangInfo[255];
+    WCHAR szLangPath[MAX_PATH];
+    LPWSTR lpCompanyName = NULL;
+    LPWSTR lpFileVersion = NULL;
+    LPWSTR lpLegalCopyright = NULL;
+    LPWSTR lpDigitalSigner = NULL;
+    UINT uBufLen;
+    WCHAR szNotAvailable[255];
+
+    /* extract version info from selected file */
+    dwVerInfoSize = GetFileVersionInfoSize(lpszDriverPath,
+                                           &dwHandle);
+    if (!dwVerInfoSize)
+        goto done;
+
+    lpData = HeapAlloc(GetProcessHeap(),
+                       HEAP_ZERO_MEMORY,
+                       dwVerInfoSize);
+    if (!lpData)
+        goto done;
+
+    if (!GetFileVersionInfo(lpszDriverPath,
+                            dwHandle,
+                            dwVerInfoSize,
+                            lpData))
+        goto done;
+
+    if (!VerQueryValue(lpData,
+                       L"\\VarFileInfo\\Translation",
+                       &lpInfo,
+                       &uInfoLen))
+        goto done;
+
+    dwLangId = *(LPDWORD)lpInfo;
+    swprintf(szLangInfo, L"\\StringFileInfo\\%04x%04x\\",
+             LOWORD(dwLangId), HIWORD(dwLangId));
+
+    /* read CompanyName */
+    wcscpy(szLangPath, szLangInfo);
+    wcscat(szLangPath, L"CompanyName");
+
+    VerQueryValue(lpData,
+                  szLangPath,
+                  (void **)&lpCompanyName,
+                  (PUINT)&uBufLen);
+
+    /* read FileVersion */
+    wcscpy(szLangPath, szLangInfo);
+    wcscat(szLangPath, L"FileVersion");
+
+    VerQueryValue(lpData,
+                  szLangPath,
+                  (void **)&lpFileVersion,
+                  (PUINT)&uBufLen);
+
+    /* read LegalTrademarks */
+    wcscpy(szLangPath, szLangInfo);
+    wcscat(szLangPath, L"LegalCopyright");
+
+    VerQueryValue(lpData,
+                  szLangPath,
+                  (void **)&lpLegalCopyright,
+                  (PUINT)&uBufLen);
+
+    /* TODO: read digital signer info */
+
+done:
+    if (!LoadString(hDllInstance,
+                    IDS_NOTAVAILABLE,
+                    szNotAvailable,
+                    sizeof(szNotAvailable) / sizeof(WCHAR)))
+    {
+        wcscpy(szNotAvailable, L"n/a");
+    }
+
+    /* update labels */
+    if (!lpCompanyName)
+        lpCompanyName = szNotAvailable;
+    SetDlgItemText(hwndDlg,
+                   IDC_FILEPROVIDER,
+                   lpCompanyName);
+
+    if (!lpFileVersion)
+        lpFileVersion = szNotAvailable;
+    SetDlgItemText(hwndDlg,
+                   IDC_FILEVERSION,
+                   lpFileVersion);
+
+    if (!lpLegalCopyright)
+        lpLegalCopyright = szNotAvailable;
+    SetDlgItemText(hwndDlg,
+                   IDC_FILECOPYRIGHT,
+                   lpLegalCopyright);
+
+    if (!lpDigitalSigner)
+        lpDigitalSigner = szNotAvailable;
+    SetDlgItemText(hwndDlg,
+                   IDC_DIGITALSIGNER,
+                   lpDigitalSigner);
+
+    /* release version info */
+    if (lpData)
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpData);
+}
+
+
+static INT_PTR
+CALLBACK
+DriverDetailsDlgProc(IN HWND hwndDlg,
+                     IN UINT uMsg,
+                     IN WPARAM wParam,
+                     IN LPARAM lParam)
+{
+    PDEVADVPROP_INFO dap;
+    INT_PTR Ret = FALSE;
+
+    dap = (PDEVADVPROP_INFO)GetWindowLongPtr(hwndDlg,
+                                             DWL_USER);
+
+    if (dap != NULL || uMsg == WM_INITDIALOG)
+    {
+        switch (uMsg)
+        {
+            case WM_COMMAND:
+            {
+                switch (LOWORD(wParam))
+                {
+                    case IDOK:
+                    case IDCANCEL:
+                    {
+                        EndDialog(hwndDlg,
+                                  IDOK);
+                        break;
+                    }
+                }
+                break;
+            }
+
+            case WM_CLOSE:
+            {
+                EndDialog(hwndDlg,
+                          IDCANCEL);
+                break;
+            }
+
+            case WM_INITDIALOG:
+            {
+                LV_COLUMN lvc;
+                HWND hDriversListView;
+                WCHAR szBuffer[260];
+
+                dap = (PDEVADVPROP_INFO)lParam;
+                if (dap != NULL)
+                {
+                    SetWindowLongPtr(hwndDlg,
+                                     DWL_USER,
+                                     (DWORD_PTR)dap);
+
+                    hDriversListView = GetDlgItem(hwndDlg,
+                                                  IDC_DRIVERFILES);
+
+                    /* add a column to the list view control */
+                    lvc.mask = LVCF_FMT | LVCF_WIDTH;
+                    lvc.fmt = LVCFMT_LEFT;
+                    lvc.cx = 0;
+                    (void)ListView_InsertColumn(hDriversListView,
+                                                0,
+                                                &lvc);
+
+                    UpdateDriverDetailsDlg(hwndDlg,
+                                           hDriversListView,
+                                           dap);
+
+                    if (ListView_GetItemCount(hDriversListView) == 0)
+                    {
+                        if(LoadStringW(hDllInstance, IDS_NODRIVERS, szBuffer, _countof(szBuffer)))
+                            MessageBoxW(hwndDlg, szBuffer, dap->szDevName, MB_OK);
+                        EndDialog(hwndDlg, IDCANCEL);
+                    }
+                }
+
+                Ret = TRUE;
+                break;
+            }
+
+            case WM_NOTIFY:
+            {
+                LPNMHDR pnmhdr = (LPNMHDR)lParam;
+
+                switch (pnmhdr->code)
+                {
+                case LVN_ITEMCHANGED:
+                    {
+                        LPNMLISTVIEW pnmv = (LPNMLISTVIEW)lParam;
+                        HWND hDriversListView = GetDlgItem(hwndDlg,
+                                                           IDC_DRIVERFILES);
+
+                        if (ListView_GetSelectedCount(hDriversListView) == 0)
+                        {
+                            /* nothing is selected - empty the labels */
+                            SetDlgItemText(hwndDlg,
+                                           IDC_FILEPROVIDER,
+                                           NULL);
+                            SetDlgItemText(hwndDlg,
+                                           IDC_FILEVERSION,
+                                           NULL);
+                            SetDlgItemText(hwndDlg,
+                                           IDC_FILECOPYRIGHT,
+                                           NULL);
+                            SetDlgItemText(hwndDlg,
+                                           IDC_DIGITALSIGNER,
+                                           NULL);
+                        }
+                        else if (pnmv->uNewState != 0)
+                        {
+                            /* extract version info and update the labels */
+                            WCHAR szDriverPath[MAX_PATH];
+
+                            ListView_GetItemText(hDriversListView,
+                                                 pnmv->iItem,
+                                                 pnmv->iSubItem,
+                                                 szDriverPath,
+                                                 MAX_PATH);
+
+                            UpdateDriverVersionInfoDetails(hwndDlg,
+                                                           szDriverPath);
+                        }
+                    }
+                }
+                break;
+            }
+        }
+    }
+
+    return Ret;
+}
+
+
+static
+VOID
+UpdateDriver(
+    IN HWND hwndDlg,
+    IN PDEVADVPROP_INFO dap)
+{
+    TOKEN_PRIVILEGES Privileges;
+    HANDLE hToken;
+    DWORD dwReboot;
+    BOOL NeedReboot = FALSE;
+
+    // Better use InstallDevInst:
+    //     BOOL
+    //     WINAPI
+    //     InstallDevInst(
+    //         HWND hWnd,
+    //         LPWSTR wszDeviceId,
+    //         BOOL bUpdate,
+    //         DWORD *dwReboot);
+    // See: http://comp.os.ms-windows.programmer.win32.narkive.com/J8FTd4KK/signature-of-undocumented-installdevinstex
+
+    if (!InstallDevInst(hwndDlg, dap->szDeviceID, TRUE, &dwReboot))
+        return;
+
+    if (NeedReboot == FALSE)
+        return;
+
+    //FIXME: load text from resource file
+    if (MessageBoxW(hwndDlg, L"Reboot now?", L"Reboot required", MB_YESNO | MB_ICONQUESTION) != IDYES)
+        return;
+
+    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
+    {
+        ERR("OpenProcessToken failed\n");
+        return;
+    }
+
+    /* Get the LUID for the Shutdown privilege */
+    if (!LookupPrivilegeValueW(NULL, SE_SHUTDOWN_NAME, &Privileges.Privileges[0].Luid))
+    {
+        ERR("LookupPrivilegeValue failed\n");
+        CloseHandle(hToken);
+        return;
+    }
+
+    /* Assign the Shutdown privilege to our process */
+    Privileges.PrivilegeCount = 1;
+    Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+
+    if (!AdjustTokenPrivileges(hToken, FALSE, &Privileges, 0, NULL, NULL))
+    {
+        ERR("AdjustTokenPrivileges failed\n");
+        CloseHandle(hToken);
+        return;
+    }
+
+    /* Finally shut down the system */
+    if (!ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED))
+    {
+        ERR("ExitWindowsEx failed\n");
+        CloseHandle(hToken);
+    }
+}
+
+
+static VOID
+UpdateDriverDlg(IN HWND hwndDlg,
+                IN PDEVADVPROP_INFO dap)
+{
+    HDEVINFO DeviceInfoSet;
+    PSP_DEVINFO_DATA DeviceInfoData;
+
+    if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+    {
+        DeviceInfoSet = dap->CurrentDeviceInfoSet;
+        DeviceInfoData = &dap->CurrentDeviceInfoData;
+    }
+    else
+    {
+        DeviceInfoSet = dap->DeviceInfoSet;
+        DeviceInfoData = &dap->DeviceInfoData;
+    }
+
+    /* set the device image */
+    SendDlgItemMessage(hwndDlg,
+                       IDC_DEVICON,
+                       STM_SETICON,
+                       (WPARAM)dap->hDevIcon,
+                       0);
+
+    /* set the device name edit control text */
+    SetDlgItemText(hwndDlg,
+                   IDC_DEVNAME,
+                   dap->szDevName);
+
+    /* query the driver provider */
+    if (GetDriverProviderString(DeviceInfoSet,
+                                DeviceInfoData,
+                                dap->szTemp,
+                                sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
+    {
+        SetDlgItemText(hwndDlg,
+                       IDC_DRVPROVIDER,
+                       dap->szTemp);
+    }
+
+    /* query the driver date */
+    if (GetDriverDateString(DeviceInfoSet,
+                            DeviceInfoData,
+                            dap->szTemp,
+                            sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
+    {
+        SetDlgItemText(hwndDlg,
+                       IDC_DRVDATE,
+                       dap->szTemp);
+    }
+
+    /* query the driver version */
+    if (GetDriverVersionString(DeviceInfoSet,
+                               DeviceInfoData,
+                               dap->szTemp,
+                               sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
+    {
+        SetDlgItemText(hwndDlg,
+                       IDC_DRVVERSION,
+                       dap->szTemp);
+    }
+}
+
+
+static INT_PTR
+CALLBACK
+AdvProcDriverDlgProc(IN HWND hwndDlg,
+                     IN UINT uMsg,
+                     IN WPARAM wParam,
+                     IN LPARAM lParam)
+{
+    PDEVADVPROP_INFO dap;
+    INT_PTR Ret = FALSE;
+
+    dap = (PDEVADVPROP_INFO)GetWindowLongPtr(hwndDlg,
+                                             DWL_USER);
+
+    if (dap != NULL || uMsg == WM_INITDIALOG)
+    {
+        switch (uMsg)
+        {
+            case WM_COMMAND:
+            {
+                switch (LOWORD(wParam))
+                {
+                    case IDC_DRIVERDETAILS:
+                        DialogBoxParam(hDllInstance,
+                                       MAKEINTRESOURCE(IDD_DRIVERDETAILS),
+                                       hwndDlg,
+                                       DriverDetailsDlgProc,
+                                       (ULONG_PTR)dap);
+                        break;
+
+                    case IDC_UPDATEDRIVER:
+                        UpdateDriver(hwndDlg, dap);
+                        break;
+                }
+                break;
+            }
+
+            case WM_NOTIFY:
+            {
+                NMHDR *hdr = (NMHDR*)lParam;
+                switch (hdr->code)
+                {
+                    case PSN_APPLY:
+                        break;
+                }
+                break;
+            }
+
+            case WM_INITDIALOG:
+            {
+                dap = (PDEVADVPROP_INFO)((LPPROPSHEETPAGE)lParam)->lParam;
+                if (dap != NULL)
+                {
+                    SetWindowLongPtr(hwndDlg,
+                                     DWL_USER,
+                                     (DWORD_PTR)dap);
+
+                    UpdateDriverDlg(hwndDlg,
+                                    dap);
+                }
+                Ret = TRUE;
+                break;
+            }
+        }
+    }
+
+    return Ret;
+}
+
+
+static VOID
+SetListViewText(HWND hwnd,
+                INT iItem,
+                LPWSTR lpText)
+{
+    LVITEM li;
+
+    li.mask = LVIF_TEXT | LVIF_STATE;
+    li.iItem = iItem;
+    li.iSubItem = 0;
+    li.state = 0; //(li.iItem == 0 ? LVIS_SELECTED : 0);
+    li.stateMask = LVIS_SELECTED;
+    li.pszText = lpText;
+    (void)ListView_InsertItem(hwnd,
+                              &li);
+}
+
+
+static VOID
+UpdateDetailsDlg(IN HWND hwndDlg,
+                 IN PDEVADVPROP_INFO dap)
+{
+    HWND hwndComboBox;
+    HWND hwndListView;
+    LV_COLUMN lvc;
+    RECT rcClient;
+
+    UINT i;
+    UINT Properties[] =
+    {
+        IDS_PROP_DEVICEID,
+        IDS_PROP_HARDWAREIDS,
+        IDS_PROP_COMPATIBLEIDS,
+        IDS_PROP_MATCHINGDEVICEID,
+        IDS_PROP_SERVICE,
+        IDS_PROP_ENUMERATOR,
+        IDS_PROP_CAPABILITIES,
+        IDS_PROP_DEVNODEFLAGS,
+        IDS_PROP_CONFIGFLAGS,
+        IDS_PROP_CSCONFIGFLAGS,
+        IDS_PROP_EJECTIONRELATIONS,
+        IDS_PROP_REMOVALRELATIONS,
+        IDS_PROP_BUSRELATIONS,
+        IDS_PROP_DEVUPPERFILTERS,
+        IDS_PROP_DEVLOWERFILTERS,
+        IDS_PROP_CLASSUPPERFILTERS,
+        IDS_PROP_CLASSLOWERFILTERS,
+        IDS_PROP_CLASSINSTALLER,
+        IDS_PROP_CLASSCOINSTALLER,
+        IDS_PROP_DEVICECOINSTALLER,
+        IDS_PROP_FIRMWAREREVISION,
+        IDS_PROP_CURRENTPOWERSTATE,
+        IDS_PROP_POWERCAPABILITIES,
+        IDS_PROP_POWERSTATEMAPPINGS
+    };
+
+
+    /* set the device image */
+    SendDlgItemMessage(hwndDlg,
+                       IDC_DEVICON,
+                       STM_SETICON,
+                       (WPARAM)dap->hDevIcon,
+                       0);
+
+    /* set the device name edit control text */
+    SetDlgItemText(hwndDlg,
+                   IDC_DEVNAME,
+                   dap->szDevName);
+
+
+    hwndComboBox = GetDlgItem(hwndDlg,
+                              IDC_DETAILSPROPNAME);
+
+    hwndListView = GetDlgItem(hwndDlg,
+                              IDC_DETAILSPROPVALUE);
+
+    for (i = 0; i != sizeof(Properties) / sizeof(Properties[0]); i++)
+    {
+        /* fill in the device usage combo box */
+        if (LoadString(hDllInstance,
+                       Properties[i],
+                       dap->szTemp,
+                       sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
+        {
+            SendMessage(hwndComboBox,
+                        CB_ADDSTRING,
+                        0,
+                        (LPARAM)dap->szTemp);
+        }
+    }
+
+
+    GetClientRect(hwndListView,
+                  &rcClient);
+
+    /* add a column to the list view control */
+    lvc.mask = LVCF_FMT | LVCF_WIDTH;
+    lvc.fmt = LVCFMT_LEFT;
+    lvc.cx = rcClient.right;
+    (void)ListView_InsertColumn(hwndListView,
+                                0,
+                                &lvc);
+
+    SendMessage(hwndComboBox,
+                CB_SETCURSEL,
+                0,
+                0);
+
+    SetListViewText(hwndListView, 0, dap->szDeviceID);
+
+    SetFocus(hwndComboBox);
+}
+
+
+static VOID
+DisplayDevicePropertyText(IN PDEVADVPROP_INFO dap,
+                          IN HWND hwndListView,
+                          IN DWORD dwProperty)
+{
+    HDEVINFO DeviceInfoSet;
+    PSP_DEVINFO_DATA DeviceInfoData;
+    DWORD dwType;
+    DWORD dwSize;
+    DWORD dwValue;
+    LPBYTE lpBuffer;
+    LPWSTR lpStr;
+    INT len;
+    INT index;
+
+    if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+    {
+        DeviceInfoSet = dap->CurrentDeviceInfoSet;
+        DeviceInfoData = &dap->CurrentDeviceInfoData;
+    }
+    else
+    {
+        DeviceInfoSet = dap->DeviceInfoSet;
+        DeviceInfoData = &dap->DeviceInfoData;
+    }
+
+    dwSize = 0;
+    SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+                                     DeviceInfoData,
+                                     dwProperty,
+                                     &dwType,
+                                     NULL,
+                                     0,
+                                     &dwSize);
+    if (dwSize == 0)
+    {
+        if (GetLastError() != ERROR_FILE_NOT_FOUND)
+        {
+            swprintf(dap->szTemp, L"Error: Getting the size failed! (Error: %ld)", GetLastError());
+            SetListViewText(hwndListView, 0, dap->szTemp);
+        }
+        return;
+    }
+
+    if (dwType == REG_SZ)
+        dwSize += sizeof(WCHAR);
+
+    lpBuffer = HeapAlloc(GetProcessHeap(),
+                         HEAP_ZERO_MEMORY,
+                         dwSize);
+    if (lpBuffer == NULL)
+    {
+        SetListViewText(hwndListView, 0, L"Error: Allocating the buffer failed!");
+        return;
+    }
+
+    if (SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+                                         DeviceInfoData,
+                                         dwProperty,
+                                         &dwType,
+                                         lpBuffer,
+                                         dwSize,
+                                         &dwSize))
+    {
+        if (dwType == REG_SZ)
+        {
+            SetListViewText(hwndListView, 0, (LPWSTR)lpBuffer);
+        }
+        else if (dwType == REG_MULTI_SZ)
+        {
+            lpStr = (LPWSTR)lpBuffer;
+            index = 0;
+            while (*lpStr != 0)
+            {
+                len = wcslen(lpStr) + 1;
+
+                SetListViewText(hwndListView, index, lpStr);
+
+                lpStr += len;
+                index++;
+            }
+        }
+        else if (dwType == REG_DWORD)
+        {
+            dwValue = *(DWORD *) lpBuffer;
+
+            switch (dwProperty)
+            {
+                case SPDRP_CAPABILITIES:
+                    index = 0;
+                    if (dwValue & CM_DEVCAP_LOCKSUPPORTED)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_LOCKSUPPORTED");
+                    if (dwValue & CM_DEVCAP_EJECTSUPPORTED)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_EJECTSUPPORTED");
+                    if (dwValue & CM_DEVCAP_REMOVABLE)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_REMOVABLE");
+                    if (dwValue & CM_DEVCAP_DOCKDEVICE)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_DOCKDEVICE");
+                    if (dwValue & CM_DEVCAP_UNIQUEID)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_UNIQUEID");
+                    if (dwValue & CM_DEVCAP_SILENTINSTALL)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_SILENTINSTALL");
+                    if (dwValue & CM_DEVCAP_RAWDEVICEOK)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_RAWDEVICEOK");
+                    if (dwValue & CM_DEVCAP_SURPRISEREMOVALOK)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_SURPRISEREMOVALOK");
+                    if (dwValue & CM_DEVCAP_HARDWAREDISABLED)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_HARDWAREDISABLED");
+                    if (dwValue & CM_DEVCAP_NONDYNAMIC)
+                        SetListViewText(hwndListView, index++, L"CM_DEVCAP_NONDYNAMIC");
+                    break;
+
+                case SPDRP_CONFIGFLAGS:
+                    index = 0;
+                    if (dwValue & CONFIGFLAG_DISABLED)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_DISABLED");
+                    if (dwValue & CONFIGFLAG_REMOVED)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_REMOVED");
+                    if (dwValue & CONFIGFLAG_MANUAL_INSTALL)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_MANUAL_INSTALL");
+                    if (dwValue & CONFIGFLAG_IGNORE_BOOT_LC)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_IGNORE_BOOT_LC");
+                    if (dwValue & CONFIGFLAG_NET_BOOT)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_NET_BOOT");
+                    if (dwValue & CONFIGFLAG_REINSTALL)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_REINSTALL");
+                    if (dwValue & CONFIGFLAG_FAILEDINSTALL)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_FAILEDINSTALL");
+                    if (dwValue & CONFIGFLAG_CANTSTOPACHILD)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_CANTSTOPACHILD");
+                    if (dwValue & CONFIGFLAG_OKREMOVEROM)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_OKREMOVEROM");
+                    if (dwValue & CONFIGFLAG_NOREMOVEEXIT)
+                        SetListViewText(hwndListView, index++, L"CONFIGFLAG_NOREMOVEEXIT");
+                    break;
+
+                default:
+                    swprintf(dap->szTemp, L"0x%08lx", dwValue);
+                    SetListViewText(hwndListView, 0, dap->szTemp);
+                    break;
+            }
+        }
+        else
+        {
+            SetListViewText(hwndListView, 0, L"Error: Unsupported value type!");
+
+        }
+    }
+    else
+    {
+        SetListViewText(hwndListView, 0, L"Error: Retrieving the value failed!");
+    }
+
+    HeapFree(GetProcessHeap(),
+             0,
+             lpBuffer);
+}
+
+static VOID
+DisplayDevNodeFlags(IN PDEVADVPROP_INFO dap,
+                    IN HWND hwndListView)
+{
+    DWORD dwStatus = 0;
+    DWORD dwProblem = 0;
+    INT index;
+
+    CM_Get_DevNode_Status_Ex(&dwStatus,
+                             &dwProblem,
+                             dap->DeviceInfoData.DevInst,
+                             0,
+                             dap->hMachine);
+
+    index = 0;
+    if (dwStatus & DN_ROOT_ENUMERATED)
+        SetListViewText(hwndListView, index++, L"DN_ROOT_ENUMERATED");
+    if (dwStatus & DN_DRIVER_LOADED)
+        SetListViewText(hwndListView, index++, L"DN_DRIVER_LOADED");
+    if (dwStatus & DN_ENUM_LOADED)
+        SetListViewText(hwndListView, index++, L"DN_ENUM_LOADED");
+    if (dwStatus & DN_STARTED)
+        SetListViewText(hwndListView, index++, L"DN_STARTED");
+    if (dwStatus & DN_MANUAL)
+        SetListViewText(hwndListView, index++, L"DN_MANUAL");
+    if (dwStatus & DN_NEED_TO_ENUM)
+        SetListViewText(hwndListView, index++, L"DN_NEED_TO_ENUM");
+    if (dwStatus & DN_DRIVER_BLOCKED)
+        SetListViewText(hwndListView, index++, L"DN_DRIVER_BLOCKED");
+    if (dwStatus & DN_HARDWARE_ENUM)
+        SetListViewText(hwndListView, index++, L"DN_HARDWARE_ENUM");
+    if (dwStatus & DN_NEED_RESTART)
+        SetListViewText(hwndListView, index++, L"DN_NEED_RESTART");
+    if (dwStatus & DN_CHILD_WITH_INVALID_ID)
+        SetListViewText(hwndListView, index++, L"DN_CHILD_WITH_INVALID_ID");
+    if (dwStatus & DN_HAS_PROBLEM)
+        SetListViewText(hwndListView, index++, L"DN_HAS_PROBLEM");
+    if (dwStatus & DN_FILTERED)
+        SetListViewText(hwndListView, index++, L"DN_FILTERED");
+    if (dwStatus & DN_LEGACY_DRIVER)
+        SetListViewText(hwndListView, index++, L"DN_LEGACY_DRIVER");
+    if (dwStatus & DN_DISABLEABLE)
+        SetListViewText(hwndListView, index++, L"DN_DISABLEABLE");
+    if (dwStatus & DN_REMOVABLE)
+        SetListViewText(hwndListView, index++, L"DN_REMOVABLE");
+    if (dwStatus & DN_PRIVATE_PROBLEM)
+        SetListViewText(hwndListView, index++, L"DN_PRIVATE_PROBLEM");
+    if (dwStatus & DN_MF_PARENT)
+        SetListViewText(hwndListView, index++, L"DN_MF_PARENT");
+    if (dwStatus & DN_MF_CHILD)
+        SetListViewText(hwndListView, index++, L"DN_MF_CHILD");
+    if (dwStatus & DN_WILL_BE_REMOVED)
+        SetListViewText(hwndListView, index++, L"DN_WILL_BE_REMOVED");
+
+    if (dwStatus & DN_NOT_FIRST_TIMEE)
+        SetListViewText(hwndListView, index++, L"DN_NOT_FIRST_TIMEE");
+    if (dwStatus & DN_STOP_FREE_RES)
+        SetListViewText(hwndListView, index++, L"DN_STOP_FREE_RES");
+    if (dwStatus & DN_REBAL_CANDIDATE)
+        SetListViewText(hwndListView, index++, L"DN_REBAL_CANDIDATE");
+    if (dwStatus & DN_BAD_PARTIAL)
+        SetListViewText(hwndListView, index++, L"DN_BAD_PARTIAL");
+    if (dwStatus & DN_NT_ENUMERATOR)
+        SetListViewText(hwndListView, index++, L"DN_NT_ENUMERATOR");
+    if (dwStatus & DN_NT_DRIVER)
+        SetListViewText(hwndListView, index++, L"DN_NT_DRIVER");
+
+    if (dwStatus & DN_NEEDS_LOCKING)
+        SetListViewText(hwndListView, index++, L"DN_NEEDS_LOCKING");
+    if (dwStatus & DN_ARM_WAKEUP)
+        SetListViewText(hwndListView, index++, L"DN_ARM_WAKEUP");
+    if (dwStatus & DN_APM_ENUMERATOR)
+        SetListViewText(hwndListView, index++, L"DN_APM_ENUMERATOR");
+    if (dwStatus & DN_APM_DRIVER)
+        SetListViewText(hwndListView, index++, L"DN_APM_DRIVER");
+    if (dwStatus & DN_SILENT_INSTALL)
+        SetListViewText(hwndListView, index++, L"DN_SILENT_INSTALL");
+    if (dwStatus & DN_NO_SHOW_IN_DM)
+        SetListViewText(hwndListView, index++, L"DN_NO_SHOW_IN_DM");
+    if (dwStatus & DN_BOOT_LOG_PROB)
+        SetListViewText(hwndListView, index++, L"DN_BOOT_LOG_PROB");
+
+//    swprintf(dap->szTemp, L"0x%08x", dwStatus);
+//    SetListViewText(hwndListView, 0, dap->szTemp);
+}
+
+
+static VOID
+DisplayDevNodeEnumerator(IN PDEVADVPROP_INFO dap,
+                         IN HWND hwndListView)
+{
+    PSP_DEVINFO_DATA DeviceInfoData;
+
+    DWORD dwType = 0;
+    WCHAR szBuffer[256];
+    DWORD dwSize = 256 * sizeof(WCHAR);
+
+    if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+    {
+        DeviceInfoData = &dap->CurrentDeviceInfoData;
+    }
+    else
+    {
+        DeviceInfoData = &dap->DeviceInfoData;
+    }
+
+    CM_Get_DevNode_Registry_Property_ExW(DeviceInfoData->DevInst,
+                                         CM_DRP_ENUMERATOR_NAME,
+                                         &dwType,
+                                         &szBuffer,
+                                         &dwSize,
+                                         0,
+                                         dap->hMachine);
+
+    SetListViewText(hwndListView, 0, szBuffer);
+}
+
+
+static VOID
+DisplayCsFlags(IN PDEVADVPROP_INFO dap,
+               IN HWND hwndListView)
+{
+    DWORD dwValue = 0;
+    INT index;
+
+    CM_Get_HW_Prof_Flags_Ex(dap->szDevName,
+                            0, /* current hardware profile */
+                            &dwValue,
+                            0,
+                            dap->hMachine);
+
+    index = 0;
+    if (dwValue & CSCONFIGFLAG_DISABLED)
+        SetListViewText(hwndListView, index++, L"CSCONFIGFLAG_DISABLED");
+
+    if (dwValue & CSCONFIGFLAG_DO_NOT_CREATE)
+        SetListViewText(hwndListView, index++, L"CSCONFIGFLAG_DO_NOT_CREATE");
+
+    if (dwValue & CSCONFIGFLAG_DO_NOT_START)
+        SetListViewText(hwndListView, index++, L"CSCONFIGFLAG_DO_NOT_START");
+}
+
+
+static VOID
+DisplayMatchingDeviceId(IN PDEVADVPROP_INFO dap,
+                        IN HWND hwndListView)
+{
+    HDEVINFO DeviceInfoSet;
+    PSP_DEVINFO_DATA DeviceInfoData;
+    WCHAR szBuffer[256];
+    HKEY hKey;
+    DWORD dwSize;
+    DWORD dwType;
+
+    if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+    {
+        DeviceInfoSet = dap->CurrentDeviceInfoSet;
+        DeviceInfoData = &dap->CurrentDeviceInfoData;
+    }
+    else
+    {
+        DeviceInfoSet = dap->DeviceInfoSet;
+        DeviceInfoData = &dap->DeviceInfoData;
+    }
+
+    hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
+                                DeviceInfoData,
+                                DICS_FLAG_GLOBAL,
+                                0,
+                                DIREG_DRV,
+                                KEY_QUERY_VALUE);
+    if (hKey != INVALID_HANDLE_VALUE)
+    {
+        dwSize = 256 * sizeof(WCHAR);
+        if (RegQueryValueEx(hKey,
+                            L"MatchingDeviceId",
+                            NULL,
+                            &dwType,
+                            (LPBYTE)szBuffer,
+                            &dwSize) == ERROR_SUCCESS)
+        {
+            SetListViewText(hwndListView, 0, szBuffer);
+        }
+
+        RegCloseKey(hKey);
+    }
+}
+
+
+static VOID
+DisplayClassCoinstallers(IN PDEVADVPROP_INFO dap,
+                          IN HWND hwndListView)
+{
+    HDEVINFO DeviceInfoSet;
+    PSP_DEVINFO_DATA DeviceInfoData;
+    WCHAR szClassGuid[45];
+    HKEY hKey = INVALID_HANDLE_VALUE;
+    DWORD dwSize;
+    DWORD dwType;
+    LPBYTE lpBuffer = NULL;
+    LPWSTR lpStr;
+    INT index;
+    INT len;
+    LONG lError;
+
+    if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+    {
+        DeviceInfoSet = dap->CurrentDeviceInfoSet;
+        DeviceInfoData = &dap->CurrentDeviceInfoData;
+    }
+    else
+    {
+        DeviceInfoSet = dap->DeviceInfoSet;
+        DeviceInfoData = &dap->DeviceInfoData;
+    }
+
+    dwSize = 45 * sizeof(WCHAR);
+    if (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+                                          DeviceInfoData,
+                                          SPDRP_CLASSGUID,
+                                          &dwType,
+                                          (LPBYTE)szClassGuid,
+                                          dwSize,
+                                          &dwSize))
+        return;
+
+    lError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
+                           L"SYSTEM\\CurrentControlSet\\Control\\CoDeviceInstallers",
+                           0,
+                           GENERIC_READ,
+                           &hKey);
+    if (lError != ERROR_SUCCESS)
+        return;
+
+    dwSize = 0;
+    lError = RegQueryValueEx(hKey,
+                             szClassGuid,
+                             NULL,
+                             &dwType,
+                             NULL,
+                             &dwSize);
+    if (lError != ERROR_SUCCESS)
+        goto done;
+
+    if (dwSize == 0)
+        goto done;
+
+    lpBuffer = HeapAlloc(GetProcessHeap(),
+                         HEAP_ZERO_MEMORY,
+                         dwSize);
+
+    RegQueryValueEx(hKey,
+                    szClassGuid,
+                    NULL,
+                    &dwType,
+                    lpBuffer,
+                    &dwSize);
+
+    lpStr = (LPWSTR)lpBuffer;
+    index = 0;
+    while (*lpStr != 0)
+    {
+        len = wcslen(lpStr) + 1;
+
+        SetListViewText(hwndListView, index, lpStr);
+
+        lpStr += len;
+        index++;
+    }
+
+done:
+    if (lpBuffer != NULL)
+        HeapFree(GetProcessHeap(), 0, lpBuffer);
+
+    if (hKey != INVALID_HANDLE_VALUE)
+        RegCloseKey(hKey);
+}
+
+
+static VOID
+DisplayDeviceCoinstallers(IN PDEVADVPROP_INFO dap,
+                          IN HWND hwndListView)
+{
+    HDEVINFO DeviceInfoSet;
+    PSP_DEVINFO_DATA DeviceInfoData;
+    HKEY hKey;
+    DWORD dwSize;
+    DWORD dwType;
+    LPBYTE lpBuffer;
+    LPWSTR lpStr;
+    INT index;
+    INT len;
+
+    if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+    {
+        DeviceInfoSet = dap->CurrentDeviceInfoSet;
+        DeviceInfoData = &dap->CurrentDeviceInfoData;
+    }
+    else
+    {
+        DeviceInfoSet = dap->DeviceInfoSet;
+        DeviceInfoData = &dap->DeviceInfoData;
+    }
+
+    hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
+                                DeviceInfoData,
+                                DICS_FLAG_GLOBAL,
+                                0,
+                                DIREG_DRV,
+                                KEY_QUERY_VALUE);
+    if (hKey != INVALID_HANDLE_VALUE)
+    {
+        dwSize = 0;
+        if (RegQueryValueEx(hKey,
+                            L"CoInstallers32",
+                            NULL,
+                            &dwType,
+                            NULL,
+                            &dwSize) == ERROR_SUCCESS &&
+            dwSize > 0)
+        {
+
+            lpBuffer = HeapAlloc(GetProcessHeap(),
+                                 HEAP_ZERO_MEMORY,
+                                 dwSize);
+
+            RegQueryValueEx(hKey,
+                            L"CoInstallers32",
+                            NULL,
+                            &dwType,
+                            lpBuffer,
+                            &dwSize);
+
+            lpStr = (LPWSTR)lpBuffer;
+            index = 0;
+            while (*lpStr != 0)
+            {
+                len = wcslen(lpStr) + 1;
+
+                SetListViewText(hwndListView, index, lpStr);
+
+                lpStr += len;
+                index++;
+            }
+
+            HeapFree(GetProcessHeap(),
+                     0,
+                     lpBuffer);
+        }
+
+        RegCloseKey(hKey);
+    }
+}
+
+
+static VOID
+DisplayClassProperties(IN PDEVADVPROP_INFO dap,
+                       IN HWND hwndListView,
+                       IN LPWSTR lpProperty)
+{
+    HDEVINFO DeviceInfoSet;
+    PSP_DEVINFO_DATA DeviceInfoData;
+    WCHAR szClassGuid[45];
+    DWORD dwSize;
+    DWORD dwType;
+    HKEY hKey;
+    GUID ClassGuid;
+    LPBYTE lpBuffer;
+    LPWSTR lpStr;
+    INT index = 0;
+    INT len;
+
+    if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+    {
+        DeviceInfoSet = dap->CurrentDeviceInfoSet;
+        DeviceInfoData = &dap->CurrentDeviceInfoData;
+    }
+    else
+    {
+        DeviceInfoSet = dap->DeviceInfoSet;
+        DeviceInfoData = &dap->DeviceInfoData;
+    }
+
+    dwSize = 45 * sizeof(WCHAR);
+    if (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+                                          DeviceInfoData,
+                                          SPDRP_CLASSGUID,
+                                          &dwType,
+                                          (LPBYTE)szClassGuid,
+                                          dwSize,
+                                          &dwSize))
+        return;
+
+    pSetupGuidFromString(szClassGuid,
+                         &ClassGuid);
+
+    hKey = SetupDiOpenClassRegKey(&ClassGuid,
+                                  KEY_QUERY_VALUE);
+    if (hKey != INVALID_HANDLE_VALUE)
+    {
+        dwSize = 0;
+        if (RegQueryValueEx(hKey,
+                            lpProperty,
+                            NULL,
+                            &dwType,
+                            NULL,
+                            &dwSize) == ERROR_SUCCESS &&
+            dwSize > 0)
+        {
+            lpBuffer = HeapAlloc(GetProcessHeap(),
+                                 HEAP_ZERO_MEMORY,
+                                 dwSize);
+
+            RegQueryValueEx(hKey,
+                            lpProperty,
+                            NULL,
+                            &dwType,
+                            lpBuffer,
+                            &dwSize);
+
+            if (dwType == REG_SZ)
+            {
+                SetListViewText(hwndListView, 0, (LPWSTR)lpBuffer);
+            }
+            else if (dwType == REG_MULTI_SZ)
+            {
+                lpStr = (LPWSTR)lpBuffer;
+                index = 0;
+                while (*lpStr != 0)
+                {
+                    len = wcslen(lpStr) + 1;
+
+                    SetListViewText(hwndListView, index, lpStr);
+
+                    lpStr += len;
+                    index++;
+                }
+            }
+
+            HeapFree(GetProcessHeap(),
+                     0,
+                     lpBuffer);
+        }
+
+        RegCloseKey(hKey);
+    }
+}
+
+
+static VOID
+DisplayDeviceRelations(
+    IN PDEVADVPROP_INFO dap,
+    IN HWND hwndListView,
+    IN ULONG ulFlags)
+{
+    ULONG ulLength = 0;
+    LPWSTR pszBuffer = NULL, pszStr;
+    INT index = 0, len;
+
+    CONFIGRET ret;
+
+    ret = CM_Get_Device_ID_List_Size_ExW(&ulLength,
+                                         dap->szDeviceID,
+                                         ulFlags,
+                                         NULL);
+    if (ret != CR_SUCCESS)
+        return;
+
+    pszBuffer = HeapAlloc(GetProcessHeap(),
+                          HEAP_ZERO_MEMORY,
+                          ulLength);
+    if (pszBuffer == NULL)
+        return;
+
+    ret = CM_Get_Device_ID_List_ExW(dap->szDeviceID,
+                                    pszBuffer,
+                                    ulLength,
+                                    ulFlags,
+                                    NULL);
+    if (ret != CR_SUCCESS)
+    {
+        HeapFree(GetProcessHeap(), 0, pszBuffer);
+        return;
+    }
+
+    pszStr = pszBuffer;
+    index = 0;
+    while (*pszStr != 0)
+    {
+        len = wcslen(pszStr) + 1;
+
+        SetListViewText(hwndListView, index, pszStr);
+
+        pszStr += len;
+        index++;
+    }
+
+    HeapFree(GetProcessHeap(), 0, pszBuffer);
+}
+
+
+static VOID
+DisplayDeviceProperties(IN PDEVADVPROP_INFO dap,
+                        IN HWND hwndComboBox,
+                        IN HWND hwndListView)
+{
+    INT Index;
+
+    Index = (INT)SendMessage(hwndComboBox,
+                             CB_GETCURSEL,
+                             0,
+                             0);
+    if (Index == CB_ERR)
+        return;
+
+    (void)ListView_DeleteAllItems(hwndListView);
+
+    switch (Index)
+    {
+        case 0:
+            SetListViewText(hwndListView, 0, dap->szDeviceID);
+            break;
+
+        case 1: /* Hardware ID */
+            DisplayDevicePropertyText(dap,
+                                      hwndListView,
+                                      SPDRP_HARDWAREID);
+            break;
+
+        case 2: /* Compatible IDs */
+            DisplayDevicePropertyText(dap,
+                                      hwndListView,
+                                      SPDRP_COMPATIBLEIDS);
+            break;
+
+        case 3: /* Matching ID */
+            DisplayMatchingDeviceId(dap,
+                                    hwndListView);
+            break;
+
+        case 4: /* Service */
+            DisplayDevicePropertyText(dap,
+                                      hwndListView,
+                                      SPDRP_SERVICE);
+            break;
+
+        case 5: /* Enumerator */
+            DisplayDevNodeEnumerator(dap,
+                                     hwndListView);
+            break;
+
+        case 6: /* Capabilities */
+            DisplayDevicePropertyText(dap,
+                                      hwndListView,
+                                      SPDRP_CAPABILITIES);
+            break;
+
+        case 7: /* Devnode Flags */
+            DisplayDevNodeFlags(dap,
+                                hwndListView);
+            break;
+
+        case 8: /* Config Flags */
+            DisplayDevicePropertyText(dap,
+                                      hwndListView,
+                                      SPDRP_CONFIGFLAGS);
+            break;
+
+        case 9: /* CSConfig Flags */
+            DisplayCsFlags(dap,
+                           hwndListView);
+            break;
+
+        case 10: /* Ejection relation */
+            DisplayDeviceRelations(dap,
+                                   hwndListView,
+                                   CM_GETIDLIST_FILTER_EJECTRELATIONS);
+            break;
+
+        case 11: /* Removal relations */
+            DisplayDeviceRelations(dap,
+                                   hwndListView,
+                                   CM_GETIDLIST_FILTER_REMOVALRELATIONS);
+            break;
+
+        case 12: /* Bus relation */
+            DisplayDeviceRelations(dap,
+                                   hwndListView,
+                                   CM_GETIDLIST_FILTER_BUSRELATIONS);
+            break;
+
+        case 13: /* Device Upper Filters */
+            DisplayDevicePropertyText(dap,
+                                      hwndListView,
+                                      SPDRP_UPPERFILTERS);
+            break;
+
+        case 14: /* Device Lower Filters */
+            DisplayDevicePropertyText(dap,
+                                      hwndListView,
+                                      SPDRP_LOWERFILTERS);
+            break;
+
+        case 15: /* Class Upper Filters */
+            DisplayClassProperties(dap,
+                                   hwndListView,
+                                   L"UpperFilters");
+            break;
+
+        case 16: /* Class Lower Filters */
+            DisplayClassProperties(dap,
+                                   hwndListView,
+                                   L"LowerFilters");
+            break;
+
+        case 17: /* Class Installer */
+            DisplayClassProperties(dap,
+                                   hwndListView,
+                                   L"Installer32");
+            break;
+
+        case 18: /* Class Coinstaller */
+            DisplayClassCoinstallers(dap,
+                                     hwndListView);
+            break;
+
+        case 19: /* Device Coinstaller */
+            DisplayDeviceCoinstallers(dap,
+                                      hwndListView);
+            break;
+
+#if 0
+        case 20: /* Firmware Revision */
+            break;
+
+        case 21: /* Current Power State */
+            break;
+
+        case 20: /* Power Capabilities */
+            break;
+
+        case 21: /* Power State Mappings */
+            break;
+#endif
+
+        default:
+            SetListViewText(hwndListView, 0, L"<Not implemented yet>");
+            break;
+    }
+}
+
+
+static INT_PTR
+CALLBACK
+AdvProcDetailsDlgProc(IN HWND hwndDlg,
+                      IN UINT uMsg,
+                      IN WPARAM wParam,
+                      IN LPARAM lParam)
+{
+    PDEVADVPROP_INFO dap;
+    INT_PTR Ret = FALSE;
+
+    dap = (PDEVADVPROP_INFO)GetWindowLongPtr(hwndDlg,
+                                             DWL_USER);
+
+    if (dap != NULL || uMsg == WM_INITDIALOG)
+    {
+        switch (uMsg)
+        {
+            case WM_COMMAND:
+            {
+                switch (LOWORD(wParam))
+                {
+                    case IDC_DETAILSPROPNAME:
+                        if (HIWORD(wParam) == CBN_SELCHANGE)
+                        {
+                            DisplayDeviceProperties(dap,
+                                                    GetDlgItem(hwndDlg, IDC_DETAILSPROPNAME),
+                                                    GetDlgItem(hwndDlg, IDC_DETAILSPROPVALUE));
+                        }
+                        break;
+                }
+                break;
+            }
+
+            case WM_NOTIFY:
+            {
+                NMHDR *hdr = (NMHDR*)lParam;
+                switch (hdr->code)
+                {
+                    case PSN_APPLY:
+                        break;
+                }
+                break;
+            }
+
+            case WM_INITDIALOG:
+            {
+                dap = (PDEVADVPROP_INFO)((LPPROPSHEETPAGE)lParam)->lParam;
+                if (dap != NULL)
+                {
+                    SetWindowLongPtr(hwndDlg,
+                                     DWL_USER,
+                                     (DWORD_PTR)dap);
+
+                    UpdateDetailsDlg(hwndDlg,
+                                     dap);
+                }
+                Ret = TRUE;
+                break;
+            }
+        }
+    }
+
+    return Ret;
+}
+
+
+static VOID
+InitDevUsageActions(IN HWND hwndDlg,
+                    IN HWND hComboBox,
+                    IN PDEVADVPROP_INFO dap)
+{
+    INT Index;
+    UINT i;
+    UINT Actions[] =
+    {
+        IDS_ENABLEDEVICE,
+        IDS_DISABLEDEVICE,
+    };
+
+    for (i = 0;
+         i != sizeof(Actions) / sizeof(Actions[0]);
+         i++)
+    {
+        /* fill in the device usage combo box */
+        if (LoadString(hDllInstance,
+                       Actions[i],
+                       dap->szTemp,
+                       sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
+        {
+            Index = (INT)SendMessage(hComboBox,
+                                     CB_ADDSTRING,
+                                     0,
+                                     (LPARAM)dap->szTemp);
+            if (Index != CB_ERR)
+            {
+                SendMessage(hComboBox,
+                            CB_SETITEMDATA,
+                            (WPARAM)Index,
+                            (LPARAM)Actions[i]);
+
+                switch (Actions[i])
+                {
+                    case IDS_ENABLEDEVICE:
+                        if (dap->DeviceStarted)
+                        {
+                            SendMessage(hComboBox,
+                                        CB_SETCURSEL,
+                                        (WPARAM)Index,
+                                        0);
+                        }
+                        break;
+
+                    case IDS_DISABLEDEVICE:
+                        if (!dap->DeviceStarted)
+                        {
+                            SendMessage(hComboBox,
+                                        CB_SETCURSEL,
+                                        (WPARAM)Index,
+                                        0);
+                        }
+                        break;
+
+                    default:
+                        break;
+                }
+            }
+        }
+    }
+}
+
+
+static UINT
+GetSelectedUsageAction(IN HWND hComboBox)
+{
+    INT Index;
+    UINT Ret = 0;
+
+    Index = (INT)SendMessage(hComboBox,
+                             CB_GETCURSEL,
+                             0,
+                             0);
+    if (Index != CB_ERR)
+    {
+        INT iRet = (INT) SendMessage(hComboBox,
+                               CB_GETITEMDATA,
+                               (WPARAM)Index,
+                               0);
+        if (iRet != CB_ERR)
+        {
+            Ret = (UINT)iRet;
+        }
+    }
+
+    return Ret;
+}
+
+
+static BOOL
+ApplyGeneralSettings(IN HWND hwndDlg,
+                     IN PDEVADVPROP_INFO dap)
+{
+    BOOL Ret = FALSE;
+
+    if (dap->DeviceUsageChanged && dap->IsAdmin && dap->CanDisable)
+    {
+        UINT SelectedUsageAction;
+        BOOL NeedReboot = FALSE;
+
+        SelectedUsageAction = GetSelectedUsageAction(GetDlgItem(hwndDlg,
+                                                                IDC_DEVUSAGE));
+        switch (SelectedUsageAction)
+        {
+            case IDS_ENABLEDEVICE:
+                if (!dap->DeviceStarted)
+                {
+                    Ret = EnableDevice(dap->DeviceInfoSet,
+                                       &dap->DeviceInfoData,
+                                       TRUE,
+                                       0,
+                                       &NeedReboot);
+                }
+                break;
+
+            case IDS_DISABLEDEVICE:
+                if (dap->DeviceStarted)
+                {
+                    Ret = EnableDevice(dap->DeviceInfoSet,
+                                       &dap->DeviceInfoData,
+                                       FALSE,
+                                       0,
+                                       &NeedReboot);
+                }
+                break;
+
+            default:
+                break;
+        }
+
+        if (Ret)
+        {
+            if (NeedReboot)
+            {
+                /* make PropertySheet() return PSM_REBOOTSYSTEM */
+                PropSheet_RebootSystem(hwndDlg);
+            }
+        }
+        else
+        {
+            /* FIXME - display an error message */
+            FIXME("Failed to enable/disable device! LastError: %d\n",
+                  GetLastError());
+        }
+    }
+    else
+        Ret = !dap->DeviceUsageChanged;
+
+    /* disable the apply button */
+    PropSheet_UnChanged(GetParent(hwndDlg),
+                        hwndDlg);
+    dap->DeviceUsageChanged = FALSE;
+    return Ret;
+}
+
+
+static VOID
+UpdateDevInfo(IN HWND hwndDlg,
+              IN PDEVADVPROP_INFO dap,
+              IN BOOL ReOpen)
+{
+    HWND hDevUsage, hPropSheetDlg, hDevProbBtn;
+    CONFIGRET cr;
+    ULONG Status, ProblemNumber;
+    SP_DEVINSTALL_PARAMS_W InstallParams;
+    UINT TroubleShootStrId = IDS_TROUBLESHOOTDEV;
+    BOOL bFlag, bDevActionAvailable = TRUE;
+    BOOL bDrvInstalled = FALSE;
+    DWORD iPage;
+    HDEVINFO DeviceInfoSet = NULL;
+    PSP_DEVINFO_DATA DeviceInfoData = NULL;
+    PROPSHEETHEADER psh;
+    DWORD nDriverPages = 0;
+    BOOL RecalcPages = FALSE;
+
+    TRACE("UpdateDevInfo()\n");
+
+    hPropSheetDlg = GetParent(hwndDlg);
+
+    if (dap->PageInitialized)
+    {
+        /* switch to the General page */
+        PropSheet_SetCurSelByID(hPropSheetDlg,
+                                IDD_DEVICEGENERAL);
+
+        /* remove and destroy the existing device property sheet pages */
+        if (dap->DevPropSheets != NULL)
+        {
+            for (iPage = 0;
+                 iPage != dap->nDevPropSheets;
+                 iPage++)
+            {
+                if (dap->DevPropSheets[iPage] != NULL)
+                {
+                    PropSheet_RemovePage(hPropSheetDlg,
+                                         (WPARAM) -1,
+                                         dap->DevPropSheets[iPage]);
+                    RecalcPages = TRUE;
+                }
+            }
+        }
+    }
+
+    iPage = 0;
+
+    if (dap->FreeDevPropSheets)
+    {
+        /* don't free the array if it's the one allocated in
+           DisplayDeviceAdvancedProperties */
+        HeapFree(GetProcessHeap(),
+                 0,
+                 dap->DevPropSheets);
+
+        dap->FreeDevPropSheets = FALSE;
+    }
+
+    dap->DevPropSheets = NULL;
+    dap->nDevPropSheets = 0;
+
+    if (ReOpen)
+    {
+        /* create a new device info set and re-open the device */
+        if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+        {
+            SetupDiDestroyDeviceInfoList(dap->CurrentDeviceInfoSet);
+        }
+
+        dap->ParentDevInst = 0;
+        dap->CurrentDeviceInfoSet = SetupDiCreateDeviceInfoListEx(NULL,
+                                                                  hwndDlg,
+                                                                  dap->lpMachineName,
+                                                                  NULL);
+        if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+        {
+            if (SetupDiOpenDeviceInfo(dap->CurrentDeviceInfoSet,
+                                      dap->szDeviceID,
+                                      hwndDlg,
+                                      0,
+                                      &dap->CurrentDeviceInfoData))
+            {
+                if (dap->CloseDevInst)
+                {
+                    SetupDiDestroyDeviceInfoList(dap->DeviceInfoSet);
+                }
+
+                dap->CloseDevInst = TRUE;
+                dap->DeviceInfoSet = dap->CurrentDeviceInfoSet;
+                dap->DeviceInfoData = dap->CurrentDeviceInfoData;
+                dap->CurrentDeviceInfoSet = INVALID_HANDLE_VALUE;
+            }
+            else
+                goto GetParentNode;
+        }
+        else
+        {
+GetParentNode:
+            /* get the parent node from the initial devinst */
+            CM_Get_Parent_Ex(&dap->ParentDevInst,
+                             dap->DeviceInfoData.DevInst,
+                             0,
+                             dap->hMachine);
+        }
+
+        if (dap->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+        {
+            DeviceInfoSet = dap->CurrentDeviceInfoSet;
+            DeviceInfoData = &dap->CurrentDeviceInfoData;
+        }
+        else
+        {
+            DeviceInfoSet = dap->DeviceInfoSet;
+            DeviceInfoData = &dap->DeviceInfoData;
+        }
+    }
+    else
+    {
+        DeviceInfoSet = dap->DeviceInfoSet;
+        DeviceInfoData = &dap->DeviceInfoData;
+    }
+
+    dap->HasDriverPage = FALSE;
+    dap->HasResourcePage = FALSE;
+    dap->HasPowerPage = FALSE;
+    if (IsDriverInstalled(DeviceInfoData->DevInst,
+                          dap->hMachine,
+                          &bDrvInstalled) &&
+        bDrvInstalled)
+    {
+        if (SetupDiCallClassInstaller((dap->ShowRemotePages ?
+                                           DIF_ADDREMOTEPROPERTYPAGE_ADVANCED :
+                                           DIF_ADDPROPERTYPAGE_ADVANCED),
+                                      DeviceInfoSet,
+                                      DeviceInfoData))
+        {
+            /* get install params */
+            InstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS_W);
+            if (!SetupDiGetDeviceInstallParamsW(DeviceInfoSet,
+                                                DeviceInfoData,
+                                                &InstallParams))
+            {
+                /* zero the flags */
+                InstallParams.Flags = 0;
+            }
+
+            dap->HasDriverPage = !(InstallParams.Flags & DI_DRIVERPAGE_ADDED);
+            dap->HasResourcePage = !(InstallParams.Flags & DI_RESOURCEPAGE_ADDED);
+            dap->HasPowerPage = !(InstallParams.Flags & DI_FLAGSEX_POWERPAGE_ADDED);
+        }
+    }
+
+    /* get the device icon */
+    if (dap->hDevIcon != NULL)
+    {
+        DestroyIcon(dap->hDevIcon);
+        dap->hDevIcon = NULL;
+    }
+    if (!SetupDiLoadClassIcon(&DeviceInfoData->ClassGuid,
+                              &dap->hDevIcon,
+                              NULL))
+    {
+        dap->hDevIcon = NULL;
+    }
+
+    /* get the device name */
+    if (GetDeviceDescriptionString(DeviceInfoSet,
+                                   DeviceInfoData,
+                                   dap->szDevName,
+                                   sizeof(dap->szDevName) / sizeof(dap->szDevName[0])))
+    {
+        PropSheet_SetTitle(hPropSheetDlg,
+                           PSH_PROPTITLE,
+                           dap->szDevName);
+    }
+
+    /* set the device image */
+    SendDlgItemMessage(hwndDlg,
+                       IDC_DEVICON,
+                       STM_SETICON,
+                       (WPARAM)dap->hDevIcon,
+                       0);
+
+    /* set the device name edit control text */
+    SetDlgItemText(hwndDlg,
+                   IDC_DEVNAME,
+                   dap->szDevName);
+
+    /* set the device type edit control text */
+    if (GetDeviceTypeString(DeviceInfoData,
+                            dap->szTemp,
+                            sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
+    {
+        SetDlgItemText(hwndDlg,
+                       IDC_DEVTYPE,
+                       dap->szTemp);
+    }
+
+    /* set the device manufacturer edit control text */
+    if (GetDeviceManufacturerString(DeviceInfoSet,
+                                    DeviceInfoData,
+                                    dap->szTemp,
+                                    sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
+    {
+        SetDlgItemText(hwndDlg,
+                       IDC_DEVMANUFACTURER,
+                       dap->szTemp);
+    }
+
+    /* set the device location edit control text */
+    if (GetDeviceLocationString(DeviceInfoSet,
+                                DeviceInfoData,
+                                dap->ParentDevInst,
+                                dap->szTemp,
+                                sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
+    {
+        SetDlgItemText(hwndDlg,
+                       IDC_DEVLOCATION,
+                       dap->szTemp);
+    }
+
+    /* set the device status edit control text */
+    if (GetDeviceStatusString(DeviceInfoData->DevInst,
+                              dap->hMachine,
+                              dap->szTemp,
+                              sizeof(dap->szTemp) / sizeof(dap->szTemp[0])))
+    {
+        SetDlgItemText(hwndDlg,
+                       IDC_DEVSTATUS,
+                       dap->szTemp);
+    }
+
+    /* set the device troubleshoot button text and disable it if necessary */
+    hDevProbBtn = GetDlgItem(hwndDlg,
+                             IDC_DEVPROBLEM);
+    cr = CM_Get_DevNode_Status_Ex(&Status,
+                                  &ProblemNumber,
+                                  DeviceInfoData->DevInst,
+                                  0,
+                                  dap->hMachine);
+    if (cr == CR_SUCCESS && (Status & DN_HAS_PROBLEM))
+    {
+        switch (ProblemNumber)
+        {
+            case CM_PROB_DEVLOADER_FAILED:
+            {
+                /* FIXME - only if it's not a root bus devloader,
+                           disable the button otherwise */
+                TroubleShootStrId = IDS_UPDATEDRV;
+                break;
+            }
+
+            case CM_PROB_OUT_OF_MEMORY:
+            case CM_PROB_ENTRY_IS_WRONG_TYPE:
+            case CM_PROB_LACKED_ARBITRATOR:
+            case CM_PROB_FAILED_START:
+            case CM_PROB_LIAR:
+            case CM_PROB_UNKNOWN_RESOURCE:
+            {
+                TroubleShootStrId = IDS_UPDATEDRV;
+                break;
+            }
+
+            case CM_PROB_BOOT_CONFIG_CONFLICT:
+            case CM_PROB_NORMAL_CONFLICT:
+            case CM_PROB_REENUMERATION:
+            {
+                /* FIXME - Troubleshoot conflict */
+                break;
+            }
+
+            case CM_PROB_FAILED_FILTER:
+            case CM_PROB_REINSTALL:
+            case CM_PROB_FAILED_INSTALL:
+            {
+                TroubleShootStrId = IDS_REINSTALLDRV;
+                break;
+            }
+
+            case CM_PROB_DEVLOADER_NOT_FOUND:
+            {
+                /* FIXME - 4 cases:
+                   1) if it's a missing system devloader:
+                      - disable the button (Reinstall Driver)
+                   2) if it's not a system devloader but still missing:
+                      - Reinstall Driver
+                   3) if it's not a system devloader but the file can be found:
+                      - Update Driver
+                   4) if it's a missing or empty software key
+                      - Update Driver
+                 */
+                break;
+            }
+
+            case CM_PROB_INVALID_DATA:
+            case CM_PROB_PARTIAL_LOG_CONF:
+            case CM_PROB_NO_VALID_LOG_CONF:
+            case CM_PROB_HARDWARE_DISABLED:
+            case CM_PROB_CANT_SHARE_IRQ:
+            case CM_PROB_TRANSLATION_FAILED:
+            case CM_PROB_SYSTEM_SHUTDOWN:
+            case CM_PROB_PHANTOM:
+                bDevActionAvailable = FALSE;
+                break;
+
+            case CM_PROB_NOT_VERIFIED:
+            case CM_PROB_DEVICE_NOT_THERE:
+                /* FIXME - search hardware */
+                break;
+
+            case CM_PROB_NEED_RESTART:
+            case CM_PROB_WILL_BE_REMOVED:
+            case CM_PROB_MOVED:
+            case CM_PROB_TOO_EARLY:
+            case CM_PROB_DISABLED_SERVICE:
+                TroubleShootStrId = IDS_REBOOT;
+                break;
+
+            case CM_PROB_REGISTRY:
+                /* FIXME - check registry? */
+                break;
+
+            case CM_PROB_DISABLED:
+                /* if device was disabled by the user: */
+                TroubleShootStrId = IDS_ENABLEDEV;
+                /* FIXME - otherwise disable button because the device was
+                           disabled by the system*/
+                break;
+
+            case CM_PROB_DEVLOADER_NOT_READY:
+                /* FIXME - if it's a graphics adapter:
+                           - if it's a a secondary adapter and the main adapter
+                             couldn't be found
+                             - disable  button
+                           - else
+                             - Properties
+                         - else
+                           - Update driver
+                 */
+                break;
+
+            case CM_PROB_FAILED_ADD:
+                TroubleShootStrId = IDS_PROPERTIES;
+                break;
+        }
+    }
+
+    if (LoadString(hDllInstance,
+                   TroubleShootStrId,
+                   dap->szTemp,
+                   sizeof(dap->szTemp) / sizeof(dap->szTemp[0])) != 0)
+    {
+        SetWindowText(hDevProbBtn,
+                      dap->szTemp);
+    }
+    EnableWindow(hDevProbBtn,
+                 dap->IsAdmin && bDevActionAvailable);
+
+    /* check if the device can be enabled/disabled */
+    hDevUsage = GetDlgItem(hwndDlg,
+                           IDC_DEVUSAGE);
+
+    dap->CanDisable = FALSE;
+    dap->DeviceStarted = FALSE;
+
+    if (CanDisableDevice(DeviceInfoData->DevInst,
+                         dap->hMachine,
+                         &bFlag))
+    {
+        dap->CanDisable = bFlag;
+    }
+
+    if (IsDeviceStarted(DeviceInfoData->DevInst,
+                        dap->hMachine,
+                        &bFlag))
+    {
+        dap->DeviceStarted = bFlag;
+    }
+
+    /* enable/disable the device usage controls */
+    EnableWindow(GetDlgItem(hwndDlg,
+                            IDC_DEVUSAGELABEL),
+                 dap->CanDisable && dap->IsAdmin);
+    EnableWindow(hDevUsage,
+                 dap->CanDisable && dap->IsAdmin);
+
+    /* clear the combobox */
+    SendMessage(hDevUsage,
+                CB_RESETCONTENT,
+                0,
+                0);
+    if (dap->CanDisable)
+    {
+        InitDevUsageActions(hwndDlg,
+                            hDevUsage,
+                            dap);
+    }
+
+    /* find out how many new device property sheets to add.
+       fake a PROPSHEETHEADER structure, we don't plan to
+       call PropertySheet again!*/
+    psh.dwSize = sizeof(PROPSHEETHEADER);
+    psh.dwFlags = 0;
+    psh.nPages = 0;
+
+    /* get the number of device property sheets for the device */
+    if (!SetupDiGetClassDevPropertySheets(DeviceInfoSet,
+                                          DeviceInfoData,
+                                          &psh,
+                                          0,
+                                          &nDriverPages,
+                                          dap->PropertySheetType) &&
+        nDriverPages != 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+    {
+TRACE("Count %d additional pages!\n", nDriverPages);
+        dap->nDevPropSheets += nDriverPages;
+    }
+    else
+    {
+        nDriverPages = 0;
+    }
+
+    /* include the driver page */
+    if (dap->HasDriverPage)
+        dap->nDevPropSheets++;
+
+    /* include the details page */
+    if (dap->Extended)
+        dap->nDevPropSheets++;
+
+    if (dap->HasResourcePage)
+        dap->nDevPropSheets++;
+
+    /* add the device property sheets */
+    if (dap->nDevPropSheets != 0)
+    {
+TRACE("Show %d pages!\n", dap->nDevPropSheets);
+        dap->DevPropSheets = HeapAlloc(GetProcessHeap(),
+                                       HEAP_ZERO_MEMORY,
+                                       dap->nDevPropSheets * sizeof(HPROPSHEETPAGE));
+        if (dap->DevPropSheets != NULL)
+        {
+            if (nDriverPages != 0)
+            {
+                psh.phpage = dap->DevPropSheets;
+
+                /* query the device property sheet pages to add */
+                if (SetupDiGetClassDevPropertySheets(DeviceInfoSet,
+                                                     DeviceInfoData,
+                                                     &psh,
+                                                     dap->nDevPropSheets,
+                                                     NULL,
+                                                     dap->PropertySheetType))
+                {
+                    /* add the property sheets */
+                    for (iPage = 0;
+                         iPage < nDriverPages;
+                         iPage++)
+                    {
+TRACE("Add page %d\n", iPage);
+TRACE("Sheet %p\n", dap->DevPropSheets[iPage]);
+
+                        if (PropSheet_AddPage(hPropSheetDlg,
+                                              dap->DevPropSheets[iPage]))
+                        {
+                            RecalcPages = TRUE;
+                        }
+                        else
+                        {
+TRACE("PropSheet_AddPage() failed\n");
+                        }
+                    }
+
+                    dap->FreeDevPropSheets = TRUE;
+                }
+                else
+                {
+TRACE("SetupDiGetClassDevPropertySheets() failed\n");
+                    /* cleanup, we were unable to get the device property sheets */
+                    iPage = nDriverPages;
+                    dap->nDevPropSheets -= nDriverPages;
+                    nDriverPages = 0;
+                }
+            }
+            else
+                iPage = 0;
+
+            /* add the driver page if necessary */
+            if (dap->HasDriverPage)
+            {
+                PROPSHEETPAGE pspDriver = {0};
+                pspDriver.dwSize = sizeof(PROPSHEETPAGE);
+                pspDriver.dwFlags = PSP_DEFAULT;
+                pspDriver.hInstance = hDllInstance;
+                pspDriver.pszTemplate = (LPCWSTR)MAKEINTRESOURCE(IDD_DEVICEDRIVER);
+                pspDriver.pfnDlgProc = AdvProcDriverDlgProc;
+                pspDriver.lParam = (LPARAM)dap;
+                dap->DevPropSheets[iPage] = dap->pCreatePropertySheetPageW(&pspDriver);
+                if (dap->DevPropSheets[iPage] != NULL)
+                {
+                    if (PropSheet_AddPage(hPropSheetDlg,
+                                          dap->DevPropSheets[iPage]))
+                    {
+                        iPage++;
+                        RecalcPages = TRUE;
+                    }
+                    else
+                    {
+                        dap->pDestroyPropertySheetPage(dap->DevPropSheets[iPage]);
+                        dap->DevPropSheets[iPage] = NULL;
+                    }
+                }
+            }
+
+            if (dap->Extended)
+            {
+                /* Add the details page */
+                PROPSHEETPAGE pspDetails = {0};
+                pspDetails.dwSize = sizeof(PROPSHEETPAGE);
+                pspDetails.dwFlags = PSP_DEFAULT;
+                pspDetails.hInstance = hDllInstance;
+                pspDetails.pszTemplate = (LPCWSTR)MAKEINTRESOURCE(IDD_DEVICEDETAILS);
+                pspDetails.pfnDlgProc = AdvProcDetailsDlgProc;
+                pspDetails.lParam = (LPARAM)dap;
+                dap->DevPropSheets[iPage] = dap->pCreatePropertySheetPageW(&pspDetails);
+                if (dap->DevPropSheets[iPage] != NULL)
+                {
+                    if (PropSheet_AddPage(hPropSheetDlg,
+                                          dap->DevPropSheets[iPage]))
+                    {
+                        iPage++;
+                        RecalcPages = TRUE;
+                    }
+                    else
+                    {
+                        dap->pDestroyPropertySheetPage(dap->DevPropSheets[iPage]);
+                        dap->DevPropSheets[iPage] = NULL;
+                    }
+                }
+            }
+
+            if (dap->HasResourcePage)
+            {
+                PROPSHEETPAGE pspDriver = {0};
+                pspDriver.dwSize = sizeof(PROPSHEETPAGE);
+                pspDriver.dwFlags = PSP_DEFAULT;
+                pspDriver.hInstance = hDllInstance;
+                pspDriver.pszTemplate = (LPCWSTR)MAKEINTRESOURCE(IDD_DEVICERESOURCES);
+                pspDriver.pfnDlgProc = ResourcesProcDriverDlgProc;
+                pspDriver.lParam = (LPARAM)dap;
+                dap->DevPropSheets[iPage] = dap->pCreatePropertySheetPageW(&pspDriver);
+                if (dap->DevPropSheets[iPage] != NULL)
+                {
+                    if (PropSheet_AddPage(hPropSheetDlg,
+                                          dap->DevPropSheets[iPage]))
+                    {
+                        iPage++;
+                        RecalcPages = TRUE;
+                    }
+                    else
+                    {
+                        dap->pDestroyPropertySheetPage(dap->DevPropSheets[iPage]);
+                        dap->DevPropSheets[iPage] = NULL;
+                    }
+                }
+            }
+            /* FIXME: Add the power page */
+        }
+        else
+            dap->nDevPropSheets = 0;
+    }
+
+    if (RecalcPages)
+    {
+        PropSheet_RecalcPageSizes(hPropSheetDlg);
+    }
+
+    /* finally, disable the apply button */
+    PropSheet_UnChanged(hPropSheetDlg,
+                        hwndDlg);
+    dap->DeviceUsageChanged = FALSE;
+}
+
+
+static LRESULT
+CALLBACK
+DlgParentSubWndProc(IN HWND hwnd,
+                    IN UINT uMsg,
+                    IN WPARAM wParam,
+                    IN LPARAM lParam)
+{
+    PDEVADVPROP_INFO dap;
+
+    dap = (PDEVADVPROP_INFO)GetProp(hwnd,
+                                    L"DevMgrDevChangeSub");
+    if (dap != NULL)
+    {
+        if (uMsg == WM_DEVICECHANGE && !IsWindowVisible(dap->hWndGeneralPage))
+        {
+            SendMessage(dap->hWndGeneralPage,
+                        WM_DEVICECHANGE,
+                        wParam,
+                        lParam);
+        }
+
+        /* pass the message the the old window proc */
+        return CallWindowProc(dap->ParentOldWndProc,
+                              hwnd,
+                              uMsg,
+                              wParam,
+                              lParam);
+    }
+    else
+    {
+        /* this is not a good idea if the subclassed window was an ansi
+           window, but we failed finding out the previous window proc
+           so we can't use CallWindowProc. This should rarely - if ever -
+           happen. */
+
+        return DefWindowProc(hwnd,
+                             uMsg,
+                             wParam,
+                             lParam);
+    }
+}
+
+
+static INT_PTR
+CALLBACK
+AdvPropGeneralDlgProc(IN HWND hwndDlg,
+                      IN UINT uMsg,
+                      IN WPARAM wParam,
+                      IN LPARAM lParam)
+{
+    PDEVADVPROP_INFO dap;
+    INT_PTR Ret = FALSE;
+
+    dap = (PDEVADVPROP_INFO)GetWindowLongPtr(hwndDlg,
+                                             DWL_USER);
+
+    if (dap != NULL || uMsg == WM_INITDIALOG)
+    {
+        switch (uMsg)
+        {
+            case WM_COMMAND:
+            {
+                switch (LOWORD(wParam))
+                {
+                    case IDC_DEVUSAGE:
+                    {
+                        if (HIWORD(wParam) == CBN_SELCHANGE)
+                        {
+                            PropSheet_Changed(GetParent(hwndDlg),
+                                              hwndDlg);
+                            dap->DeviceUsageChanged = TRUE;
+                        }
+                        break;
+                    }
+
+                    case IDC_DEVPROBLEM:
+                    {
+                        if (dap->IsAdmin)
+                        {
+                            /* display the device problem wizard */
+                            ShowDeviceProblemWizard(hwndDlg,
+                                                    dap->DeviceInfoSet,
+                                                    &dap->DeviceInfoData,
+                                                    dap->hMachine);
+                        }
+                        break;
+                    }
+                }
+                break;
+            }
+
+            case WM_NOTIFY:
+            {
+                NMHDR *hdr = (NMHDR*)lParam;
+                switch (hdr->code)
+                {
+                    case PSN_APPLY:
+                        ApplyGeneralSettings(hwndDlg,
+                                             dap);
+                        break;
+                }
+                break;
+            }
+
+            case WM_INITDIALOG:
+            {
+                dap = (PDEVADVPROP_INFO)((LPPROPSHEETPAGE)lParam)->lParam;
+                if (dap != NULL)
+                {
+                    HWND hWndParent;
+
+                    dap->hWndGeneralPage = hwndDlg;
+
+                    SetWindowLongPtr(hwndDlg,
+                                     DWL_USER,
+                                     (DWORD_PTR)dap);
+
+                    /* subclass the parent window to always receive
+                       WM_DEVICECHANGE messages */
+                    hWndParent = GetParent(hwndDlg);
+                    if (hWndParent != NULL)
+                    {
+                        /* subclass the parent window. This is not safe
+                           if the parent window belongs to another thread! */
+                        dap->ParentOldWndProc = (WNDPROC)SetWindowLongPtr(hWndParent,
+                                                                          GWLP_WNDPROC,
+                                                                          (LONG_PTR)DlgParentSubWndProc);
+
+                        if (dap->ParentOldWndProc != NULL &&
+                            SetProp(hWndParent,
+                                    L"DevMgrDevChangeSub",
+                                    (HANDLE)dap))
+                        {
+                            dap->hWndParent = hWndParent;
+                        }
+                    }
+
+                    /* do not call UpdateDevInfo directly in here because it modifies
+                       the pages of the property sheet! */
+                    PostMessage(hwndDlg,
+                                PM_INITIALIZE,
+                                0,
+                                0);
+                }
+                Ret = TRUE;
+                break;
+            }
+
+            case WM_DEVICECHANGE:
+            {
+                /* FIXME - don't call UpdateDevInfo for all events */
+                UpdateDevInfo(hwndDlg,
+                              dap,
+                              TRUE);
+                Ret = TRUE;
+                break;
+            }
+
+            case PM_INITIALIZE:
+            {
+                UpdateDevInfo(hwndDlg,
+                              dap,
+                              FALSE);
+                dap->PageInitialized = TRUE;
+                break;
+            }
+
+            case WM_DESTROY:
+            {
+                /* restore the old window proc of the subclassed parent window */
+                if (dap->hWndParent != NULL && dap->ParentOldWndProc != NULL)
+                {
+                    if (SetWindowLongPtr(dap->hWndParent,
+                                         GWLP_WNDPROC,
+                                         (LONG_PTR)dap->ParentOldWndProc) == (LONG_PTR)DlgParentSubWndProc)
+                    {
+                        RemoveProp(dap->hWndParent,
+                                   L"DevMgrDevChangeSub");
+                    }
+                }
+                break;
+            }
+        }
+    }
+
+    return Ret;
+}
+
+
+INT_PTR
+DisplayDeviceAdvancedProperties(IN HWND hWndParent,
+                                IN LPCWSTR lpDeviceID  OPTIONAL,
+                                IN HDEVINFO DeviceInfoSet,
+                                IN PSP_DEVINFO_DATA DeviceInfoData,
+                                IN HINSTANCE hComCtl32,
+                                IN LPCWSTR lpMachineName,
+                                IN DWORD dwFlags)
+{
+    PROPSHEETHEADER psh = {0};
+    PROPSHEETPAGE pspGeneral = {0};
+    PPROPERTYSHEETW pPropertySheetW;
+    PCREATEPROPERTYSHEETPAGEW pCreatePropertySheetPageW;
+    PDESTROYPROPERTYSHEETPAGE pDestroyPropertySheetPage;
+    PDEVADVPROP_INFO DevAdvPropInfo;
+    HMACHINE hMachine = NULL;
+    DWORD DevIdSize = 0;
+    INT_PTR Ret = -1;
+
+    /* we don't want to statically link against comctl32, so find the
+       functions we need dynamically */
+    pPropertySheetW =
+        (PPROPERTYSHEETW)GetProcAddress(hComCtl32,
+                                        "PropertySheetW");
+    pCreatePropertySheetPageW =
+        (PCREATEPROPERTYSHEETPAGEW)GetProcAddress(hComCtl32,
+                                                  "CreatePropertySheetPageW");
+    pDestroyPropertySheetPage =
+        (PDESTROYPROPERTYSHEETPAGE)GetProcAddress(hComCtl32,
+                                                  "DestroyPropertySheetPage");
+    if (pPropertySheetW == NULL ||
+        pCreatePropertySheetPageW == NULL ||
+        pDestroyPropertySheetPage == NULL)
+    {
+        return -1;
+    }
+
+    if (lpDeviceID == NULL)
+    {
+        /* find out how much size is needed for the device id */
+        if (SetupDiGetDeviceInstanceId(DeviceInfoSet,
+                                       DeviceInfoData,
+                                       NULL,
+                                       0,
+                                       &DevIdSize))
+        {
+            ERR("SetupDiGetDeviceInstanceId unexpectedly returned TRUE!\n");
+            return -1;
+        }
+
+        if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
+        {
+            return -1;
+        }
+    }
+    else
+    {
+        DevIdSize = (DWORD)wcslen(lpDeviceID) + 1;
+    }
+
+    if (lpMachineName != NULL && lpMachineName[0] != L'\0')
+    {
+        CONFIGRET cr = CM_Connect_Machine(lpMachineName,
+                                          &hMachine);
+        if (cr != CR_SUCCESS)
+        {
+            return -1;
+        }
+    }
+
+    /* create the internal structure associated with the "General",
+       "Driver", ... pages */
+    DevAdvPropInfo = HeapAlloc(GetProcessHeap(),
+                               HEAP_ZERO_MEMORY,
+                               FIELD_OFFSET(DEVADVPROP_INFO,
+                                            szDeviceID) +
+                                   (DevIdSize * sizeof(WCHAR)));
+    if (DevAdvPropInfo == NULL)
+    {
+        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+        goto Cleanup;
+    }
+
+    if (lpDeviceID == NULL)
+    {
+        /* read the device instance id */
+        if (!SetupDiGetDeviceInstanceId(DeviceInfoSet,
+                                        DeviceInfoData,
+                                        DevAdvPropInfo->szDeviceID,
+                                        DevIdSize,
+                                        NULL))
+        {
+            goto Cleanup;
+        }
+    }
+    else
+    {
+        /* copy the device instance id supplied by the caller */
+        wcscpy(DevAdvPropInfo->szDeviceID,
+               lpDeviceID);
+    }
+
+    DevAdvPropInfo->DeviceInfoSet = DeviceInfoSet;
+    DevAdvPropInfo->DeviceInfoData = *DeviceInfoData;
+    DevAdvPropInfo->CurrentDeviceInfoSet = INVALID_HANDLE_VALUE;
+    DevAdvPropInfo->CurrentDeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+
+    DevAdvPropInfo->ShowRemotePages = (lpMachineName != NULL && lpMachineName[0] != L'\0');
+    DevAdvPropInfo->hMachine = hMachine;
+    DevAdvPropInfo->lpMachineName = lpMachineName;
+    DevAdvPropInfo->szDevName[0] = L'\0';
+    DevAdvPropInfo->hComCtl32 = hComCtl32;
+    DevAdvPropInfo->pCreatePropertySheetPageW = pCreatePropertySheetPageW;
+    DevAdvPropInfo->pDestroyPropertySheetPage = pDestroyPropertySheetPage;
+
+    DevAdvPropInfo->IsAdmin = IsUserAdmin();
+    DevAdvPropInfo->DoDefaultDevAction = ((dwFlags & DPF_DEVICE_STATUS_ACTION) != 0);
+    DevAdvPropInfo->Extended = ((dwFlags & DPF_EXTENDED) != 0);
+
+    psh.dwSize = sizeof(PROPSHEETHEADER);
+    psh.dwFlags = PSH_PROPTITLE | PSH_NOAPPLYNOW;
+    psh.hwndParent = hWndParent;
+    psh.pszCaption = DevAdvPropInfo->szDevName;
+
+    DevAdvPropInfo->PropertySheetType = DevAdvPropInfo->ShowRemotePages ?
+                                            DIGCDP_FLAG_REMOTE_ADVANCED :
+                                            DIGCDP_FLAG_ADVANCED;
+
+    psh.phpage = HeapAlloc(GetProcessHeap(),
+                           HEAP_ZERO_MEMORY,
+                           1 * sizeof(HPROPSHEETPAGE));
+    if (psh.phpage == NULL)
+    {
+        goto Cleanup;
+    }
+
+    /* add the "General" property sheet */
+    pspGeneral.dwSize = sizeof(PROPSHEETPAGE);
+    pspGeneral.dwFlags = PSP_DEFAULT;
+    pspGeneral.hInstance = hDllInstance;
+    pspGeneral.pszTemplate = (LPCWSTR)MAKEINTRESOURCE(IDD_DEVICEGENERAL);
+    pspGeneral.pfnDlgProc = AdvPropGeneralDlgProc;
+    pspGeneral.lParam = (LPARAM)DevAdvPropInfo;
+    psh.phpage[psh.nPages] = pCreatePropertySheetPageW(&pspGeneral);
+    if (psh.phpage[psh.nPages] != NULL)
+    {
+        psh.nPages++;
+    }
+
+    DevAdvPropInfo->nDevPropSheets = psh.nPages;
+
+    if (psh.nPages != 0)
+    {
+        Ret = pPropertySheetW(&psh);
+
+        /* NOTE: no need to destroy the property sheets anymore! */
+    }
+    else
+    {
+        UINT i;
+
+Cleanup:
+        /* in case of failure the property sheets must be destroyed */
+        if (psh.phpage != NULL)
+        {
+            for (i = 0;
+                 i < psh.nPages;
+                 i++)
+            {
+                if (psh.phpage[i] != NULL)
+                {
+                    pDestroyPropertySheetPage(psh.phpage[i]);
+                }
+            }
+        }
+    }
+
+    if (DevAdvPropInfo != NULL)
+    {
+        if (DevAdvPropInfo->FreeDevPropSheets)
+        {
+            /* don't free the array if it's the one allocated in
+               DisplayDeviceAdvancedProperties */
+            HeapFree(GetProcessHeap(),
+                     0,
+                     DevAdvPropInfo->DevPropSheets);
+        }
+
+        if (DevAdvPropInfo->CloseDevInst)
+        {
+            /* close the device info set in case a new one was created */
+            SetupDiDestroyDeviceInfoList(DevAdvPropInfo->DeviceInfoSet);
+        }
+
+        if (DevAdvPropInfo->CurrentDeviceInfoSet != INVALID_HANDLE_VALUE)
+        {
+            SetupDiDestroyDeviceInfoList(DevAdvPropInfo->CurrentDeviceInfoSet);
+        }
+
+        if (DevAdvPropInfo->hDevIcon != NULL)
+        {
+            DestroyIcon(DevAdvPropInfo->hDevIcon);
+        }
+
+        HeapFree(GetProcessHeap(),
+                 0,
+                 DevAdvPropInfo);
+    }
+
+    if (psh.phpage != NULL)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 psh.phpage);
+    }
+
+    if (hMachine != NULL)
+    {
+        CM_Disconnect_Machine(hMachine);
+    }
+
+    return Ret;
+}
+
+
+static BOOL
+GetDeviceAndComputerName(LPWSTR lpString,
+                         WCHAR szDeviceID[],
+                         WCHAR szMachineName[])
+{
+    BOOL ret = FALSE;
+
+    szDeviceID[0] = L'\0';
+    szMachineName[0] = L'\0';
+
+    while (*lpString != L'\0')
+    {
+        if (*lpString == L'/')
+        {
+            lpString++;
+            if(!_wcsnicmp(lpString, L"DeviceID", 8))
+            {
+                lpString += 9;
+                if (*lpString != L'\0')
+                {
+                    int i = 0;
+                    while ((*lpString != L' ') &&
+                           (*lpString != L'\0') &&
+                           (i <= MAX_DEVICE_ID_LEN))
+                    {
+                        szDeviceID[i++] = *lpString++;
+                    }
+                    szDeviceID[i] = L'\0';
+                    ret = TRUE;
+                }
+            }
+            else if (!_wcsnicmp(lpString, L"MachineName", 11))
+            {
+                lpString += 12;
+                if (*lpString != L'\0')
+                {
+                    int i = 0;
+                    while ((*lpString != L' ') &&
+                           (*lpString != L'\0') &&
+                           (i <= MAX_COMPUTERNAME_LENGTH))
+                    {
+                        szMachineName[i++] = *lpString++;
+                    }
+                    szMachineName[i] = L'\0';
+                }
+            }
+            /* knock the pointer back one and let the next
+             * pointer deal with incrementing, otherwise we
+             * go past the end of the string */
+             lpString--;
+        }
+        lpString++;
+    }
+
+    return ret;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceAdvancedPropertiesW
+ *
+ * DESCRIPTION
+ *   Invokes the device properties dialog, this version may add some property pages
+ *   for some devices
+ *
+ * ARGUMENTS
+ *   hWndParent:    Handle to the parent window
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   lpDeviceID:    Specifies the device whose properties are to be shown
+ *
+ * RETURN VALUE
+ *   Always returns -1, a call to GetLastError returns 0 if successful
+ *
+ * @implemented
+ */
+INT_PTR
+WINAPI
+DeviceAdvancedPropertiesW(IN HWND hWndParent  OPTIONAL,
+                          IN LPCWSTR lpMachineName  OPTIONAL,
+                          IN LPCWSTR lpDeviceID)
+{
+    HDEVINFO hDevInfo;
+    SP_DEVINFO_DATA DevInfoData;
+    HINSTANCE hComCtl32;
+    INT_PTR Ret = -1;
+
+    if (lpDeviceID == NULL)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    /* dynamically load comctl32 */
+    hComCtl32 = LoadAndInitComctl32();
+    if (hComCtl32 != NULL)
+    {
+        hDevInfo = SetupDiCreateDeviceInfoListEx(NULL,
+                                                 hWndParent,
+                                                 lpMachineName,
+                                                 NULL);
+        if (hDevInfo != INVALID_HANDLE_VALUE)
+        {
+            DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+            if (SetupDiOpenDeviceInfo(hDevInfo,
+                                      lpDeviceID,
+                                      hWndParent,
+                                      0,
+                                      &DevInfoData))
+            {
+                Ret = DisplayDeviceAdvancedProperties(hWndParent,
+                                                      lpDeviceID,
+                                                      hDevInfo,
+                                                      &DevInfoData,
+                                                      hComCtl32,
+                                                      lpMachineName,
+                                                      0);
+            }
+
+            SetupDiDestroyDeviceInfoList(hDevInfo);
+        }
+
+        FreeLibrary(hComCtl32);
+    }
+
+    return Ret;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceAdvancedPropertiesA
+ *
+ * DESCRIPTION
+ *   Invokes the device properties dialog, this version may add some property pages
+ *   for some devices
+ *
+ * ARGUMENTS
+ *   hWndParent:    Handle to the parent window
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   lpDeviceID:    Specifies the device whose properties are to be shown
+ *
+ * RETURN VALUE
+ *   Always returns -1, a call to GetLastError returns 0 if successful
+ *
+ * @implemented
+ */
+INT_PTR
+WINAPI
+DeviceAdvancedPropertiesA(IN HWND hWndParent  OPTIONAL,
+                          IN LPCSTR lpMachineName  OPTIONAL,
+                          IN LPCSTR lpDeviceID)
+{
+    LPWSTR lpMachineNameW = NULL;
+    LPWSTR lpDeviceIDW = NULL;
+    INT_PTR Ret = -1;
+
+    if (lpMachineName != NULL)
+    {
+        if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName,
+                                                         CP_ACP)))
+        {
+            goto Cleanup;
+        }
+    }
+    if (lpDeviceID != NULL)
+    {
+        if (!(lpDeviceIDW = ConvertMultiByteToUnicode(lpDeviceID,
+                                                      CP_ACP)))
+        {
+            goto Cleanup;
+        }
+    }
+
+    Ret = DeviceAdvancedPropertiesW(hWndParent,
+                                    lpMachineNameW,
+                                    lpDeviceIDW);
+
+Cleanup:
+    if (lpMachineNameW != NULL)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpMachineNameW);
+    }
+    if (lpDeviceIDW != NULL)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpDeviceIDW);
+    }
+
+    return Ret;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DevicePropertiesExA
+ *
+ * DESCRIPTION
+ *   Invokes the extended device properties dialog
+ *
+ * ARGUMENTS
+ *   hWndParent:    Handle to the parent window
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   lpDeviceID:    Specifies the device whose properties are to be shown, optional if
+ *                  bShowDevMgr is nonzero
+ *   dwFlags:       This parameter can be a combination of the following flags:
+ *                  * DPF_DEVICE_STATUS_ACTION: Only valid if bShowDevMgr, causes
+ *                                              the default device status action button
+ *                                              to be clicked (Troubleshoot, Enable
+ *                                              Device, etc)
+ *   bShowDevMgr:   If non-zero it displays the device manager instead of
+ *                  the advanced device property dialog
+ *
+ * RETURN VALUE
+ *   1:  if bShowDevMgr is non-zero and no error occured
+ *   -1: a call to GetLastError returns 0 if successful
+ *
+ * @implemented
+ */
+INT_PTR
+WINAPI
+DevicePropertiesExA(IN HWND hWndParent  OPTIONAL,
+                    IN LPCSTR lpMachineName  OPTIONAL,
+                    IN LPCSTR lpDeviceID  OPTIONAL,
+                    IN DWORD dwFlags  OPTIONAL,
+                    IN BOOL bShowDevMgr)
+{
+    LPWSTR lpMachineNameW = NULL;
+    LPWSTR lpDeviceIDW = NULL;
+    INT_PTR Ret = -1;
+
+    if (lpMachineName != NULL)
+    {
+        if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName,
+                                                         CP_ACP)))
+        {
+            goto Cleanup;
+        }
+    }
+    if (lpDeviceID != NULL)
+    {
+        if (!(lpDeviceIDW = ConvertMultiByteToUnicode(lpDeviceID,
+                                                      CP_ACP)))
+        {
+            goto Cleanup;
+        }
+    }
+
+    Ret = DevicePropertiesExW(hWndParent,
+                              lpMachineNameW,
+                              lpDeviceIDW,
+                              dwFlags,
+                              bShowDevMgr);
+
+Cleanup:
+    if (lpMachineNameW != NULL)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpMachineNameW);
+    }
+    if (lpDeviceIDW != NULL)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpDeviceIDW);
+    }
+
+    return Ret;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DevicePropertiesExW
+ *
+ * DESCRIPTION
+ *   Invokes the extended device properties dialog
+ *
+ * ARGUMENTS
+ *   hWndParent:    Handle to the parent window
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   lpDeviceID:    Specifies the device whose properties are to be shown, optional if
+ *                  bShowDevMgr is nonzero
+ *   dwFlags:       This parameter can be a combination of the following flags:
+ *                  * DPF_DEVICE_STATUS_ACTION: Only valid if bShowDevMgr, causes
+ *                                              the default device status action button
+ *                                              to be clicked (Troubleshoot, Enable
+ *                                              Device, etc)
+ *   bShowDevMgr:   If non-zero it displays the device manager instead of
+ *                  the advanced device property dialog
+ *
+ * RETURN VALUE
+ *   1:  if bShowDevMgr is non-zero and no error occured
+ *   -1: a call to GetLastError returns 0 if successful
+ *
+ * @implemented
+ */
+INT_PTR
+WINAPI
+DevicePropertiesExW(IN HWND hWndParent  OPTIONAL,
+                    IN LPCWSTR lpMachineName  OPTIONAL,
+                    IN LPCWSTR lpDeviceID  OPTIONAL,
+                    IN DWORD dwFlags  OPTIONAL,
+                    IN BOOL bShowDevMgr)
+{
+    INT_PTR Ret = -1;
+
+    if (dwFlags & ~(DPF_EXTENDED | DPF_DEVICE_STATUS_ACTION))
+    {
+        FIXME("DevPropertiesExW: Invalid flags: 0x%x\n",
+                dwFlags & ~(DPF_EXTENDED | DPF_DEVICE_STATUS_ACTION));
+        SetLastError(ERROR_INVALID_FLAGS);
+        return -1;
+    }
+
+    if (bShowDevMgr)
+    {
+        FIXME("DevPropertiesExW doesn't support bShowDevMgr!\n");
+        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    }
+    else
+    {
+        HDEVINFO hDevInfo;
+        SP_DEVINFO_DATA DevInfoData;
+        HINSTANCE hComCtl32;
+
+        if (lpDeviceID == NULL)
+        {
+            SetLastError(ERROR_INVALID_PARAMETER);
+            return -1;
+        }
+
+        /* dynamically load comctl32 */
+        hComCtl32 = LoadAndInitComctl32();
+        if (hComCtl32 != NULL)
+        {
+            hDevInfo = SetupDiCreateDeviceInfoListEx(NULL,
+                                                     hWndParent,
+                                                     lpMachineName,
+                                                     NULL);
+            if (hDevInfo != INVALID_HANDLE_VALUE)
+            {
+                DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+                if (SetupDiOpenDeviceInfo(hDevInfo,
+                                          lpDeviceID,
+                                          hWndParent,
+                                          0,
+                                          &DevInfoData))
+                {
+                    Ret = DisplayDeviceAdvancedProperties(hWndParent,
+                                                          lpDeviceID,
+                                                          hDevInfo,
+                                                          &DevInfoData,
+                                                          hComCtl32,
+                                                          lpMachineName,
+                                                          dwFlags);
+                }
+
+                SetupDiDestroyDeviceInfoList(hDevInfo);
+            }
+
+            FreeLibrary(hComCtl32);
+        }
+    }
+
+    return Ret;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DevicePropertiesA
+ *
+ * DESCRIPTION
+ *   Invokes the device properties dialog directly
+ *
+ * ARGUMENTS
+ *   hWndParent:    Handle to the parent window
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   lpDeviceID:    Specifies the device whose properties are to be shown
+ *   bShowDevMgr:   If non-zero it displays the device manager instead of
+ *                  the device property dialog
+ *
+ * RETURN VALUE
+ *   >=0: if no errors occured
+ *   -1:  if errors occured
+ *
+ * REVISIONS
+ *
+ * @implemented
+ */
+int
+WINAPI
+DevicePropertiesA(HWND hWndParent,
+                  LPCSTR lpMachineName,
+                  LPCSTR lpDeviceID,
+                  BOOL bShowDevMgr)
+{
+    return DevicePropertiesExA(hWndParent,
+                               lpMachineName,
+                               lpDeviceID,
+                               DPF_EXTENDED,
+                               bShowDevMgr);
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DevicePropertiesW
+ *
+ * DESCRIPTION
+ *   Invokes the device properties dialog directly
+ *
+ * ARGUMENTS
+ *   hWndParent:    Handle to the parent window
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   lpDeviceID:    Specifies the device whose properties are to be shown
+ *   bShowDevMgr:   If non-zero it displays the device manager instead of
+ *                  the device property dialog
+ *
+ * RETURN VALUE
+ *   >=0: if no errors occured
+ *   -1:  if errors occured
+ *
+ * REVISIONS
+ *
+ * @implemented
+ */
+int
+WINAPI
+DevicePropertiesW(HWND hWndParent,
+                  LPCWSTR lpMachineName,
+                  LPCWSTR lpDeviceID,
+                  BOOL bShowDevMgr)
+{
+    return DevicePropertiesExW(hWndParent,
+                               lpMachineName,
+                               lpDeviceID,
+                               DPF_EXTENDED,
+                               bShowDevMgr);
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceProperties_RunDLLA
+ *
+ * DESCRIPTION
+ *   Invokes the device properties dialog
+ *
+ * ARGUMENTS
+ *   hWndParent:  Handle to the parent window
+ *   hInst:       Handle to the application instance
+ *   lpDeviceCmd: A command that includes the DeviceID of the properties to be shown,
+ *                also see NOTEs
+ *   nCmdShow:    Specifies how the window should be shown
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ * NOTE
+ *   - lpDeviceCmd is a string in the form of "/MachineName MACHINE /DeviceID DEVICEPATH"
+ *     (/MachineName is optional). This function only parses this string and eventually
+ *     calls DeviceProperties().
+ *
+ * @implemented
+ */
+VOID
+WINAPI
+DeviceProperties_RunDLLA(HWND hWndParent,
+                         HINSTANCE hInst,
+                         LPCSTR lpDeviceCmd,
+                         int nCmdShow)
+{
+    LPWSTR lpDeviceCmdW = NULL;
+
+    if (lpDeviceCmd != NULL)
+    {
+        if ((lpDeviceCmdW = ConvertMultiByteToUnicode(lpDeviceCmd,
+                                                      CP_ACP)))
+        {
+            DeviceProperties_RunDLLW(hWndParent,
+                                     hInst,
+                                     lpDeviceCmdW,
+                                     nCmdShow);
+        }
+    }
+
+    if (lpDeviceCmdW != NULL)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpDeviceCmdW);
+    }
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceProperties_RunDLLW
+ *
+ * DESCRIPTION
+ *   Invokes the device properties dialog
+ *
+ * ARGUMENTS
+ *   hWndParent:  Handle to the parent window
+ *   hInst:       Handle to the application instance
+ *   lpDeviceCmd: A command that includes the DeviceID of the properties to be shown,
+ *                also see NOTEs
+ *   nCmdShow:    Specifies how the window should be shown
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ * NOTE
+ *   - lpDeviceCmd is a string in the form of "/MachineName MACHINE /DeviceID DEVICEPATH"
+ *     (/MachineName is optional). This function only parses this string and eventually
+ *     calls DeviceProperties().
+ *
+ * @implemented
+ */
+VOID
+WINAPI
+DeviceProperties_RunDLLW(HWND hWndParent,
+                         HINSTANCE hInst,
+                         LPCWSTR lpDeviceCmd,
+                         int nCmdShow)
+{
+    WCHAR szDeviceID[MAX_DEVICE_ID_LEN+1];
+    WCHAR szMachineName[MAX_COMPUTERNAME_LENGTH+1];
+    LPWSTR lpString = (LPWSTR)lpDeviceCmd;
+
+    if (!GetDeviceAndComputerName(lpString,
+                                  szDeviceID,
+                                  szMachineName))
+    {
+        ERR("DeviceProperties_RunDLLW DeviceID: %S, MachineName: %S\n", szDeviceID, szMachineName);
+        return;
+    }
+
+    DevicePropertiesW(hWndParent,
+                      szMachineName,
+                      szDeviceID,
+                      FALSE);
+}
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/ClassNode.cpp b/reactos/dll/win32/devmgr_new/devmgmt/ClassNode.cpp
new file mode 100644 (file)
index 0000000..249925c
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+* PROJECT:     ReactOS Device Manager
+* LICENSE:     GPL - See COPYING in the top level directory
+* FILE:        dll/win32/devmgr/devmgr/ClassNode.cpp
+* PURPOSE:     Class object for 
+* COPYRIGHT:   Copyright 2015 Ged Murphy <gedmurphy@reactos.org>
+*
+*/
+
+#include "stdafx.h"
+#include "devmgmt.h"
+#include "ClassNode.h"
+
+
+CClassNode::CClassNode(
+    _In_ LPGUID ClassGuid,
+    _In_ PSP_CLASSIMAGELIST_DATA ImageListData
+    ) :
+    CNode(ClassNode, ImageListData)
+{
+    CopyMemory(&m_ClassGuid, ClassGuid, sizeof(GUID));
+}
+
+
+CClassNode::~CClassNode()
+{
+}
+
+
+bool
+CClassNode::SetupNode()
+{
+    DWORD RequiredSize, Type, Size;
+    DWORD Success;
+    HKEY hKey;
+
+    // Open the registry key for this class
+    hKey = SetupDiOpenClassRegKeyExW(&m_ClassGuid,
+                                     MAXIMUM_ALLOWED,
+                                     DIOCR_INSTALLER,
+                                     NULL,
+                                     0);
+    if (hKey != INVALID_HANDLE_VALUE)
+    {
+        Size = DISPLAY_NAME_LEN;
+        Type = REG_SZ;
+
+        // Lookup the class description (win7+)
+        Success = RegQueryValueExW(hKey,
+                                   L"ClassDesc",
+                                   NULL,
+                                   &Type,
+                                   (LPBYTE)m_DisplayName,
+                                   &Size);
+        if (Success == ERROR_SUCCESS)
+        {
+            // Check if the string starts with an @
+            if (m_DisplayName[0] == L'@')
+            {
+                // The description is located in a module resource
+                Success = ConvertResourceDescriptorToString(m_DisplayName, DISPLAY_NAME_LEN);
+            }
+        }
+        else if (Success == ERROR_FILE_NOT_FOUND)
+        {
+            // WinXP stores the description in the default value
+            Success = RegQueryValueExW(hKey,
+                                       NULL,
+                                       NULL,
+                                       &Type,
+                                       (LPBYTE)m_DisplayName,
+                                       &Size);
+        }
+
+        // Close the registry key
+        RegCloseKey(hKey);
+    }
+    else
+    {
+        Success = GetLastError();
+    }
+
+    // Check if we failed to get the class description
+    if (Success != ERROR_SUCCESS)
+    {
+        // Use the class name as the description
+        RequiredSize = DISPLAY_NAME_LEN;
+        (VOID)SetupDiClassNameFromGuidW(&m_ClassGuid,
+                                        m_DisplayName,
+                                        RequiredSize,
+                                        &RequiredSize);
+    }
+
+    // Get the image index for this class
+    (VOID)SetupDiGetClassImageIndex(m_ImageListData,
+                                    &m_ClassGuid,
+                                    &m_ClassImage);
+
+    return true;
+}
+
+
+DWORD
+CClassNode::ConvertResourceDescriptorToString(
+    _Inout_z_ LPWSTR ResourceDescriptor,
+    _In_ DWORD ResourceDescriptorSize
+    )
+{
+    WCHAR ModulePath[MAX_PATH];
+    WCHAR ResString[256];
+    INT ResourceId;
+    HMODULE hModule;
+    LPWSTR ptr;
+    DWORD Size;
+    DWORD dwError;
+
+
+    // First check for a semi colon */
+    ptr = wcschr(ResourceDescriptor, L';');
+    if (ptr)
+    {
+        // This must be an inf based descriptor, the desc is after the semi colon
+        StringCbCopyW(ResourceDescriptor, ResourceDescriptorSize, ++ptr);
+        dwError = ERROR_SUCCESS;
+    }
+    else
+    {
+        // This must be a dll resource based descriptor. Find the comma
+        ptr = wcschr(ResourceDescriptor, L',');
+        if (ptr == NULL) return ERROR_INVALID_DATA;
+
+        // Terminate the string where the comma was
+        *ptr = UNICODE_NULL;
+
+        // Expand any environment strings
+        Size = ExpandEnvironmentStringsW(&ResourceDescriptor[1], ModulePath, MAX_PATH);
+        if (Size > MAX_PATH) return ERROR_BUFFER_OVERFLOW;
+        if (Size == 0) return GetLastError();
+
+        // Put the comma back and move past it
+        *ptr = L',';
+        ptr++;
+
+        // Load the dll
+        hModule = LoadLibraryExW(ModulePath, NULL, LOAD_LIBRARY_AS_DATAFILE);
+        if (hModule == NULL) return GetLastError();
+
+        // Convert the resource id to a number
+        ResourceId = _wtoi(ptr);
+
+        // If the number is negative, make it positive
+        if (ResourceId < 0) ResourceId = -ResourceId;
+
+        // Load the string from the dll
+        if (LoadStringW(hModule, ResourceId, ResString, 256))
+        {
+            StringCbCopyW(ResourceDescriptor, ResourceDescriptorSize, ResString);
+            dwError = ERROR_SUCCESS;
+        }
+        else
+        {
+            dwError = GetLastError();
+        }
+
+        // Free the library
+        FreeLibrary(hModule);
+    }
+
+    return dwError;
+}
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/ClassNode.h b/reactos/dll/win32/devmgr_new/devmgmt/ClassNode.h
new file mode 100644 (file)
index 0000000..39db56b
--- /dev/null
@@ -0,0 +1,24 @@
+#pragma once
+#include "Node.h"
+
+class CClassNode : public CNode
+{
+public:
+
+    CClassNode(
+        _In_ LPGUID ClassGuid,
+        _In_ PSP_CLASSIMAGELIST_DATA ImageListData
+        );
+
+    ~CClassNode();
+
+    virtual bool SetupNode();
+
+private:
+
+    DWORD ConvertResourceDescriptorToString(
+        _Inout_z_ LPWSTR ResourceDescriptor,
+        _In_ DWORD ResourceDescriptorSize
+        );
+};
+
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/DeviceNode.cpp b/reactos/dll/win32/devmgr_new/devmgmt/DeviceNode.cpp
new file mode 100644 (file)
index 0000000..b15ce5a
--- /dev/null
@@ -0,0 +1,456 @@
+/*
+* PROJECT:     ReactOS Device Manager
+* LICENSE:     GPL - See COPYING in the top level directory
+* FILE:        dll/win32/devmgr/devmgr/ClassNode.cpp
+* PURPOSE:     Class object for
+* COPYRIGHT:   Copyright 2015 Ged Murphy <gedmurphy@reactos.org>
+*
+*/
+
+#include "stdafx.h"
+#include "devmgmt.h"
+#include "DeviceNode.h"
+
+
+CDeviceNode::CDeviceNode(
+    _In_opt_ DEVINST Device,
+    _In_ PSP_CLASSIMAGELIST_DATA ImageListData
+    ) :
+    CNode(DeviceNode, ImageListData),
+    m_DevInst(Device),
+    m_hDevInfo(NULL),
+    m_Status(0),
+    m_ProblemNumber(0),
+    m_OverlayImage(0)
+{
+    ZeroMemory(&m_DevinfoData, sizeof(SP_DEVINFO_DATA));
+}
+
+CDeviceNode::~CDeviceNode()
+{
+    Cleanup();
+}
+
+bool
+CDeviceNode::SetupNode()
+{
+    WCHAR ClassGuidString[MAX_GUID_STRING_LEN];
+    ULONG ulLength;
+    CONFIGRET cr;
+
+    // Get the length of the device id string
+    cr = CM_Get_Device_ID_Size(&ulLength, m_DevInst, 0);
+    if (cr == CR_SUCCESS)
+    {
+        // We alloc heap here because this will be stored in the lParam of the TV
+        m_DeviceId = new WCHAR[ulLength + 1];
+
+        // Now get the actual device id
+        cr = CM_Get_Device_IDW(m_DevInst,
+                                m_DeviceId,
+                                ulLength + 1,
+                                0);
+        if (cr != CR_SUCCESS)
+        {
+            delete[] m_DeviceId;
+            m_DeviceId = NULL;
+        }
+
+    }
+
+    // Make sure we got the string
+    if (m_DeviceId == NULL)
+        return false;
+
+    // Build up a handle a and devinfodata struct
+    m_hDevInfo = SetupDiCreateDeviceInfoListExW(NULL,
+                                                NULL,
+                                                NULL,
+                                                NULL);
+    if (m_hDevInfo != INVALID_HANDLE_VALUE)
+    {
+        m_DevinfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+        SetupDiOpenDeviceInfoW(m_hDevInfo,
+                               m_DeviceId,
+                               NULL,
+                               0,
+                               &m_DevinfoData);
+    }
+
+
+    // Set the overlay if the device has a problem
+    if (HasProblem())
+    {
+        m_OverlayImage = 1;
+    }
+
+    // The disabled overlay takes precidence over the problem overlay
+    if (IsDisabled())
+    {
+        m_OverlayImage = 2;
+    }
+
+
+    // Get the class guid for this device
+    ulLength = MAX_GUID_STRING_LEN * sizeof(WCHAR);
+    cr = CM_Get_DevNode_Registry_PropertyW(m_DevInst,
+                                           CM_DRP_CLASSGUID,
+                                           NULL,
+                                           ClassGuidString,
+                                           &ulLength,
+                                           0);
+    if (cr == CR_SUCCESS)
+    {
+        // Convert the string to a proper guid
+        CLSIDFromString(ClassGuidString, &m_ClassGuid);
+    }
+    else
+    {
+        // It's a device with no driver
+        m_ClassGuid = GUID_DEVCLASS_UNKNOWN;
+    }
+
+
+    // Get the image for the class this device is in
+    SetupDiGetClassImageIndex(m_ImageListData,
+                              &m_ClassGuid,
+                              &m_ClassImage);
+
+    // Get the description for the device
+    ulLength = DISPLAY_NAME_LEN * sizeof(WCHAR);
+    cr = CM_Get_DevNode_Registry_PropertyW(m_DevInst,
+                                           CM_DRP_FRIENDLYNAME,
+                                           NULL,
+                                           m_DisplayName,
+                                           &ulLength,
+                                           0);
+    if (cr != CR_SUCCESS)
+    {
+        ulLength = DISPLAY_NAME_LEN * sizeof(WCHAR);
+        cr = CM_Get_DevNode_Registry_PropertyW(m_DevInst,
+                                               CM_DRP_DEVICEDESC,
+                                               NULL,
+                                               m_DisplayName,
+                                               &ulLength,
+                                               0);
+
+    }
+
+    // Cleanup if something failed
+    if (cr != CR_SUCCESS)
+    {
+        Cleanup();
+        return false;
+    }
+
+    return true;
+}
+
+bool
+CDeviceNode::HasProblem()
+{
+    CONFIGRET cr;
+    cr = CM_Get_DevNode_Status_Ex(&m_Status,
+                                  &m_ProblemNumber,
+                                  m_DevInst,
+                                  0,
+                                  NULL);
+    if (cr == CR_SUCCESS)
+    {
+        return ((m_Status & (DN_HAS_PROBLEM | DN_PRIVATE_PROBLEM)) != 0);
+    }
+
+    return false;
+}
+
+bool
+CDeviceNode::IsHidden()
+{
+    CONFIGRET cr;
+    cr = CM_Get_DevNode_Status_Ex(&m_Status,
+                                  &m_ProblemNumber,
+                                  m_DevInst,
+                                  0,
+                                  NULL);
+    if (cr == CR_SUCCESS)
+    {
+        return ((m_Status & DN_NO_SHOW_IN_DM) != 0);
+    }
+
+    return false;
+}
+
+bool
+CDeviceNode::CanDisable()
+{
+    CONFIGRET cr;
+    cr = CM_Get_DevNode_Status_Ex(&m_Status,
+                                  &m_ProblemNumber,
+                                  m_DevInst,
+                                  0,
+                                  NULL);
+    if (cr == CR_SUCCESS)
+    {
+        return ((m_Status & DN_DISABLEABLE) != 0);
+    }
+
+    return false;
+}
+
+bool
+CDeviceNode::IsDisabled()
+{
+    CONFIGRET cr;
+    cr = CM_Get_DevNode_Status_Ex(&m_Status,
+                                  &m_ProblemNumber,
+                                  m_DevInst,
+                                  0,
+                                  NULL);
+    if (cr == CR_SUCCESS)
+    {
+        return ((m_ProblemNumber & (CM_PROB_DISABLED | CM_PROB_HARDWARE_DISABLED)) != 0);
+    }
+
+    return false;
+}
+
+bool
+CDeviceNode::IsStarted()
+{
+    CONFIGRET cr;
+    cr = CM_Get_DevNode_Status_Ex(&m_Status,
+                                  &m_ProblemNumber,
+                                  m_DevInst,
+                                  0,
+                                  NULL);
+    if (cr == CR_SUCCESS)
+    {
+        return ((m_Status & DN_STARTED) != 0);
+    }
+
+    return false;
+}
+
+bool
+CDeviceNode::IsInstalled()
+{
+    CONFIGRET cr;
+    cr = CM_Get_DevNode_Status_Ex(&m_Status,
+                                  &m_ProblemNumber,
+                                  m_DevInst,
+                                  0,
+                                  NULL);
+    if (cr == CR_SUCCESS)
+    {
+        return ((m_Status & DN_HAS_PROBLEM) != 0 ||
+                (m_Status & (DN_DRIVER_LOADED | DN_STARTED)) != 0);
+    }
+
+    return false;
+}
+
+bool
+CDeviceNode::CanUninstall()
+{
+    CONFIGRET cr;
+    cr = CM_Get_DevNode_Status_Ex(&m_Status,
+                                  &m_ProblemNumber,
+                                  m_DevInst,
+                                  0,
+                                  NULL);
+    if (cr == CR_SUCCESS)
+    {
+        if ((m_Status & DN_ROOT_ENUMERATED) != 0 &&
+            (m_Status & DN_DISABLEABLE) == 0)
+                return false;
+    }
+
+    return true;
+}
+
+bool
+CDeviceNode::EnableDevice(
+    _In_ bool Enable,
+    _Out_ bool &NeedsReboot
+    )
+{
+    bool Canceled = false;
+
+    SetFlags(DI_NODI_DEFAULTACTION, 0);
+
+    SP_PROPCHANGE_PARAMS pcp;
+    pcp.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
+    pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
+    pcp.StateChange = (Enable ? DICS_ENABLE : DICS_DISABLE);
+    pcp.HwProfile = 0;
+
+
+    // check both scopes to make sure we can make the change
+    for (int i = 0; i < 2; i++)
+    {
+        // Check globally first, then check config specific
+        pcp.Scope = (i == 0) ? DICS_FLAG_GLOBAL : DICS_FLAG_CONFIGSPECIFIC;
+
+        if (SetupDiSetClassInstallParamsW(m_hDevInfo,
+                                          &m_DevinfoData,
+                                          &pcp.ClassInstallHeader,
+                                          sizeof(SP_PROPCHANGE_PARAMS)))
+        {
+            SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
+                                      m_hDevInfo,
+                                      &m_DevinfoData);
+        }
+
+        if (GetLastError() == ERROR_CANCELLED)
+        {
+            Canceled = true;
+            break;
+        }
+    }
+
+    if (Canceled == false)
+    {
+        pcp.Scope = DICS_FLAG_CONFIGSPECIFIC;
+        if (SetupDiSetClassInstallParamsW(m_hDevInfo,
+                                          &m_DevinfoData,
+                                          &pcp.ClassInstallHeader,
+                                          sizeof(SP_PROPCHANGE_PARAMS)))
+        {
+            SetupDiChangeState(m_hDevInfo, &m_DevinfoData);
+        }
+
+        if (Enable)
+        {
+            // config specific enabling first, then global enabling.
+            // The global appears to be the one that starts the device
+            pcp.Scope = DICS_FLAG_GLOBAL;
+            if (SetupDiSetClassInstallParamsW(m_hDevInfo,
+                                              &m_DevinfoData,
+                                              &pcp.ClassInstallHeader,
+                                              sizeof(SP_PROPCHANGE_PARAMS)))
+            {
+                SetupDiChangeState(m_hDevInfo, &m_DevinfoData);
+            }
+        }
+
+        SetFlags(DI_PROPERTIES_CHANGE, 0);
+
+        NeedsReboot = ((GetFlags() & (DI_NEEDRESTART | DI_NEEDREBOOT)) != 0);
+    }
+
+    RemoveFlags(DI_NODI_DEFAULTACTION, 0);
+
+    return true;
+}
+
+bool
+CDeviceNode::UninstallDevice()
+{
+
+    if (CanUninstall() == false)
+        return false;
+
+    SP_REMOVEDEVICE_PARAMS RemoveDevParams;
+    RemoveDevParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
+    RemoveDevParams.ClassInstallHeader.InstallFunction = DIF_REMOVE;
+    RemoveDevParams.Scope = DI_REMOVEDEVICE_GLOBAL;
+    RemoveDevParams.HwProfile = 0;
+
+    //
+    // We probably need to walk all the siblings of this 
+    // device and ask if they're happy with the uninstall
+    //
+
+
+    // Remove it
+    SetupDiSetClassInstallParamsW(m_hDevInfo,
+                                  &m_DevinfoData,
+                                  &RemoveDevParams.ClassInstallHeader,
+                                  sizeof(SP_REMOVEDEVICE_PARAMS));
+    SetupDiCallClassInstaller(DIF_REMOVE, m_hDevInfo, &m_DevinfoData);
+
+    // Clear the install params
+    SetupDiSetClassInstallParamsW(m_hDevInfo,
+                                  &m_DevinfoData,
+                                  NULL,
+                                  0);
+
+    return true;
+
+}
+
+/* PRIVATE METHODS ******************************************************/
+
+void
+CDeviceNode::Cleanup()
+{
+    if (m_DeviceId)
+    {
+        delete[] m_DeviceId;
+        m_DeviceId = NULL;
+    }
+    if (m_hDevInfo)
+    {
+        SetupDiDestroyDeviceInfoList(m_hDevInfo);
+        m_hDevInfo = NULL;
+    }
+}
+
+DWORD
+CDeviceNode::GetFlags(
+    )
+{
+    SP_DEVINSTALL_PARAMS DevInstallParams;
+    DevInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
+    if (SetupDiGetDeviceInstallParamsW(m_hDevInfo,
+                                       &m_DevinfoData,
+                                       &DevInstallParams))
+    {
+        return DevInstallParams.Flags;
+    }
+    return 0;
+}
+
+bool
+CDeviceNode::SetFlags(
+    _In_ DWORD Flags,
+    _In_ DWORD FlagsEx
+    )
+{
+    SP_DEVINSTALL_PARAMS DevInstallParams;
+    DevInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
+    if (SetupDiGetDeviceInstallParamsW(m_hDevInfo,
+                                       &m_DevinfoData,
+                                       &DevInstallParams))
+    {
+        DevInstallParams.Flags |= Flags;
+        DevInstallParams.FlagsEx |= FlagsEx;
+        return (SetupDiSetDeviceInstallParamsW(m_hDevInfo,
+                                               &m_DevinfoData,
+                                               &DevInstallParams) != 0);
+    }
+    return false;
+}
+
+bool
+CDeviceNode::RemoveFlags(
+    _In_ DWORD Flags,
+    _In_ DWORD FlagsEx
+    )
+{
+    SP_DEVINSTALL_PARAMS DevInstallParams;
+    DevInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
+    if (SetupDiGetDeviceInstallParamsW(m_hDevInfo,
+                                       &m_DevinfoData,
+                                       &DevInstallParams))
+    {
+        DevInstallParams.Flags &= ~Flags;
+        DevInstallParams.FlagsEx &= ~FlagsEx;
+        return (SetupDiSetDeviceInstallParamsW(m_hDevInfo,
+                                               &m_DevinfoData,
+                                               &DevInstallParams) != 0);
+    }
+    return false;
+}
+
+
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/DeviceNode.h b/reactos/dll/win32/devmgr_new/devmgmt/DeviceNode.h
new file mode 100644 (file)
index 0000000..e03eaf1
--- /dev/null
@@ -0,0 +1,61 @@
+#pragma once
+#include "Node.h"
+
+class CDeviceNode : public CNode
+{
+private:
+    SP_DEVINFO_DATA m_DevinfoData;
+    HDEVINFO m_hDevInfo;
+    DEVINST m_DevInst;
+    ULONG m_Status;
+    ULONG m_ProblemNumber;
+    int m_OverlayImage;
+
+public:
+    CDeviceNode(
+        _In_opt_ DEVINST Device,
+        _In_ PSP_CLASSIMAGELIST_DATA ImageListData
+        );
+
+    ~CDeviceNode();
+
+    virtual bool SetupNode();
+
+    DEVINST GetDeviceInst() { return m_DevInst; }
+    int GetOverlayImage() { return m_OverlayImage; }
+
+    bool HasProblem();
+    bool IsHidden();
+    bool CanDisable();
+    virtual bool IsDisabled();
+    bool IsStarted();
+    bool IsInstalled();
+    bool CanUninstall();
+    virtual bool CanUpdate() { return true; } // unimplemented
+
+    bool EnableDevice(
+        _In_ bool Enable,
+        _Out_ bool &NeedsReboot
+        );
+
+    bool UninstallDevice(
+        );
+
+private:
+    void Cleanup(
+        );
+
+    bool SetFlags(
+        _In_ DWORD Flags,
+        _In_ DWORD FlagsEx
+        );
+
+    bool RemoveFlags(
+        _In_ DWORD Flags,
+        _In_ DWORD FlagsEx
+        );
+
+    DWORD GetFlags(
+        );
+};
+
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/DeviceView.cpp b/reactos/dll/win32/devmgr_new/devmgmt/DeviceView.cpp
new file mode 100644 (file)
index 0000000..ba6cae9
--- /dev/null
@@ -0,0 +1,1163 @@
+/*
+ * PROJECT:     ReactOS Device Manager
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        dll/win32/devmgr/devmgr/DeviceView.cpp
+ * PURPOSE:     Implements the tree view which contains the devices
+ * COPYRIGHT:   Copyright 2015 Ged Murphy <gedmurphy@reactos.org>
+ */
+
+
+
+#include "stdafx.h"
+#include "devmgmt.h"
+#include "DeviceView.h"
+
+
+// DATA ********************************************/
+
+#define CLASS_NAME_LEN      256
+#define CLASS_DESC_LEN      256
+#define ROOT_NAME_SIZE      MAX_COMPUTERNAME_LENGTH + 1
+
+extern "C" {
+INT_PTR
+WINAPI
+DevicePropertiesExW(
+    IN HWND hWndParent OPTIONAL,
+    IN LPCWSTR lpMachineName OPTIONAL,
+    IN LPCWSTR lpDeviceID OPTIONAL,
+    IN DWORD dwFlags OPTIONAL,
+    IN BOOL bShowDevMgr
+);
+}
+typedef INT_PTR(WINAPI *pDevicePropertiesExW)(HWND,LPCWSTR,LPCWSTR,DWORD,BOOL);
+
+struct RefreshThreadData
+{
+    CDeviceView *This;
+    BOOL ScanForChanges;
+    BOOL UpdateView;
+    LPWSTR DeviceId;
+};
+
+
+// PUBLIC METHODS ************************************/
+
+CDeviceView::CDeviceView(
+    HWND hMainWnd
+    ) :
+    m_hMainWnd(hMainWnd),
+    m_hTreeView(NULL),
+    m_hPropertyDialog(NULL),
+    m_hMenu(NULL),
+    m_ViewType(DevicesByType),
+    m_ShowHidden(FALSE),
+    m_RootNode(NULL)
+{
+    ZeroMemory(&m_ImageListData, sizeof(SP_CLASSIMAGELIST_DATA));
+}
+
+CDeviceView::~CDeviceView(void)
+{
+}
+
+bool
+CDeviceView::Initialize()
+{
+    // Get the device image list
+    m_ImageListData.cbSize = sizeof(SP_CLASSIMAGELIST_DATA);
+    BOOL bSuccess = SetupDiGetClassImageList(&m_ImageListData);
+    if (bSuccess == FALSE) return false;
+
+    // Create the main treeview
+    m_hTreeView = CreateWindowExW(WS_EX_CLIENTEDGE,
+                                  WC_TREEVIEW,
+                                  NULL,
+                                  WS_CHILD | WS_VISIBLE | WS_BORDER | TVS_HASLINES |
+                                  TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_LINESATROOT,
+                                  0, 0, 0, 0,
+                                  m_hMainWnd,
+                                  (HMENU)IDC_TREEVIEW,
+                                  g_hInstance,
+                                  NULL);
+    if (m_hTreeView)
+    {
+        // Set the image list against the treeview
+        (void)TreeView_SetImageList(m_hTreeView,
+                                    m_ImageListData.ImageList,
+                                    TVSIL_NORMAL);
+
+        // Give the treeview arrows instead of +/- boxes (on Win7)
+        SetWindowTheme(m_hTreeView, L"explorer", NULL);
+    }
+
+
+
+    return !!(m_hTreeView);
+}
+
+bool
+CDeviceView::Uninitialize()
+{
+    EmptyDeviceView();
+
+    if (m_ImageListData.ImageList != NULL)
+    {
+        SetupDiDestroyClassImageList(&m_ImageListData);
+        ZeroMemory(&m_ImageListData, sizeof(SP_CLASSIMAGELIST_DATA));
+    }
+
+    return true;
+}
+
+LRESULT
+CDeviceView::OnSize(
+    _In_ int x,
+    _In_ int y,
+    _In_ int cx,
+    _In_ int cy
+    )
+{
+    // Resize the treeview
+    SetWindowPos(m_hTreeView,
+                 NULL,
+                 x,
+                 y,
+                 cx,
+                 cy,
+                 SWP_NOZORDER);
+
+    return 0;
+}
+
+LRESULT
+CDeviceView::OnRightClick(
+    _In_ LPNMHDR NmHdr
+    )
+{
+    HTREEITEM hItem = TreeView_GetNextItem(NmHdr->hwndFrom, 0, TVGN_DROPHILITE);
+    if (hItem)
+    {
+        TreeView_SelectItem(NmHdr->hwndFrom, hItem);
+    }
+
+    return 0;
+}
+
+LRESULT
+CDeviceView::OnContextMenu(
+    _In_ LPARAM lParam
+    )
+{
+    HTREEITEM hSelected = TreeView_GetSelection(m_hTreeView);
+
+    RECT rc;
+    if (TreeView_GetItemRect(m_hTreeView,
+                             hSelected,
+                             &rc,
+                             TRUE))
+    {
+        POINT pt;
+        if (GetCursorPos(&pt) &&
+            ScreenToClient(m_hTreeView, &pt) &&
+            PtInRect(&rc, pt))
+        {
+            CNode *Node = GetSelectedNode();
+            if (Node)
+            {
+                // Create the context menu
+                HMENU hContextMenu = CreatePopupMenu();
+
+                // Add the actions for this node
+                BuildActionMenuForNode(hContextMenu, Node, false);
+
+                INT xPos = GET_X_LPARAM(lParam);
+                INT yPos = GET_Y_LPARAM(lParam);
+
+                // Display the menu
+                TrackPopupMenuEx(hContextMenu,
+                                 TPM_RIGHTBUTTON,
+                                 xPos,
+                                 yPos,
+                                 m_hMainWnd,
+                                 NULL);
+
+                DestroyMenu(hContextMenu);
+            }
+        }
+    }
+
+    return 0;
+}
+
+
+void
+CDeviceView::Refresh(
+    _In_ ViewType Type,
+    _In_ bool ScanForChanges,
+    _In_ bool UpdateView,
+    _In_opt_ LPWSTR DeviceId
+    )
+{
+    // Enum devices on a seperate thread to keep the gui responsive
+
+    m_ViewType = Type;
+
+    RefreshThreadData *ThreadData;
+    ThreadData = new RefreshThreadData();
+    ThreadData->This = this;
+    ThreadData->ScanForChanges = ScanForChanges;
+    ThreadData->UpdateView = UpdateView;
+    ThreadData->DeviceId = NULL;
+
+    if (DeviceId)
+    {
+        // Node gets deleted on refresh so we copy it to another block
+        size_t Length = wcslen(DeviceId) + 1;
+        ThreadData->DeviceId = new WCHAR[Length];
+        StringCbCopyW(ThreadData->DeviceId, Length, DeviceId);
+    }
+
+
+    HANDLE hThread;
+    hThread = (HANDLE)_beginthreadex(NULL,
+                                     0,
+                                     &RefreshThread,
+                                     ThreadData,
+                                     0,
+                                     NULL);
+
+    if (hThread) CloseHandle(hThread);
+}
+
+LRESULT
+CDeviceView::OnAction(
+    _In_ UINT Action
+)
+{
+    switch (Action)
+    {
+        case IDC_PROPERTIES:
+        {
+            DisplayPropertySheet();
+            break;
+        }
+
+        case IDC_SCAN_HARDWARE:
+        {
+            Refresh(GetCurrentView(),
+                    true,
+                    true,
+                    NULL);
+            break;
+        }
+
+        case IDC_ENABLE_DRV:
+        {
+            bool NeedsReboot;
+            if (EnableSelectedDevice(true, NeedsReboot) &&
+                NeedsReboot)
+            {
+                MessageBox(m_hMainWnd, L"Rebooting", L"Enable", MB_OK);
+            }
+            break;
+        }
+
+        case IDC_DISABLE_DRV:
+        {
+            bool NeedsReboot;
+            EnableSelectedDevice(false, NeedsReboot);
+            break;
+        }
+
+        case IDC_UPDATE_DRV:
+        {
+            MessageBox(m_hMainWnd, L"Not yet implemented", L"Update Driver", MB_OK);
+            break;
+        }
+
+        case IDC_UNINSTALL_DRV:
+        {
+            UninstallSelectedDevice();
+            break;
+        }
+
+        case IDC_ADD_HARDWARE:
+        {
+            MessageBox(m_hMainWnd, L"Not yet implemented", L"Add Hardware", MB_OK);
+            break;
+        }
+    }
+
+    return 0;
+}
+
+void
+CDeviceView::DisplayPropertySheet()
+{
+    //
+    // In ReactOS we can link to DevicePropertiesEx but
+    // not in windows as it's not part of the SDK 
+
+#ifndef __REACTOS__
+    HMODULE hModule = LoadLibraryW(L"devmgr.dll");
+    if (hModule == NULL) return;
+
+    pDevicePropertiesExW DevicePropertiesExW;
+    DevicePropertiesExW = (pDevicePropertiesExW)GetProcAddress(hModule,
+                                                               "DevicePropertiesExW");
+    if (DevicePropertiesExW == NULL)
+    {
+        FreeLibrary(hModule);
+        return;
+    }
+#endif
+
+    CNode *Node = GetSelectedNode();
+    if (Node && Node->HasProperties())
+    {
+        DevicePropertiesExW(m_hTreeView,
+                            NULL,
+                            Node->GetDeviceId(),
+                            1,//DPF_EXTENDED,
+                            FALSE);
+    }
+
+#ifndef __REACTOS__
+    FreeLibrary(hModule);
+#endif
+}
+
+void
+CDeviceView::SetFocus()
+{
+}
+
+bool
+CDeviceView::CreateActionMenu(
+    _In_ HMENU OwnerMenu,
+    _In_ bool MainMenu
+    )
+{
+    CNode *Node = GetSelectedNode();
+    if (Node)
+    {
+        BuildActionMenuForNode(OwnerMenu, Node, MainMenu);
+        return true;
+    }
+
+    return false;
+}
+
+CNode*
+CDeviceView::GetSelectedNode()
+{
+    TV_ITEM TvItem;
+    TvItem.hItem = TreeView_GetSelection(m_hTreeView);
+    return GetNode(&TvItem);
+}
+
+
+
+// PRIVATE METHODS *******************************************/
+
+bool
+CDeviceView::AddRootDevice()
+{
+    m_hTreeRoot = InsertIntoTreeView(NULL, m_RootNode);
+    return (m_hTreeRoot != NULL);
+}
+
+bool
+CDeviceView::GetNextClass(
+    _In_ ULONG ClassIndex,
+    _Out_ LPGUID ClassGuid,
+    _Out_ HDEVINFO *hDevInfo
+    )
+{
+    CONFIGRET cr;
+
+    // Get the next class in the list
+    cr = CM_Enumerate_Classes(ClassIndex,
+                              ClassGuid,
+                              0);
+    if (cr != CR_SUCCESS) return false;
+
+    // Check if this is the unknown class
+    if (IsEqualGUID(*ClassGuid, GUID_DEVCLASS_UNKNOWN))
+    {
+        // Get device info for all devices
+        *hDevInfo = SetupDiGetClassDevsW(NULL,
+                                         NULL,
+                                         NULL,
+                                         DIGCF_ALLCLASSES);
+    }
+    else
+    {
+        // We only want the devices for this class
+        *hDevInfo = SetupDiGetClassDevsW(ClassGuid,
+                                         NULL,
+                                         NULL,
+                                         DIGCF_PRESENT);
+    }
+
+    return (hDevInfo != INVALID_HANDLE_VALUE);
+}
+
+unsigned int __stdcall CDeviceView::RefreshThread(void *Param)
+{
+    RefreshThreadData *ThreadData = (RefreshThreadData *)Param;
+    CDeviceView *This = ThreadData->This;
+
+
+    // Empty the treeview
+    This->EmptyDeviceView();
+    This->m_hTreeRoot = NULL;
+
+    // Refresh the devices only if requested. This means
+    // switching views uses the cache and remains fast
+    if (ThreadData->ScanForChanges)
+    {
+        This->RefreshDeviceList();
+    }
+
+    // display the type of view the user wants
+    switch (This->m_ViewType)
+    {
+        case DevicesByType:
+            (void)This->ListDevicesByType();
+            break;
+
+        case DevicesByConnection:
+            (VOID)This->ListDevicesByConnection();
+            break;
+
+        case ResourcesByType:
+            break;
+
+        case ResourcesByConnection:
+            break;
+    }
+
+
+    This->SelectNode(ThreadData->DeviceId);
+
+    if (ThreadData->DeviceId)
+        delete[] ThreadData->DeviceId;
+    delete ThreadData;
+
+    return 0;
+}
+
+
+bool
+CDeviceView::ListDevicesByType()
+{
+    CClassNode *ClassNode;
+    CDeviceNode *DeviceNode;
+    HDEVINFO hDevInfo;
+    HTREEITEM hTreeItem = NULL;
+    GUID ClassGuid;
+    INT ClassIndex;
+    BOOL bClassSuccess, bSuccess;
+
+    // Start by adding the root node to the tree
+    bSuccess = AddRootDevice();
+    if (bSuccess == false) return false;
+
+    ClassIndex = 0;
+    do
+    {
+        // Loop through all the device classes
+        bClassSuccess = GetNextClass(ClassIndex, &ClassGuid, &hDevInfo);
+        if (bClassSuccess)
+        {
+            bool bClassUnknown = false;
+            bool AddedParent = false;
+            INT DeviceIndex = 0;
+            bool MoreItems = false;
+
+            // Get the cached class node
+            ClassNode = GetClassNode(&ClassGuid);
+            if (ClassNode == NULL)
+            {
+                ATLASSERT(FALSE);
+                ClassIndex++;
+                continue;
+            }
+
+            // Set a flag is this is the (special case) unknown class
+            if (IsEqualGUID(ClassGuid, GUID_DEVCLASS_UNKNOWN))
+                bClassUnknown = true;
+
+            do
+            {
+                // Get a handle to all the devices in this class
+                SP_DEVINFO_DATA DeviceInfoData;
+                ZeroMemory(&DeviceInfoData, sizeof(SP_DEVINFO_DATA));
+                DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+                bSuccess = SetupDiEnumDeviceInfo(hDevInfo,
+                                                 DeviceIndex,
+                                                 &DeviceInfoData);
+                if (bSuccess == FALSE && GetLastError() == ERROR_NO_MORE_ITEMS)
+                    MoreItems = false;
+
+                if (bSuccess)
+                {
+                    MoreItems = true;
+
+                    // The unknown class handle contains all devices on the system,
+                    // and we're just looking for the ones with a null GUID
+                    if (bClassUnknown)
+                    {
+                        if (IsEqualGUID(DeviceInfoData.ClassGuid, GUID_NULL) == FALSE)
+                        {
+                            // This is a known device, we aren't interested in it
+                            DeviceIndex++;
+                            continue;
+                        }
+                    }
+
+                    // Get the cached device node
+                    DeviceNode = GetDeviceNode(DeviceInfoData.DevInst);
+                    if (DeviceNode == NULL)
+                    {
+                        ATLASSERT(bClassUnknown == true);
+                        DeviceIndex++;
+                        continue;
+                    }
+
+                    // Check if this is a hidden device
+                    if (DeviceNode->IsHidden())
+                    {
+                        // Ignore this device if we aren't displaying hidden devices
+                        if (m_ShowHidden == FALSE)
+                        {
+                            DeviceIndex++;
+                            continue;
+                        }
+                    }
+
+                    // We have a device, we need to add the parent if it hasn't yet been added
+                    if (AddedParent == false)
+                    {
+                        // Insert the new class under the root item
+                        hTreeItem = InsertIntoTreeView(m_hTreeRoot,
+                                                       ClassNode);
+                        AddedParent = true;
+                    }
+
+                    // Add the device under the class item node
+                    (void)InsertIntoTreeView(hTreeItem, DeviceNode);
+
+                    // Expand the class if it has a problem device
+                    if (DeviceNode->HasProblem())
+                    {
+                        (void)TreeView_Expand(m_hTreeView,
+                                              hTreeItem,
+                                              TVE_EXPAND);
+                    }
+                }
+
+                DeviceIndex++;
+
+            } while (MoreItems);
+
+            // If this class has devices, sort them alphabetically
+            if (AddedParent == true)
+            {
+                (void)TreeView_SortChildren(m_hTreeView,
+                                            hTreeItem,
+                                            0);
+            }
+        }
+
+        ClassIndex++;
+
+    } while (bClassSuccess);
+
+    // Sort the classes alphabetically
+    (void)TreeView_SortChildren(m_hTreeView,
+                                m_hTreeRoot,
+                                0);
+
+    // Expand the root item
+    (void)TreeView_Expand(m_hTreeView,
+                          m_hTreeRoot,
+                          TVE_EXPAND);
+
+    // Pre-select the root item
+    (VOID)TreeView_SelectItem(m_hTreeView,
+                              m_hTreeRoot);
+
+    return 0;
+}
+
+bool
+CDeviceView::ListDevicesByConnection()
+{
+    bool bSuccess;
+
+    // Start by adding the root node to the tree
+    bSuccess = AddRootDevice();
+    if (bSuccess == false) return false;
+
+    // Walk the device tree and add all the devices 
+    (void)RecurseChildDevices(m_RootNode->GetDeviceInst(), m_hTreeRoot);
+
+    // Expand the root item 
+    (void)TreeView_Expand(m_hTreeView,
+                          m_hTreeRoot,
+                          TVE_EXPAND);
+
+    return true;
+}
+
+bool
+CDeviceView::RecurseChildDevices(
+    _In_ DEVINST ParentDevice,
+    _In_ HTREEITEM hParentTreeItem
+    )
+{
+    HTREEITEM hDevItem = NULL;
+    DEVINST Device;
+    bool HasProblem = false;
+    bool bSuccess;
+
+    // Check if the parent has any child devices 
+    if (GetChildDevice(ParentDevice, &Device) == FALSE)
+        return true;
+
+    // Get the cached device node
+    CDeviceNode *DeviceNode;
+    DeviceNode = dynamic_cast<CDeviceNode *>(GetDeviceNode(Device));
+    if (DeviceNode == nullptr)
+    {
+        ATLASSERT(FALSE);
+        return false;
+    }
+
+    // Don't show hidden devices if not requested
+    if ((m_ShowHidden == TRUE) || (!(DeviceNode->IsHidden())))
+    {
+        // Add this device to the tree under its parent 
+        hDevItem = InsertIntoTreeView(hParentTreeItem,
+                                      DeviceNode);
+        if (hDevItem)
+        {
+            // Check if this child has any children itself 
+            if (!RecurseChildDevices(Device, hDevItem))
+                HasProblem = true;
+        }
+
+        if (DeviceNode->HasProblem())
+        {
+            HasProblem = true;
+        }
+    }
+
+
+    // Check for siblings
+    for (;;)
+    {
+        // Check if the parent device has anything at the same level 
+        bSuccess = GetSiblingDevice(Device, &Device);
+        if (bSuccess == FALSE) break;
+
+        DeviceNode = dynamic_cast<CDeviceNode *>(GetDeviceNode(Device));
+        if (DeviceNode == nullptr)
+        {
+            ATLASSERT(FALSE);
+        }
+
+        // Don't show hidden devices if not requested
+        if ((m_ShowHidden == TRUE) || (!(DeviceNode->IsHidden())))
+        {
+            if (DeviceNode->HasProblem())
+            {
+                HasProblem = true;
+            }
+
+            // Add this device to the tree under its parent 
+            hDevItem = InsertIntoTreeView(hParentTreeItem,
+                                          DeviceNode);
+            if (hDevItem)
+            {
+                // Check if this child has any children itself 
+                if (!RecurseChildDevices(Device, hDevItem))
+                    HasProblem = true;
+            }
+        }
+    }
+
+    (void)TreeView_SortChildren(m_hTreeView,
+                                hParentTreeItem,
+                                0);
+
+    // Expand the class if it has a problem device
+    if (HasProblem == true)
+    {
+        (void)TreeView_Expand(m_hTreeView,
+                              hParentTreeItem,
+                              TVE_EXPAND);
+    }
+
+    // If there was a problem, expand the ancestors
+    if (HasProblem) return false;
+
+    return true;
+}
+
+bool
+CDeviceView::EnableSelectedDevice(
+    _In_ bool Enable,
+    _Out_ bool &NeedsReboot
+    )
+{
+    CDeviceNode *Node = dynamic_cast<CDeviceNode *>(GetSelectedNode());
+    if (Node == nullptr) return false;
+
+    if (Enable == false)
+    {
+        CAtlStringW str;
+        if (str.LoadStringW(g_hInstance, IDS_CONFIRM_DISABLE))
+        {
+            if (MessageBoxW(m_hMainWnd,
+                str,
+                Node->GetDisplayName(),
+                MB_YESNO | MB_ICONWARNING | MB_DEFBUTTON2) != IDYES)
+            {
+                return false;
+            }
+        }
+    }
+
+    if (Node->EnableDevice(Enable, NeedsReboot))
+    {
+        Refresh(m_ViewType, true, true, Node->GetDeviceId());
+        return true;
+    }
+
+    return false;
+}
+
+bool
+CDeviceView::UninstallSelectedDevice(
+    )
+{
+    CDeviceNode *Node = dynamic_cast<CDeviceNode *>(GetSelectedNode());
+    if (Node == nullptr) return false;
+
+    return Node->UninstallDevice();
+}
+
+bool
+CDeviceView::GetChildDevice(
+    _In_ DEVINST ParentDevInst,
+    _Out_ PDEVINST DevInst
+)
+{
+    CONFIGRET cr;
+    cr = CM_Get_Child(DevInst,
+                      ParentDevInst,
+                      0);
+    return (cr == CR_SUCCESS);
+}
+
+bool
+CDeviceView::GetSiblingDevice(
+    _In_ DEVINST PrevDevice,
+    _Out_ PDEVINST DevInst
+)
+{
+    CONFIGRET cr;
+    cr = CM_Get_Sibling(DevInst,
+                        PrevDevice,
+                        0);
+    return (cr == CR_SUCCESS);
+}
+
+HTREEITEM
+CDeviceView::InsertIntoTreeView(
+    _In_opt_ HTREEITEM hParent,
+    _In_ CNode *Node
+    )
+{
+    LPWSTR lpLabel;
+    lpLabel = Node->GetDisplayName();
+
+    TV_ITEMW tvi;
+    TV_INSERTSTRUCT tvins;
+    ZeroMemory(&tvi, sizeof(tvi));
+    ZeroMemory(&tvins, sizeof(tvins));
+
+    tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+    tvi.pszText = lpLabel;
+    tvi.cchTextMax = wcslen(lpLabel);
+    tvi.lParam = (LPARAM)Node;
+    tvi.iImage = Node->GetClassImage();
+    tvi.iSelectedImage = Node->GetClassImage();
+
+    // try to cast it to a device node. This will only suceed if it's the correct type
+    CDeviceNode *DeviceNode = dynamic_cast<CDeviceNode *>(Node);
+    if (DeviceNode && DeviceNode->GetOverlayImage())
+    {
+        tvi.mask |= TVIF_STATE;
+        tvi.stateMask = TVIS_OVERLAYMASK;
+        tvi.state = INDEXTOOVERLAYMASK(DeviceNode->GetOverlayImage());
+    }
+
+    tvins.item = tvi;
+    tvins.hParent = hParent;
+
+    return TreeView_InsertItem(m_hTreeView, &tvins);
+}
+
+void
+CDeviceView::BuildActionMenuForNode(
+    _In_ HMENU OwnerMenu,
+    _In_ CNode *Node,
+    _In_ bool MainMenu
+    )
+{
+    // Create a seperator structure 
+    MENUITEMINFOW MenuSeperator = { 0 };
+    MenuSeperator.cbSize = sizeof(MENUITEMINFOW);
+    MenuSeperator.fType = MFT_SEPARATOR;
+
+    // Setup the 
+    MENUITEMINFOW MenuItemInfo = { 0 };
+    MenuItemInfo.cbSize = sizeof(MENUITEMINFOW);
+    MenuItemInfo.fMask = MIIM_ID | MIIM_STRING | MIIM_DATA | MIIM_SUBMENU;
+    MenuItemInfo.fType = MFT_STRING;
+
+    CAtlStringW String;
+    int i = 0;
+
+    // Device nodes have extra data
+    if (Node->GetNodeType() == DeviceNode)
+    {
+        CDeviceNode *DeviceNode = dynamic_cast<CDeviceNode *>(Node);
+
+        if (DeviceNode->CanUpdate())
+        {
+            String.LoadStringW(g_hInstance, IDS_MENU_UPDATE);
+            MenuItemInfo.wID = IDC_UPDATE_DRV;
+            MenuItemInfo.dwTypeData = String.GetBuffer();
+            InsertMenuItemW(OwnerMenu, i, TRUE, &MenuItemInfo);
+            i++;
+        }
+
+        if (DeviceNode->IsDisabled())
+        {
+            String.LoadStringW(g_hInstance, IDS_MENU_ENABLE);
+            MenuItemInfo.wID = IDC_ENABLE_DRV;
+            MenuItemInfo.dwTypeData = String.GetBuffer();
+            InsertMenuItemW(OwnerMenu, i, TRUE, &MenuItemInfo);
+            i++;
+        }
+
+        if (DeviceNode->CanDisable() && !DeviceNode->IsDisabled())
+        {
+            String.LoadStringW(g_hInstance, IDS_MENU_DISABLE);
+            MenuItemInfo.wID = IDC_DISABLE_DRV;
+            MenuItemInfo.dwTypeData = String.GetBuffer();
+            InsertMenuItemW(OwnerMenu, i, TRUE, &MenuItemInfo);
+            i++;
+        }
+
+        if (DeviceNode->CanUninstall())
+        {
+            String.LoadStringW(g_hInstance, IDS_MENU_UNINSTALL);
+            MenuItemInfo.wID = IDC_UNINSTALL_DRV;
+            MenuItemInfo.dwTypeData = String.GetBuffer();
+            InsertMenuItemW(OwnerMenu, i, TRUE, &MenuItemInfo);
+            i++;
+        }
+
+        InsertMenuItemW(OwnerMenu, i, TRUE, &MenuSeperator);
+        i++;
+    }
+
+    // All nodes have the scan option
+    String.LoadStringW(g_hInstance, IDS_MENU_SCAN);
+    MenuItemInfo.wID = IDC_SCAN_HARDWARE;
+    MenuItemInfo.dwTypeData = String.GetBuffer();
+    InsertMenuItemW(OwnerMenu, i, TRUE, &MenuItemInfo);
+    i++;
+
+    if ((Node->GetNodeType() == RootNode) || (MainMenu == true))
+    {
+        String.LoadStringW(g_hInstance, IDS_MENU_ADD);
+        MenuItemInfo.wID = IDC_ADD_HARDWARE;
+        MenuItemInfo.dwTypeData = String.GetBuffer();
+        InsertMenuItemW(OwnerMenu, i, TRUE, &MenuItemInfo);
+        i++;
+    }
+
+    if (Node->HasProperties())
+    {
+        InsertMenuItemW(OwnerMenu, i, TRUE, &MenuSeperator);
+        i++;
+
+        String.LoadStringW(g_hInstance, IDS_MENU_PROPERTIES);
+        MenuItemInfo.wID = IDC_PROPERTIES;
+        MenuItemInfo.dwTypeData = String.GetBuffer();
+        InsertMenuItemW(OwnerMenu, i, TRUE, &MenuItemInfo);
+        i++;
+
+        SetMenuDefaultItem(OwnerMenu, IDC_PROPERTIES, FALSE);
+    }
+}
+
+HTREEITEM
+CDeviceView::RecurseFindDevice(
+    _In_ HTREEITEM hParentItem,
+    _In_ LPWSTR DeviceId
+    )
+{
+    HTREEITEM FoundItem;
+    HTREEITEM hItem;
+    TVITEMW tvItem;
+    CNode *Node;
+
+    // Check if this node has any children
+    hItem = TreeView_GetChild(m_hTreeView, hParentItem);
+    if (hItem == NULL) return NULL;
+
+    // The lParam contains the node pointer data
+    tvItem.hItem = hItem;
+    tvItem.mask = TVIF_PARAM;
+    if (TreeView_GetItem(m_hTreeView, &tvItem) &&
+        tvItem.lParam != NULL)
+    {
+        // check for a matching deviceid
+        Node = reinterpret_cast<CNode *>(tvItem.lParam);
+        if (Node->GetDeviceId() &&
+            (wcscmp(Node->GetDeviceId(), DeviceId) == 0))
+        {
+            return hItem;
+        }
+    }
+
+    // This node may have its own children
+    FoundItem = RecurseFindDevice(hItem, DeviceId);
+    if (FoundItem) return FoundItem;
+
+    // Loop all the siblings
+    for (;;)
+    {
+        // Get the next item at this level
+        hItem = TreeView_GetNextSibling(m_hTreeView, hItem);
+        if (hItem == NULL) break;
+
+        // The lParam contains the node pointer data
+        tvItem.hItem = hItem;
+        tvItem.mask = TVIF_PARAM;
+        if (TreeView_GetItem(m_hTreeView, &tvItem))
+        {
+            // check for a matching deviceid
+            Node = reinterpret_cast<CNode *>(tvItem.lParam);
+            if (Node->GetDeviceId() && 
+                wcscmp(Node->GetDeviceId(), DeviceId) == 0)
+            {
+                return hItem;
+            }
+        }
+
+        // This node may have its own children 
+        FoundItem = RecurseFindDevice(hItem, DeviceId);
+        if (FoundItem) return FoundItem;
+    }
+
+    return hItem;
+}
+
+void
+CDeviceView::SelectNode(
+    _In_ LPWSTR DeviceId
+    )
+{
+    HTREEITEM hRoot, hItem;
+
+    // Check if there are any items in the tree
+    hRoot = TreeView_GetRoot(m_hTreeView);
+    if (hRoot == NULL) return;
+
+    // If we don't want to set select a node, just select root
+    if (DeviceId == NULL)
+    {
+        TreeView_SelectItem(m_hTreeView, hRoot);
+        return;
+    }
+
+    // Scan the tree looking for the node we want
+    hItem = RecurseFindDevice(hRoot, DeviceId);
+    if (hItem)
+    {
+        TreeView_SelectItem(m_hTreeView, hItem);
+        TreeView_Expand(m_hTreeView, hItem, TVM_EXPAND);
+    }
+    else
+    {
+        TreeView_SelectItem(m_hTreeView, hRoot);
+    }
+}
+
+
+void
+CDeviceView::EmptyDeviceView()
+{
+    (VOID)TreeView_DeleteAllItems(m_hTreeView);
+}
+
+
+CClassNode*
+CDeviceView::GetClassNode(
+    _In_ LPGUID ClassGuid
+    )
+{
+    POSITION Pos;
+    CClassNode *Node;
+
+    Pos = m_ClassNodeList.GetHeadPosition();
+
+    do
+    {
+        Node = m_ClassNodeList.GetNext(Pos);
+        if (IsEqualGUID(*Node->GetClassGuid(), *ClassGuid))
+        {
+            //ATLASSERT(Node->GetType() == NodeClass);
+            break;
+        }
+
+        Node = NULL;
+
+    } while (Pos != NULL);
+
+    return Node;
+}
+
+CDeviceNode*
+CDeviceView::GetDeviceNode(
+    _In_ DEVINST Device
+    )
+{
+    POSITION Pos;
+    CDeviceNode *Node;
+
+    Pos = m_DeviceNodeList.GetHeadPosition();
+
+    do
+    {
+        Node = m_DeviceNodeList.GetNext(Pos);
+        if (Node->GetDeviceInst() == Device)
+        {
+            //ATLASSERT(Node->GetType() == NodeDevice);
+            break;
+        }
+
+        Node = NULL;
+
+    } while (Pos != NULL);
+
+    return Node;
+}
+
+CNode* CDeviceView::GetNode(
+    _In_ LPTV_ITEMW TvItem
+    )
+{
+    TvItem->mask = TVIF_PARAM;
+    if (TreeView_GetItem(m_hTreeView, TvItem))
+    {
+        return (CNode *)TvItem->lParam;
+    }
+    return NULL;
+}
+
+void
+CDeviceView::EmptyLists()
+{
+    CNode *Node;
+
+    while (!m_ClassNodeList.IsEmpty())
+    {
+        Node = m_ClassNodeList.RemoveTail();
+        delete Node;
+    }
+
+    while (!m_DeviceNodeList.IsEmpty())
+    {
+        Node = m_DeviceNodeList.RemoveTail();
+        delete Node;
+    }
+}
+
+bool
+CDeviceView::RefreshDeviceList()
+{
+    GUID ClassGuid;
+    CClassNode *ClassNode;
+    CDeviceNode *DeviceNode;
+    HDEVINFO hDevInfo;
+    SP_DEVINFO_DATA DeviceInfoData;
+    DWORD i;
+    BOOL Success;
+
+    ULONG ClassIndex = 0;
+
+    EmptyLists();
+
+    if (m_RootNode) delete m_RootNode;
+    m_RootNode = new CRootNode(&m_ImageListData);
+    m_RootNode->SetupNode();
+    // Loop through all the classes
+    do
+    {
+        Success = GetNextClass(ClassIndex, &ClassGuid, &hDevInfo);
+        if (Success)
+        {
+            // Create a new class node and add it to the list
+            ClassNode = new CClassNode(&ClassGuid, &m_ImageListData);
+            if (ClassNode->SetupNode())
+            {
+                m_ClassNodeList.AddTail(ClassNode);
+            }
+
+            SetupDiDestroyDeviceInfoList(hDevInfo);
+        }
+        ClassIndex++;
+    } while (Success);
+
+
+    // Get all the devices on the local machine
+    hDevInfo = SetupDiGetClassDevsW(NULL,
+                                    0,
+                                    0,
+                                    DIGCF_PRESENT | DIGCF_ALLCLASSES);
+    if (hDevInfo == INVALID_HANDLE_VALUE)
+    {
+        return false;
+    }
+
+    // loop though all the devices
+    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+    for (i = 0;; i++)
+    {
+        // Get the devinst for this device
+        Success = SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData);
+        if (Success == FALSE) break;
+
+        // create a new device node and add it to the list
+        DeviceNode = new CDeviceNode(DeviceInfoData.DevInst, &m_ImageListData);
+        if (DeviceNode->SetupNode())
+        {
+            m_DeviceNodeList.AddTail(DeviceNode);
+        }
+    }
+
+    SetupDiDestroyDeviceInfoList(hDevInfo);
+
+    return TRUE;
+}
\ No newline at end of file
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/DeviceView.h b/reactos/dll/win32/devmgr_new/devmgmt/DeviceView.h
new file mode 100644 (file)
index 0000000..70fe84d
--- /dev/null
@@ -0,0 +1,165 @@
+#pragma once
+#include "DeviceNode.h"
+#include "ClassNode.h"
+#include "RootNode.h"
+
+enum ViewType
+{
+    DevicesByType,
+    DevicesByConnection,
+    ResourcesByType,
+    ResourcesByConnection
+};
+
+
+class CDeviceView
+{
+    CRootNode *m_RootNode;
+    CAtlList<CClassNode *> m_ClassNodeList;
+    CAtlList<CDeviceNode *> m_DeviceNodeList;
+    SP_CLASSIMAGELIST_DATA m_ImageListData;
+    HWND m_hMainWnd;
+    HWND m_hTreeView;
+    HWND m_hPropertyDialog;
+    HMENU m_hMenu;
+    ViewType m_ViewType;
+    HTREEITEM m_hTreeRoot;
+    bool m_ShowHidden;
+
+public:
+    CDeviceView(
+        HWND hMainWnd
+        );
+
+    ~CDeviceView(void);
+
+    bool Initialize();
+    bool Uninitialize();
+
+    LRESULT OnSize(
+        _In_ int x,
+        _In_ int y,
+        _In_ int cx,
+        _In_ int cy
+        );
+
+    LRESULT OnRightClick(
+        _In_ LPNMHDR NmHdr
+        );
+
+    LRESULT OnContextMenu(
+        _In_ LPARAM lParam
+        );
+
+    LRESULT OnAction(
+        UINT Action
+        );
+
+    VOID Refresh(
+        _In_ ViewType Type,
+        _In_ bool ScanForChanges,
+        _In_ bool UpdateView,
+        _In_opt_ LPWSTR DeviceId
+        );
+
+    VOID DisplayPropertySheet();
+    VOID SetFocus();
+
+    VOID SetHiddenDevices(_In_ bool ShowHidden)
+    {
+        m_ShowHidden = ShowHidden;
+    }
+
+    ViewType GetCurrentView() { return m_ViewType; }
+
+    bool CreateActionMenu(
+        _In_ HMENU OwnerMenu,
+        _In_ bool MainMenu
+        );
+
+    CNode* GetSelectedNode(
+        );
+
+    bool SelDeviceIsStarted();
+    bool SelDeviceIsInstalled();
+
+private:
+    bool AddRootDevice();
+
+    bool RefreshDeviceList();
+
+    static unsigned int __stdcall RefreshThread(
+        void *Param
+        );
+
+    bool ListDevicesByConnection(
+        );
+    bool ListDevicesByType(
+        );
+
+    bool GetNextClass(
+        _In_ ULONG ClassIndex,
+        _Out_ LPGUID ClassGuid,
+        _Out_ HDEVINFO *hDevInfo
+        );
+
+    bool RecurseChildDevices(
+        _In_ DEVINST ParentDevice,
+        _In_ HTREEITEM hParentTreeItem
+        );
+
+    bool EnableSelectedDevice(
+        _In_ bool Enable,
+        _Out_ bool &NeedsReboot
+        );
+
+    bool UninstallSelectedDevice(
+        );
+
+    bool GetChildDevice(
+        _In_ DEVINST ParentDevInst,
+        _Out_ PDEVINST DevInst
+        );
+
+    bool GetSiblingDevice(
+        _In_ DEVINST PrevDevice,
+        _Out_ PDEVINST DevInst
+        );
+
+    HTREEITEM InsertIntoTreeView(
+        _In_opt_ HTREEITEM hParent,
+        _In_ CNode *Node
+        );
+
+    void BuildActionMenuForNode(
+        _In_ HMENU OwnerMenu,
+        _In_ CNode *Node,
+        _In_ bool MainMenu
+        );
+
+    HTREEITEM RecurseFindDevice(
+        _In_ HTREEITEM hParentItem,
+        _In_ LPWSTR DeviceId
+        );
+
+    void SelectNode(
+        _In_ LPWSTR DeviceId
+        );
+
+    void EmptyDeviceView(
+        );
+
+    CNode* GetNode(
+        _In_ LPTV_ITEMW TvItem
+        );
+
+    CClassNode* GetClassNode(
+        _In_ LPGUID ClassGuid
+        );
+    CDeviceNode* GetDeviceNode(
+        _In_ DEVINST Device
+        );
+    void EmptyLists(
+        );
+};
+
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/MainWindow.cpp b/reactos/dll/win32/devmgr_new/devmgmt/MainWindow.cpp
new file mode 100644 (file)
index 0000000..6f43b4f
--- /dev/null
@@ -0,0 +1,827 @@
+/*
+ * PROJECT:     ReactOS Device Manager
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        dll/win32/devmgr/devmgr/MainWindow.cpp
+ * PURPOSE:     Implements the main container window for the device view
+ * COPYRIGHT:   Copyright 2014 - 2015 Ged Murphy <gedmurphy@reactos.org>
+ */
+
+
+#include "stdafx.h"
+#include "devmgmt.h"
+#include "MainWindow.h"
+
+
+/* DATA *****************************************************/
+
+#define BTN_PROPERTIES      0
+#define BTN_SCAN_HARDWARE   1
+#define BTN_ENABLE_DRV      2
+#define BTN_DISABLE_DRV     3
+#define BTN_UPDATE_DRV      4
+#define BTN_UNINSTALL_DRV   5
+
+
+// menu hints
+static const MENU_HINT MainMenuHintTable[] =
+{
+    // File Menu
+    { IDC_EXIT, IDS_HINT_EXIT },
+
+    // Action Menu
+    { IDC_PROPERTIES, IDS_HINT_PROPERTIES },
+    { IDC_SCAN_HARDWARE, IDS_HINT_SCAN },
+    { IDC_ENABLE_DRV, IDS_HINT_ENABLE },
+    { IDC_DISABLE_DRV, IDS_HINT_DISABLE },
+    { IDC_UPDATE_DRV, IDS_HINT_UPDATE },  
+    { IDC_UNINSTALL_DRV, IDS_HINT_UNINSTALL },
+    { IDC_ADD_HARDWARE, IDS_HINT_ADD },
+    
+
+    // View Menu
+    { IDC_DEVBYTYPE, IDS_HINT_DEV_BY_TYPE},
+    { IDC_DEVBYCONN, IDS_HINT_DEV_BY_CONN},
+    { IDC_RESBYTYPE, IDS_HINT_RES_BY_TYPE},
+    { IDC_RESBYCONN, IDS_HINT_RES_BY_TYPE},
+    { IDC_SHOWHIDDEN, IDS_HINT_SHOW_HIDDEN },
+
+    { IDC_ABOUT, IDS_HINT_ABOUT }
+
+};
+
+
+// system menu hints
+static const MENU_HINT SystemMenuHintTable[] =
+{
+    {SC_RESTORE,    IDS_HINT_SYS_RESTORE},
+    {SC_MOVE,       IDS_HINT_SYS_MOVE},
+    {SC_SIZE,       IDS_HINT_SYS_SIZE},
+    {SC_MINIMIZE,   IDS_HINT_SYS_MINIMIZE},
+    {SC_MAXIMIZE,   IDS_HINT_SYS_MAXIMIZE},
+    {SC_CLOSE,      IDS_HINT_SYS_CLOSE},
+};
+
+static TBBUTTON TbButtons[] =
+{
+    { BTN_PROPERTIES, IDC_PROPERTIES, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 },
+    { BTN_SCAN_HARDWARE, IDC_SCAN_HARDWARE, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 },
+    { 2, IDC_STATIC, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },
+    { BTN_ENABLE_DRV, IDC_ENABLE_DRV, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 },
+    { BTN_DISABLE_DRV, IDC_DISABLE_DRV, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 },
+    { BTN_UPDATE_DRV, IDC_UPDATE_DRV, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 },
+    { BTN_UNINSTALL_DRV, IDC_UNINSTALL_DRV, TBSTATE_ENABLED, BTNS_BUTTON, 0, 0 }
+};
+
+
+/* PUBLIC METHODS **********************************************/
+
+CMainWindow::CMainWindow(void) :
+    m_ToolbarhImageList(NULL),
+    m_hMainWnd(NULL),
+    m_hStatusBar(NULL),
+    m_hToolBar(NULL),
+    m_CmdShow(0)
+{
+    m_szMainWndClass = L"DevMgmtWndClass";
+}
+
+CMainWindow::~CMainWindow(void)
+{
+    // Destroy any previous list
+    if (m_ToolbarhImageList) ImageList_Destroy(m_ToolbarhImageList);
+}
+
+bool
+CMainWindow::Initialize(LPCTSTR lpCaption,
+                        int nCmdShow)
+{
+    CAtlStringW szCaption;
+    WNDCLASSEXW wc = {0};
+
+    // Store the show window value
+    m_CmdShow = nCmdShow;
+
+    // Setup the window class struct
+    wc.cbSize = sizeof(WNDCLASSEXW);
+    wc.lpfnWndProc = MainWndProc;
+    wc.hInstance = g_hInstance;
+    wc.hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCEW(IDI_MAIN_ICON));
+    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
+    wc.lpszMenuName = MAKEINTRESOURCEW(IDR_MAINMENU);
+    wc.lpszClassName = m_szMainWndClass;
+    wc.hIconSm = (HICON)LoadImage(g_hInstance,
+                                  MAKEINTRESOURCE(IDI_MAIN_ICON),
+                                  IMAGE_ICON,
+                                  16,
+                                  16,
+                                  LR_SHARED);
+
+    // Register the window
+    if (RegisterClassExW(&wc))
+    {
+        // Create the main window and store the object pointer
+        m_hMainWnd = CreateWindowExW(WS_EX_WINDOWEDGE,
+                                     m_szMainWndClass,
+                                     lpCaption,
+                                     WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
+                                     CW_USEDEFAULT,
+                                     CW_USEDEFAULT,
+                                     550,
+                                     500,
+                                     NULL,
+                                     NULL,
+                                     g_hInstance,
+                                     this);
+    }
+
+    // Return creation result 
+    return !!(m_hMainWnd);
+}
+
+void
+CMainWindow::Uninitialize()
+{
+    // Unregister the window class 
+    UnregisterClassW(m_szMainWndClass, g_hInstance);
+}
+
+int
+CMainWindow::Run()
+{
+    MSG Msg;
+
+    // Pump the message queue 
+    while (GetMessageW(&Msg, NULL, 0, 0 ) != 0)
+    {
+        TranslateMessage(&Msg);
+        DispatchMessageW(&Msg);
+    }
+
+    return 0;
+}
+
+
+/* PRIVATE METHODS **********************************************/
+
+bool
+CMainWindow::MainWndMenuHint(WORD CmdId,
+                             const MENU_HINT *HintArray,
+                             DWORD HintsCount,
+                             UINT DefHintId)
+{
+    bool Found = false;
+    const MENU_HINT *LastHint;
+    UINT HintId = DefHintId;
+
+    LastHint = HintArray + HintsCount;
+    while (HintArray != LastHint)
+    {
+        if (HintArray->CmdId == CmdId)
+        {
+            HintId = HintArray->HintId;
+            Found = true;
+            break;
+        }
+        HintArray++;
+    }
+
+    StatusBarLoadString(m_hStatusBar,
+                        SB_SIMPLEID,
+                        g_hInstance,
+                        HintId);
+
+    return Found;
+}
+
+void
+CMainWindow::UpdateStatusBar(
+    _In_ bool InMenuLoop
+    )
+{
+    SendMessageW(m_hStatusBar,
+                 SB_SIMPLE,
+                 (WPARAM)InMenuLoop,
+                 0);
+}
+
+bool
+CMainWindow::RefreshView(ViewType Type)
+{
+    UINT CheckId = 0;
+    BOOL bSuccess;
+
+    // Refreshed the cached view
+    m_DeviceView->Refresh(Type, FALSE, TRUE, NULL);
+
+    // Get the menu item id
+    switch (Type)
+    {
+        case DevicesByType: CheckId = IDC_DEVBYTYPE; break;
+        case DevicesByConnection: CheckId = IDC_DEVBYCONN; break;
+        case ResourcesByType: CheckId = IDC_RESBYTYPE; break;
+        case ResourcesByConnection: CheckId = IDC_RESBYCONN; break;
+        default: ATLASSERT(FALSE); break;
+    }
+
+    // Set the new check item
+    bSuccess = CheckMenuRadioItem(m_hMenu,
+                                  IDC_DEVBYTYPE,
+                                  IDC_RESBYCONN,
+                                  CheckId,
+                                  MF_BYCOMMAND);
+
+    return TRUE;
+}
+
+bool
+CMainWindow::CreateToolBar()
+{
+    TBADDBITMAP TbAddBitmap;
+    INT Index;
+
+    DWORD dwStyles = WS_CHILDWINDOW | TBSTYLE_FLAT | TBSTYLE_WRAPABLE | TBSTYLE_TOOLTIPS | CCS_NODIVIDER;
+    DWORD dwExStyles = WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR;
+
+    // Create the toolbar window
+    m_hToolBar = CreateWindowExW(dwExStyles,
+                                 TOOLBARCLASSNAME,
+                                 NULL,
+                                 dwStyles,
+                                 0, 0, 0, 0,
+                                 m_hMainWnd,
+                                 (HMENU)IDC_TOOLBAR,
+                                 g_hInstance,
+                                 NULL);
+    if (m_hToolBar == NULL) return FALSE;
+
+    // Don't show clipped buttons
+    SendMessageW(m_hToolBar,
+                 TB_SETEXTENDEDSTYLE,
+                 0,
+                 TBSTYLE_EX_HIDECLIPPEDBUTTONS);
+
+    SendMessageW(m_hToolBar, TB_SETBITMAPSIZE, 0, MAKELONG(16, 16));
+
+    // Set the struct size, the toobar needs this...
+    SendMessageW(m_hToolBar,
+                 TB_BUTTONSTRUCTSIZE,
+                 sizeof(TBBUTTON),
+                 0);
+
+    TbAddBitmap.hInst = g_hInstance;
+    TbAddBitmap.nID = IDB_TOOLBAR;
+    Index = SendMessageW(m_hToolBar, TB_ADDBITMAP, _countof(TbButtons), (LPARAM)&TbAddBitmap);
+
+    SendMessageW(m_hToolBar, TB_ADDBUTTONSW, _countof(TbButtons), (LPARAM)TbButtons);
+    SendMessageW(m_hToolBar, TB_AUTOSIZE, 0, 0);
+
+    if (TRUE)
+    {
+        ShowWindow(m_hToolBar, SW_SHOW);
+    }
+
+    return TRUE;
+}
+
+bool
+CMainWindow::CreateStatusBar()
+{
+    int StatWidths[] = {110, -1}; // widths of status bar
+    bool bRet = FALSE;
+
+    // Create the status bar
+    m_hStatusBar = CreateWindowExW(0,
+                                   STATUSCLASSNAME,
+                                   NULL,
+                                   WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP,
+                                   0, 0, 0, 0,
+                                   m_hMainWnd,
+                                   (HMENU)IDC_STATUSBAR,
+                                   g_hInstance,
+                                   NULL);
+    if (m_hStatusBar)
+    {
+        // Set the width
+        bRet = (SendMessageW(m_hStatusBar,
+                             SB_SETPARTS,
+                             sizeof(StatWidths) / sizeof(int),
+                             (LPARAM)StatWidths) != 0);
+    }
+
+    return bRet;
+}
+
+void CMainWindow::UpdateToolbar()
+{
+    WORD State;
+
+    CNode *Node = m_DeviceView->GetSelectedNode();
+
+    // properties button
+    if (Node->HasProperties())
+    {
+        State = TBSTATE_ENABLED;
+    }
+    else
+    {
+        State = TBSTATE_HIDDEN;
+    }
+    SendMessageW(m_hToolBar, TB_SETSTATE, IDC_PROPERTIES, MAKELPARAM(State, 0));
+    SendMessageW(m_hToolBar, TB_SETSTATE, IDC_UPDATE_DRV, MAKELPARAM(State, 0)); //hack
+    SendMessageW(m_hToolBar, TB_SETSTATE, IDC_UNINSTALL_DRV, MAKELPARAM(State, 0)); // hack
+
+
+
+    // enable driver button
+    if (Node->GetNodeType() == DeviceNode &&
+        dynamic_cast<CDeviceNode *>(Node)->IsDisabled())
+    {
+        State = TBSTATE_ENABLED;
+    }
+    else
+    {
+        State = TBSTATE_HIDDEN;
+    }
+    SendMessageW(m_hToolBar, TB_SETSTATE, IDC_ENABLE_DRV, MAKELPARAM(State, 0));
+
+    // disable driver button
+    if (Node->GetNodeType() == DeviceNode &&
+        dynamic_cast<CDeviceNode *>(Node)->CanDisable() &&
+        !dynamic_cast<CDeviceNode *>(Node)->IsDisabled())
+    {
+        State = TBSTATE_ENABLED;
+    }
+    else
+    {
+        State = TBSTATE_HIDDEN;
+    }
+    SendMessageW(m_hToolBar, TB_SETSTATE, IDC_DISABLE_DRV, MAKELPARAM(State, 0));
+
+
+
+    
+
+}
+
+
+
+bool
+CMainWindow::StatusBarLoadString(IN HWND hStatusBar,
+                                 IN INT PartId,
+                                 IN HINSTANCE hInstance,
+                                 IN UINT uID)
+{
+    CAtlStringW szMessage;
+    bool bRet = false;
+
+    // Load the string
+    if (szMessage.LoadStringW(hInstance, uID))
+    {
+        // Show the string on the status bar
+        bRet = (SendMessageW(hStatusBar,
+                             SB_SETTEXT,
+                             (WPARAM)PartId,
+                             (LPARAM)szMessage.GetBuffer()) != 0);
+    }
+
+    return bRet;
+}
+
+LRESULT
+CMainWindow::OnCreate(HWND hwnd)
+{
+    LRESULT RetCode;
+
+    RetCode = -1;
+    m_hMainWnd = hwnd;
+
+    // Store a handle to the main menu
+    m_hMenu = GetMenu(m_hMainWnd);
+
+    // Create the toolbar and statusbar
+    if (CreateToolBar() && CreateStatusBar())
+    {
+        // Create the device view object
+        m_DeviceView = new CDeviceView(m_hMainWnd);
+        if (m_DeviceView->Initialize())
+        {
+            // Do the initial scan
+            m_DeviceView->Refresh(m_DeviceView->GetCurrentView(),
+                                  true,
+                                  true,
+                                  NULL);
+
+            // Display the window according to the user request
+            ShowWindow(hwnd, m_CmdShow);
+            RetCode = 0;
+        }
+    }
+
+    return RetCode;
+}
+
+LRESULT
+CMainWindow::OnSize()
+{
+    RECT rcClient, rcTool, rcStatus;
+    INT lvHeight, iToolHeight, iStatusHeight;
+
+    // Autosize the toolbar
+    SendMessage(m_hToolBar, TB_AUTOSIZE, 0, 0);
+
+    // Get the toolbar rect and save the height
+    GetWindowRect(m_hToolBar, &rcTool);
+    iToolHeight = rcTool.bottom - rcTool.top;
+
+    // Resize the status bar
+    SendMessage(m_hStatusBar, WM_SIZE, 0, 0);
+
+    // Get the statusbar rect and save the height
+    GetWindowRect(m_hStatusBar, &rcStatus);
+    iStatusHeight = rcStatus.bottom - rcStatus.top;
+
+    // Get the full client rect
+    GetClientRect(m_hMainWnd, &rcClient);
+
+    // Calculate the remaining height for the treeview
+    lvHeight = rcClient.bottom - iToolHeight - iStatusHeight;
+
+    // Resize the device view
+    m_DeviceView->OnSize(0,
+                         iToolHeight,
+                         rcClient.right,
+                         lvHeight);
+
+    return 0;
+}
+
+LRESULT
+CMainWindow::OnNotify(LPARAM lParam)
+{
+    LPNMHDR NmHdr = (LPNMHDR)lParam;
+    LRESULT Ret;
+
+    switch (NmHdr->code)
+    {
+        case TVN_SELCHANGED:
+        {
+            UpdateToolbar();
+            break;
+        }
+
+        case NM_DBLCLK:
+        {
+            m_DeviceView->DisplayPropertySheet();
+            break;
+        }
+
+        case NM_RCLICK:
+        {
+            Ret = m_DeviceView->OnRightClick(NmHdr);
+            break;
+        }
+
+        case NM_RETURN:
+        {
+            m_DeviceView->DisplayPropertySheet();
+            break;
+        }
+
+        case TTN_GETDISPINFO:
+        {
+             LPTOOLTIPTEXT lpttt = (LPTOOLTIPTEXT)lParam;
+
+            UINT_PTR idButton = lpttt->hdr.idFrom;
+            switch (idButton)
+            {
+                case IDC_PROPERTIES:
+                    lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_PROPERTIES);
+                    break;
+                case IDC_SCAN_HARDWARE:
+                    lpttt->lpszText = MAKEINTRESOURCEW(IDS_TOOLTIP_SCAN);
+                    break;
+                case IDC_ENABLE_DRV:
+                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_ENABLE);
+                    break;
+                case IDC_DISABLE_DRV:
+                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_DISABLE);
+                    break;
+                case IDC_UPDATE_DRV:
+                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_UPDATE);
+                    break;
+                case IDC_UNINSTALL_DRV:
+                    lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_UNINSTALL);
+                    break;
+            }
+            break;
+        }
+    }
+
+    return 0;
+}
+
+LRESULT
+CMainWindow::OnContext(LPARAM lParam)
+{
+    return m_DeviceView->OnContextMenu(lParam);
+}
+
+LRESULT
+CMainWindow::OnCommand(WPARAM wParam,
+                       LPARAM /*lParam*/)
+{
+    LRESULT RetCode = 0;
+    WORD Msg;
+
+    // Get the message
+    Msg = LOWORD(wParam);
+
+    switch (Msg)
+    {
+        case IDC_PROPERTIES:
+        case IDC_SCAN_HARDWARE:
+        case IDC_ENABLE_DRV:
+        case IDC_DISABLE_DRV:
+        case IDC_UPDATE_DRV:
+        case IDC_UNINSTALL_DRV:
+        case IDC_ADD_HARDWARE:
+        {
+            m_DeviceView->OnAction(Msg);
+            break;
+        }
+
+        case IDC_ACTIONMENU:
+        {
+            // Create a popup menu with all the actions for the selected node
+            HMENU hMenu = CreatePopupMenu();
+            m_DeviceView->CreateActionMenu(hMenu, true);
+
+            // Calculate where to put the menu
+            RECT rc;
+            GetMenuItemRect(m_hMainWnd, m_hMenu, 1, &rc);
+            LONG Height = rc.bottom - rc.top;
+
+            // Display the menu
+            TrackPopupMenuEx(hMenu,
+                             TPM_RIGHTBUTTON,
+                             rc.left,
+                             rc.top + Height,
+                             m_hMainWnd,
+                             NULL);
+
+            DestroyMenu(hMenu);
+            break;
+        }
+
+        case IDC_DEVBYTYPE:
+        {
+            RefreshView(DevicesByType);
+            break;
+        }
+
+        case IDC_DEVBYCONN:
+        {
+            RefreshView(DevicesByConnection);
+            break;
+        }
+
+        case IDC_SHOWHIDDEN:
+        {
+            // Get the current state
+            UINT CurCheckState = GetMenuState(m_hMenu, IDC_SHOWHIDDEN, MF_BYCOMMAND);
+            if (CurCheckState == MF_CHECKED)
+            {
+                m_DeviceView->SetHiddenDevices(false);
+                CheckMenuItem(m_hMenu, IDC_SHOWHIDDEN, MF_BYCOMMAND | MF_UNCHECKED);
+            }
+            else if (CurCheckState == MF_UNCHECKED)
+            {
+                m_DeviceView->SetHiddenDevices(true);
+                CheckMenuItem(m_hMenu, IDC_SHOWHIDDEN, MF_BYCOMMAND | MF_CHECKED);
+            }
+            // Refresh the device view
+            m_DeviceView->Refresh(m_DeviceView->GetCurrentView(),
+                                  false,
+                                  true,
+                                  NULL);
+            break;
+        }
+
+        case IDC_ABOUT:
+        {
+            // Apportion blame
+            MessageBoxW(m_hMainWnd,
+                        L"ReactOS Device Manager\r\nCopyright Ged Murphy 2015",
+                        L"About",
+                        MB_OK | MB_APPLMODAL);
+
+            // Set focus back to the treeview
+            m_DeviceView->SetFocus();
+            break;
+        }
+
+        case IDC_EXIT:
+        {
+            // Post a close message to the window
+            PostMessageW(m_hMainWnd,
+                         WM_CLOSE,
+                         0,
+                         0);
+            break;
+        }
+
+        default:
+            // We didn't handle it
+            RetCode = -1;
+            break;
+    }
+
+    return RetCode;
+}
+
+LRESULT
+CMainWindow::OnDestroy()
+{
+    // Uninitialize the device view
+    m_DeviceView->Uninitialize();
+
+    // Kill the object
+    delete m_DeviceView;
+    m_DeviceView = NULL;
+
+    // Clear the user data pointer
+    SetWindowLongPtr(m_hMainWnd, GWLP_USERDATA, 0);
+
+    // Break the message loop
+    PostQuitMessage(0);
+
+    return 0;
+}
+
+LRESULT CALLBACK
+CMainWindow::MainWndProc(HWND hwnd,
+                         UINT msg,
+                         WPARAM wParam,
+                         LPARAM lParam)
+{
+    CMainWindow *This;
+    LRESULT RetCode = 0;
+
+    // Get the object pointer from window context
+    This = (CMainWindow *)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+    if (This == NULL)
+    {
+        // Check that this isn't a create message
+        if (msg != WM_CREATE)
+        {
+            // Don't handle null info pointer
+            goto HandleDefaultMessage;
+        }
+    }
+
+    switch(msg)
+    {
+        case WM_CREATE:
+        {
+            // Get the object pointer from the create param
+            This = (CMainWindow *)((LPCREATESTRUCT)lParam)->lpCreateParams;
+
+            // Store the pointer in the window's global user data
+            SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)This);
+
+            // Call the create handler
+            RetCode = This->OnCreate(hwnd);
+            break;
+        }
+
+        case WM_SIZE:
+        {
+            RetCode = This->OnSize();
+            break;
+        }
+
+        case WM_NOTIFY:
+        {
+            RetCode = This->OnNotify(lParam);
+            break;
+        }
+
+        case WM_CONTEXTMENU:
+        {
+            RetCode = This->OnContext(lParam);
+            break;
+        }
+
+        case WM_MENUSELECT:
+        {
+            if (This->m_hStatusBar != NULL)
+            {
+                if (!This->MainWndMenuHint(LOWORD(wParam),
+                                           MainMenuHintTable,
+                                           sizeof(MainMenuHintTable) / sizeof(MainMenuHintTable[0]),
+                                           IDS_HINT_BLANK))
+                {
+                    This->MainWndMenuHint(LOWORD(wParam),
+                                          SystemMenuHintTable,
+                                          sizeof(SystemMenuHintTable) / sizeof(SystemMenuHintTable[0]),
+                                          IDS_HINT_BLANK);
+                }
+            }
+
+            break;
+        }
+
+        case WM_COMMAND:
+        {
+            // Handle the command message
+            RetCode = This->OnCommand(wParam, lParam);
+            if (RetCode == -1)
+            {
+                // Hand it off to the default message handler
+                goto HandleDefaultMessage;
+            }
+            break;
+        }
+
+        case WM_ENTERMENULOOP:
+        {
+            This->UpdateStatusBar(true);
+            break;
+        }
+
+        case WM_EXITMENULOOP:
+        {
+            This->UpdateStatusBar(false);
+            break;
+        }
+
+        case WM_CLOSE:
+        {
+            // Destroy the main window
+            DestroyWindow(hwnd);
+            break;
+        }
+        
+
+        case WM_DESTROY:
+        {
+            // Call the destroy handler
+            RetCode = This->OnDestroy();
+            break;
+        }
+
+        default:
+        {
+HandleDefaultMessage:
+            RetCode = DefWindowProc(hwnd, msg, wParam, lParam);
+            break;
+        }
+    }
+
+    return RetCode;
+}
+
+
+//////// MOVE ME ////////////////
+
+HINSTANCE g_hInstance = NULL;
+HANDLE ProcessHeap = NULL;
+
+BOOL
+WINAPI
+DeviceManager_ExecuteW(HWND /*hWndParent*/,
+                       HINSTANCE hInst,
+                       LPCWSTR /*lpMachineName*/,
+                       int nCmdShow)
+{
+    CMainWindow MainWindow;
+    INITCOMMONCONTROLSEX icex;
+    CAtlStringW szAppName;
+    int Ret = 1;
+
+    // Store the global values
+    g_hInstance = hInst;
+    ProcessHeap = GetProcessHeap();
+
+    // Initialize common controls
+    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
+    icex.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES;
+    InitCommonControlsEx(&icex);
+
+    // Load the application name
+    if (szAppName.LoadStringW(g_hInstance, IDS_APPNAME))
+    {
+        // Initialize the main window
+        if (MainWindow.Initialize(szAppName, nCmdShow))
+        {
+            // Run the application
+            Ret = MainWindow.Run();
+
+            // Uninitialize the main window
+            MainWindow.Uninitialize();
+        }
+    }
+
+    return Ret;
+}
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/MainWindow.h b/reactos/dll/win32/devmgr_new/devmgmt/MainWindow.h
new file mode 100644 (file)
index 0000000..75027b9
--- /dev/null
@@ -0,0 +1,73 @@
+#pragma once
+#include "DeviceView.h"
+
+typedef struct _MENU_HINT
+{
+    WORD CmdId;
+    UINT HintId;
+} MENU_HINT, *PMENU_HINT;
+
+class CMainWindow
+{
+    CAtlStringW m_szMainWndClass;
+    CDeviceView *m_DeviceView;
+    HWND m_hMainWnd;
+    HWND m_hStatusBar;
+    HWND m_hToolBar;
+    HIMAGELIST m_ToolbarhImageList;
+    HMENU m_hMenu;
+    HMENU m_hActionMenu;
+    int m_CmdShow;
+
+public:
+    CMainWindow(void);
+    ~CMainWindow(void);
+
+    bool Initialize(LPCTSTR lpCaption, int nCmdShow);
+    int Run();
+    void Uninitialize();
+
+private:
+    static LRESULT CALLBACK MainWndProc(
+        HWND hwnd,
+        UINT msg,
+        WPARAM wParam,
+        LPARAM lParam
+        );
+
+    LRESULT OnCreate(HWND hwnd);
+    LRESULT OnDestroy();
+    LRESULT OnSize();
+    LRESULT OnNotify(LPARAM lParam);
+    LRESULT OnContext(LPARAM lParam);
+    LRESULT OnCommand(WPARAM wParam, LPARAM lParam);
+
+    bool CreateToolBar();
+    bool CreateStatusBar();
+
+    void UpdateToolbar(
+        );
+
+    bool StatusBarLoadString(
+        HWND hStatusBar,
+        INT PartId,
+        HINSTANCE hInstance,
+        UINT uID
+        );
+
+    void UpdateStatusBar(
+        _In_ bool InMenuLoop
+        );
+
+    bool MainWndMenuHint(
+        WORD CmdId,
+        const MENU_HINT *HintArray,
+        DWORD HintsCount,
+        UINT DefHintId
+        );
+
+    bool RefreshView(
+        ViewType Type
+        );
+};
+
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/Node.cpp b/reactos/dll/win32/devmgr_new/devmgmt/Node.cpp
new file mode 100644 (file)
index 0000000..6e3b099
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+* PROJECT:     ReactOS Device Manager
+* LICENSE:     GPL - See COPYING in the top level directory
+* FILE:        dll/win32/devmgr/devmgr/node.cpp
+* PURPOSE:     Abstract base object for each node in the tree
+* COPYRIGHT:   Copyright 2015 Ged Murphy <gedmurphy@reactos.org>
+*
+*/
+
+#include "stdafx.h"
+#include "devmgmt.h"
+#include "Node.h"
+
+
+/* PUBLIC METHODS *******************************************/
+
+CNode::CNode(_In_ NodeType Type,
+             _In_ PSP_CLASSIMAGELIST_DATA ImageListData) :
+    m_NodeType(Type),
+    m_ImageListData(ImageListData),
+    m_DeviceId(NULL),
+    m_ClassImage(0)
+{
+    m_DisplayName[0] = UNICODE_NULL;
+    m_ClassGuid = GUID_NULL;
+}
+
+CNode::~CNode()
+{
+}
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/Node.h b/reactos/dll/win32/devmgr_new/devmgmt/Node.h
new file mode 100644 (file)
index 0000000..b200ba6
--- /dev/null
@@ -0,0 +1,39 @@
+#pragma once
+
+#define DISPLAY_NAME_LEN    256
+
+enum NodeType
+{
+    RootNode,
+    ClassNode,
+    DeviceNode
+};
+
+class CNode
+{
+protected:
+    PSP_CLASSIMAGELIST_DATA m_ImageListData;
+    LPWSTR m_DeviceId;
+    WCHAR m_DisplayName[DISPLAY_NAME_LEN];
+    GUID  m_ClassGuid;
+    INT m_ClassImage;
+    NodeType m_NodeType;
+
+public:
+    CNode(
+        _In_ NodeType Type,
+        _In_ PSP_CLASSIMAGELIST_DATA ImageListData
+        );
+
+    ~CNode();
+
+    virtual bool SetupNode() = 0;
+
+    NodeType GetNodeType() { return m_NodeType; }
+    LPGUID GetClassGuid() { return &m_ClassGuid; }
+    LPWSTR GetDisplayName() { return m_DisplayName; }
+    INT GetClassImage() { return m_ClassImage; }
+    LPWSTR GetDeviceId() { return m_DeviceId; }
+    bool HasProperties() { return (m_DeviceId != NULL); }
+};
+
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/Resource.h b/reactos/dll/win32/devmgr_new/devmgmt/Resource.h
new file mode 100644 (file)
index 0000000..f479ce6
--- /dev/null
@@ -0,0 +1,84 @@
+#define IDC_STATIC          -1
+
+#define IDS_APPNAME         10
+
+#define IDI_MAIN_ICON       20
+#define IDB_ROOT_IMAGE      21
+#define IDB_TOOLBAR         22
+
+/* windows */
+#define IDC_TREEVIEW        50
+#define IDC_TOOLBAR         51
+#define IDC_STATUSBAR       52
+#define IDR_MAINMENU        53
+#define IDR_POPUP           54
+
+/* Actions */
+#define IDC_PROPERTIES      100
+#define IDC_SCAN_HARDWARE   101
+#define IDC_ENABLE_DRV      102
+#define IDC_DISABLE_DRV     103
+#define IDC_UPDATE_DRV      104
+#define IDC_UNINSTALL_DRV   105
+#define IDC_ADD_HARDWARE    106
+
+/* Menu items */
+#define IDC_ACTIONMENU      150
+#define IDC_ABOUT           151
+#define IDC_EXIT            152
+
+
+/* view menu */
+#define IDC_DEVBYTYPE       200
+#define IDC_DEVBYCONN       201
+#define IDC_RESBYTYPE       202
+#define IDC_RESBYCONN       203
+#define IDC_SHOWHIDDEN      204
+
+
+/* tooltips */
+#define IDS_TOOLTIP_PROPERTIES  300
+#define IDS_TOOLTIP_SCAN        301
+#define IDS_TOOLTIP_ENABLE      302
+#define IDS_TOOLTIP_DISABLE     303
+#define IDS_TOOLTIP_UPDATE      304
+#define IDS_TOOLTIP_UNINSTALL   305
+
+/* General strings */
+#define IDS_CONFIRM_DISABLE     400
+
+/* Menu strings */
+#define IDS_MENU_UPDATE         500
+#define IDS_MENU_ENABLE         501
+#define IDS_MENU_DISABLE        502
+#define IDS_MENU_UNINSTALL      503
+#define IDS_MENU_SCAN           504
+#define IDS_MENU_ADD            505
+#define IDS_MENU_PROPERTIES     506
+
+
+/* menu hints */
+#define IDS_HINT_BLANK          1000
+#define IDS_HINT_PROPERTIES     1001
+#define IDS_HINT_SCAN           1002
+#define IDS_HINT_ENABLE         1003
+#define IDS_HINT_DISABLE        1004
+#define IDS_HINT_UPDATE         1005
+#define IDS_HINT_UNINSTALL      1006
+#define IDS_HINT_ADD            1007
+#define IDS_HINT_ABOUT          20008
+#define IDS_HINT_EXIT           20009
+
+#define IDS_HINT_DEV_BY_TYPE    20020
+#define IDS_HINT_DEV_BY_CONN    20021
+#define IDS_HINT_RES_BY_TYPE    20022
+#define IDS_HINT_RES_BY_CONN    20023
+#define IDS_HINT_SHOW_HIDDEN    20024
+
+/* system menu hints */
+#define IDS_HINT_SYS_RESTORE    21001
+#define IDS_HINT_SYS_MOVE       21002
+#define IDS_HINT_SYS_SIZE       21003
+#define IDS_HINT_SYS_MINIMIZE   21004
+#define IDS_HINT_SYS_MAXIMIZE   21005
+#define IDS_HINT_SYS_CLOSE      21006
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/RootNode.cpp b/reactos/dll/win32/devmgr_new/devmgmt/RootNode.cpp
new file mode 100644 (file)
index 0000000..05be76d
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+* PROJECT:     ReactOS Device Manager
+* LICENSE:     GPL - See COPYING in the top level directory
+* FILE:        dll/win32/devmgr/devmgr/RootNode.cpp
+* PURPOSE:     Root object for
+* COPYRIGHT:   Copyright 2015 Ged Murphy <gedmurphy@reactos.org>
+*
+*/
+
+#include "stdafx.h"
+#include "devmgmt.h"
+#include "RootNode.h"
+
+
+CRootNode::CRootNode(_In_ PSP_CLASSIMAGELIST_DATA ImageListData) :
+    CNode(RootNode, ImageListData)
+{
+}
+
+
+CRootNode::~CRootNode()
+{
+}
+
+
+bool
+CRootNode::SetupNode()
+{
+
+    // Load the bitmap we'll be using as the root image
+    HBITMAP hRootImage;
+    hRootImage = LoadBitmapW(g_hInstance,
+                                MAKEINTRESOURCEW(IDB_ROOT_IMAGE));
+    if (hRootImage == NULL) return FALSE;
+
+    // Add this bitmap to the device image list. This is a bit hacky, but it's safe
+    m_ClassImage = ImageList_Add(m_ImageListData->ImageList,
+                                 hRootImage,
+                                 NULL);
+    DeleteObject(hRootImage);
+
+
+    // Get the root instance 
+    CONFIGRET cr;
+    cr = CM_Locate_DevNodeW(&m_DevInst,
+                            NULL,
+                            CM_LOCATE_DEVNODE_NORMAL);
+    if (cr != CR_SUCCESS)
+    {
+        return false;
+    }
+
+    // The root name is the computer name 
+    DWORD Size = DISPLAY_NAME_LEN;
+    if (GetComputerNameW(m_DisplayName, &Size))
+        _wcslwr(m_DisplayName);
+
+    return true;
+
+
+}
\ No newline at end of file
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/RootNode.h b/reactos/dll/win32/devmgr_new/devmgmt/RootNode.h
new file mode 100644 (file)
index 0000000..4c58fc5
--- /dev/null
@@ -0,0 +1,17 @@
+#pragma once
+#include "Node.h"
+
+class CRootNode : public CNode
+{
+private:
+    DEVINST m_DevInst;
+
+public:
+    CRootNode(_In_ PSP_CLASSIMAGELIST_DATA ImageListData);
+    ~CRootNode();
+
+    virtual bool SetupNode();
+
+    DEVINST GetDeviceInst() { return m_DevInst; }
+};
+
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/devmgmt.h b/reactos/dll/win32/devmgr_new/devmgmt/devmgmt.h
new file mode 100644 (file)
index 0000000..f8abae2
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#pragma once
+#include "resource.h"
+
+extern HINSTANCE g_hInstance;
+extern HANDLE ProcessHeap;
+
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/lang/en-US.rc b/reactos/dll/win32/devmgr_new/devmgmt/lang/en-US.rc
new file mode 100644 (file)
index 0000000..4a8f138
--- /dev/null
@@ -0,0 +1,78 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+IDR_MAINMENU MENU
+BEGIN
+  POPUP "&File"
+  BEGIN
+    MENUITEM "E&xit",                       IDC_EXIT
+  END
+  MENUITEM "Action"                         IDC_ACTIONMENU
+  POPUP "View"
+  BEGIN
+    MENUITEM "Devices by type",             IDC_DEVBYTYPE
+    MENUITEM "Devices by connection",       IDC_DEVBYCONN
+    MENUITEM "Resources by type",           IDC_RESBYTYPE, GRAYED
+    MENUITEM "Resources by connection",     IDC_RESBYCONN, GRAYED
+    MENUITEM SEPARATOR
+    MENUITEM "Show hidden devices",         IDC_SHOWHIDDEN
+  END
+  POPUP "Help"
+  BEGIN
+    MENUITEM "About",                       IDC_ABOUT
+  END
+END
+
+
+STRINGTABLE DISCARDABLE
+BEGIN
+  IDS_CONFIRM_DISABLE       "Disabling this device will cause it to stop functioning.\r\nDo you really want to disable it?"
+END
+STRINGTABLE DISCARDABLE
+BEGIN
+  IDS_MENU_UPDATE           "Update driver software..."
+  IDS_MENU_ENABLE           "Enable"
+  IDS_MENU_DISABLE          "Disable"
+  IDS_MENU_UNINSTALL        "Uninstall"
+  IDS_MENU_SCAN             "Scan for hardware changes"
+  IDS_MENU_ADD              "Add hardware"
+  IDS_MENU_PROPERTIES       "Properties"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+  IDS_TOOLTIP_PROPERTIES    "Properties"
+  IDS_TOOLTIP_SCAN          "Scan for hardware changes"
+  IDS_TOOLTIP_ENABLE        "Enable"
+  IDS_TOOLTIP_DISABLE       "Disable"
+  IDS_TOOLTIP_UPDATE        "Update Driver Software"
+  IDS_TOOLTIP_UNINSTALL     "Uninstall"
+END
+
+/* Hints */
+STRINGTABLE DISCARDABLE
+BEGIN
+  IDS_APPNAME           "ReactOS Device Manager"
+  IDS_HINT_BLANK        " "
+  IDS_HINT_PROPERTIES   " Open property dialog for the current selection."
+  IDS_HINT_SCAN         " Scan for changed or new plug and play devices."
+  IDS_HINT_ENABLE       " Enables the selected device."
+  IDS_HINT_DISABLE      " Disables the selected device."
+  IDS_HINT_UPDATE       " Launches the Update Driver Software wizard for the selected device."
+  IDS_HINT_UNINSTALL    " Uninstalls the driver for the selected device."
+  IDS_HINT_ADD          " Adds a legacy (non-Plug and Play) device to the computer." 
+  IDS_HINT_ABOUT        " About ReactOS Device Manager."
+  IDS_HINT_EXIT         " Exits the program."
+
+  IDS_HINT_DEV_BY_TYPE  " Displays devices by hardware type."
+  IDS_HINT_DEV_BY_CONN  " Displays devices by connection."
+  IDS_HINT_RES_BY_TYPE  " Displays resources by type."
+  IDS_HINT_RES_BY_CONN  " Displays resources by connection type."
+  IDS_HINT_SHOW_HIDDEN  " Displays legacy devices and devices that are no longer installed."
+
+  IDS_HINT_SYS_RESTORE  " Restores this window to normal size."
+  IDS_HINT_SYS_MOVE     " Moves this window."
+  IDS_HINT_SYS_SIZE     " Resizes this window."
+  IDS_HINT_SYS_MINIMIZE " Collapses this window to an icon."
+  IDS_HINT_SYS_MAXIMIZE " Expands this window to fill this screen."
+  IDS_HINT_SYS_CLOSE    " Closes this window."
+END
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/lang/tr-TR.rc b/reactos/dll/win32/devmgr_new/devmgmt/lang/tr-TR.rc
new file mode 100644 (file)
index 0000000..3fd8f36
--- /dev/null
@@ -0,0 +1,98 @@
+/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
+
+LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+IDR_MAINMENU MENU
+BEGIN
+  POPUP "&Kütük"
+  BEGIN
+    MENUITEM "&Çıkış",                       IDC_EXIT
+  END
+  POPUP "&Eylem"
+  BEGIN
+    MENUITEM "&Sürücü Yazılmını Şimdikileştir..." IDC_UPDATE_DRV
+    MENUITEM "&Etkinleştir"                  IDC_ENABLE_DRV
+    MENUITEM "E&dilginleştir"                IDC_DISABLE_DRV
+    MENUITEM "&Kaldır"                       IDC_UNINSTALL_DRV
+    MENUITEM SEPARATOR
+    MENUITEM "D&onanım Değişiklikleri İçin Tara" IDC_SCAN_HARDWARE
+    MENUITEM "Do&nanım Ekle"                 IDC_ADD_HARDWARE, GRAYED
+    MENUITEM SEPARATOR
+    MENUITEM "&Husûsiyetler",                IDC_PROPERTIES
+  END
+  POPUP "&Görünüm"
+  BEGIN
+    MENUITEM "&Türe Göre Aygıtlar",          IDC_DEVBYTYPE
+    MENUITEM "&Bağlantıya Göre Aygıtlar",    IDC_DEVBYCONN
+    MENUITEM "T&üre Göre Kaynaklar",         IDC_RESBYTYPE, GRAYED
+    MENUITEM "B&ağlantıya Göre Kaynaklar",   IDC_RESBYCONN, GRAYED
+    MENUITEM SEPARATOR
+    MENUITEM "&Gizli Aygıtları Göster",      IDC_SHOWHIDDEN
+  END
+  POPUP "&Yardım"
+  BEGIN
+    MENUITEM "&Üzerine",                     IDC_ABOUT
+  END
+END
+
+IDR_POPUP MENU
+BEGIN
+  POPUP "popup"
+  BEGIN
+    MENUITEM "&Sürücü Yazılmını Şimdikileştir..." IDC_UPDATE_DRV
+    MENUITEM "&Etkinleştir"                  IDC_ENABLE_DRV
+    MENUITEM "E&dilginleştir"                IDC_DISABLE_DRV
+    MENUITEM "&Kaldır"                       IDC_UNINSTALL_DRV
+    MENUITEM SEPARATOR
+    MENUITEM "D&onanım Değişiklikleri İçin Tara" IDC_SCAN_HARDWARE
+    MENUITEM "Do&nanım Ekle"                 IDC_ADD_HARDWARE, GRAYED
+    MENUITEM SEPARATOR
+    MENUITEM "&Husûsiyetler",                IDC_PROPERTIES
+  END
+END
+
+#define IDS_HINT_PROPERTIES     20001
+#define IDS_HINT_SCAN           20002
+#define IDS_HINT_ENABLE         20003
+#define IDS_HINT_DISABLE        20004
+#define IDS_HINT_UPDATE         20005
+#define IDS_HINT_UNINSTALL      20006
+
+STRINGTABLE DISCARDABLE
+BEGIN
+  IDS_TOOLTIP_PROPERTIES    "Husûsiyetler"
+  IDS_TOOLTIP_SCAN          "Donanım Değişiklikleri İçin Tara"
+  IDS_TOOLTIP_ENABLE        "Etkinleştir"
+  IDS_TOOLTIP_DISABLE       "Edilginleştir"
+  IDS_TOOLTIP_UPDATE        "Sürücü Yazılmını Şimdikileştir"
+  IDS_TOOLTIP_UNINSTALL     "Kaldır"
+END
+
+/* Hints */
+STRINGTABLE DISCARDABLE
+BEGIN
+  IDS_APPNAME           "Aygıt Yöneticisi"
+  IDS_HINT_BLANK        " "
+  IDS_HINT_PROPERTIES   " Şimdiki seçilen için husûsiyet penceresini açar."
+  IDS_HINT_SCAN         " Yeni ya da değiştirilmiş tak ve çalıştır aygıtları için tarar."
+  IDS_HINT_ENABLE       " Seçili aygıtı etkinleştirir."
+  IDS_HINT_DISABLE      " Seçili aygıtı edilginleştirir."
+  IDS_HINT_UPDATE       " Seçili aygıt için Sürücü Yazılımını Şimdikileştir yardımcısını başlatır."
+  IDS_HINT_UNINSTALL    " Seçili aygıt için sürücüyü kaldırır."
+  IDS_HINT_ADD          " Bilgisayara eski (Tak ve Çalıştır olmayan) bir aygıt ekler." 
+  IDS_HINT_ABOUT        " Aygıt Yöneticisi üzerine."
+  IDS_HINT_EXIT         " İzlenceden çıkar."
+
+  IDS_HINT_DEV_BY_TYPE  " Donanım türüne göre aygıtları görüntüler."
+  IDS_HINT_DEV_BY_CONN  " Bağlantıya göre aygıtları görüntüler."
+  IDS_HINT_RES_BY_TYPE  " Türe göre kaynakları görüntüler."
+  IDS_HINT_RES_BY_CONN  " Bağlantı türüne göre kaynakları görüntüler."
+  IDS_HINT_SHOW_HIDDEN  " Eski aygıtları ve artık kurulu olmayacak aygıtları görüntüler."
+
+  IDS_HINT_SYS_RESTORE  " Bu pencereyi düzgülük boyutlarına döndürür."
+  IDS_HINT_SYS_MOVE     " Bu pencereyi devindirir."
+  IDS_HINT_SYS_SIZE     " Bu pencereyi yeniden boyutlandırır."
+  IDS_HINT_SYS_MINIMIZE " Bu pencereyi bir simgeye küçültür."
+  IDS_HINT_SYS_MAXIMIZE " Bu pencereyi, bu görüntülüğü kaplatana dek genişletir."
+  IDS_HINT_SYS_CLOSE    " Bu pencereyi kapatır."
+END
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/res/computer.ico b/reactos/dll/win32/devmgr_new/devmgmt/res/computer.ico
new file mode 100644 (file)
index 0000000..56edfcb
Binary files /dev/null and b/reactos/dll/win32/devmgr_new/devmgmt/res/computer.ico differ
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/res/root.bmp b/reactos/dll/win32/devmgr_new/devmgmt/res/root.bmp
new file mode 100644 (file)
index 0000000..e2734fb
Binary files /dev/null and b/reactos/dll/win32/devmgr_new/devmgmt/res/root.bmp differ
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/res/toolbar.bmp b/reactos/dll/win32/devmgr_new/devmgmt/res/toolbar.bmp
new file mode 100644 (file)
index 0000000..c7dd5ac
Binary files /dev/null and b/reactos/dll/win32/devmgr_new/devmgmt/res/toolbar.bmp differ
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/rsrc.rc b/reactos/dll/win32/devmgr_new/devmgmt/rsrc.rc
new file mode 100644 (file)
index 0000000..2d50111
--- /dev/null
@@ -0,0 +1,80 @@
+#include <windows.h>
+#include "resource.h"
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+IDI_MAIN_ICON   ICON    "res/computer.ico"
+IDB_ROOT_IMAGE  BITMAP  "res/root.bmp"
+
+/* main toolbar icons */
+IDB_TOOLBAR    BITMAP DISCARDABLE "res/toolbar.bmp"
+
+// UTF-8
+#pragma code_page(65001)
+
+#ifdef LANGUAGE_BG_BG
+    #include "lang/bg-BG.rc"
+#endif
+#ifdef LANGUAGE_DE_DE
+    #include "lang/de-DE.rc"
+#endif
+#ifdef LANGUAGE_EL_GR
+    #include "lang/el-GR.rc"
+#endif
+#ifdef LANGUAGE_EN_US
+    #include "lang/en-US.rc"
+#endif
+#ifdef LANGUAGE_ES_ES
+    #include "lang/es-ES.rc"
+#endif
+#ifdef LANGUAGE_FR_FR
+    #include "lang/fr-FR.rc"
+#endif
+#ifdef LANGUAGE_HE_IL
+    #include "lang/he-IL.rc"
+#endif
+#ifdef LANGUAGE_ID_ID
+    #include "lang/id-ID.rc"
+#endif
+#ifdef LANGUAGE_IT_IT
+    #include "lang/it-IT.rc"
+#endif
+#ifdef LANGUAGE_JA_JP
+    #include "lang/ja-JP.rc"
+#endif
+#ifdef LANGUAGE_KO_KR
+    #include "lang/ko-KR.rc"
+#endif
+#ifdef LANGUAGE_NB_NO
+    #include "lang/no-NO.rc"
+#endif
+#ifdef LANGUAGE_PL_PL
+    #include "lang/pl-PL.rc"
+#endif
+#ifdef LANGUAGE_PT_BR
+    #include "lang/pt-BR.rc"
+#endif
+#ifdef LANGUAGE_RO_RO
+    #include "lang/ro-RO.rc"
+#endif
+#ifdef LANGUAGE_RU_RU
+    #include "lang/ru-RU.rc"
+#endif
+#ifdef LANGUAGE_SK_SK
+    #include "lang/sk-SK.rc"
+#endif
+#ifdef LANGUAGE_SV_SE
+    #include "lang/sv-SE.rc"
+#endif
+#ifdef LANGUAGE_TH_TH
+    #include "lang/th-TH.rc"
+#endif
+#ifdef LANGUAGE_TR_TR
+    #include "lang/tr-TR.rc"
+#endif
+#ifdef LANGUAGE_UK_UA
+    #include "lang/uk-UA.rc"
+#endif
+#ifdef LANGUAGE_ZH_CN
+    #include "lang/zh-CN.rc"
+#endif
diff --git a/reactos/dll/win32/devmgr_new/devmgmt/stdafx.h b/reactos/dll/win32/devmgr_new/devmgmt/stdafx.h
new file mode 100644 (file)
index 0000000..8802296
--- /dev/null
@@ -0,0 +1,53 @@
+#pragma once
+
+#ifndef __REACTOS__
+
+#define WIN32_LEAN_AND_MEAN
+#include <Windows.h>
+#include <windowsx.h>
+#include <setupapi.h>
+#include <cfgmgr32.h>
+#include <commctrl.h>
+#include <Uxtheme.h>
+#include <Cfgmgr32.h>
+#include <devguid.h>
+#include <process.h>
+
+
+#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // some CString constructors will be explicit
+#include <tchar.h>
+#include <atlbase.h>
+#include <atlstr.h>
+#include <atlcoll.h>
+
+#include <strsafe.h>
+#else
+
+#include <string.h>
+#include <wchar.h>
+
+#include <tchar.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winreg.h>
+#include <wingdi.h>
+#include <winnls.h>
+#include <wincon.h>
+#include <shlobj.h>
+#include <shlwapi.h>
+#include <strsafe.h>
+#include <process.h>
+#include <WindowsX.h>
+#include <strsafe.h>
+
+#include <setupapi.h>
+#include <commctrl.h>
+#include <cfgmgr32.h>
+#include <Uxtheme.h>
+#include <devguid.h>
+
+#include <atlbase.h>
+#include <atlstr.h>
+#include <atlcoll.h>
+
+#endif
\ No newline at end of file
diff --git a/reactos/dll/win32/devmgr_new/devmgr.rc b/reactos/dll/win32/devmgr_new/devmgr.rc
new file mode 100644 (file)
index 0000000..e4b18a8
--- /dev/null
@@ -0,0 +1,81 @@
+#include <windef.h>
+#include <winuser.h>
+#include <commctrl.h>
+
+#include "resource.h"
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION  "ReactOS Device Manager"
+#define REACTOS_STR_INTERNAL_NAME     "devmgr"
+#define REACTOS_STR_ORIGINAL_FILENAME "devmgr.dll"
+#include <reactos/version.rc>
+
+IDI_DEVMGR ICON "resources/devmgr.ico"
+
+#include <reactos/manifest_dll.rc>
+
+/* UTF-8 */
+#pragma code_page(65001)
+
+#ifdef LANGUAGE_BG_BG
+    #include "lang/bg-BG.rc"
+#endif
+#ifdef LANGUAGE_CS_CZ
+    #include "lang/cs-CZ.rc"
+#endif
+#ifdef LANGUAGE_DE_DE
+    #include "lang/de-DE.rc"
+#endif
+#ifdef LANGUAGE_EL_GR
+    #include "lang/el-GR.rc"
+#endif
+#ifdef LANGUAGE_EN_US
+    #include "lang/en-US.rc"
+#endif
+#ifdef LANGUAGE_ES_ES
+    #include "lang/es-ES.rc"
+#endif
+#ifdef LANGUAGE_HE_IL
+    #include "lang/he-IL.rc"
+#endif
+#ifdef LANGUAGE_FR_FR
+    #include "lang/fr-FR.rc"
+#endif
+#ifdef LANGUAGE_HU_HU
+    #include "lang/hu-HU.rc"
+#endif
+#ifdef LANGUAGE_ID_ID
+    #include "lang/id-ID.rc"
+#endif
+#ifdef LANGUAGE_IT_IT
+    #include "lang/it-IT.rc"
+#endif
+#ifdef LANGUAGE_NB_NO
+    #include "lang/no-NO.rc"
+#endif
+#ifdef LANGUAGE_PL_PL
+    #include "lang/pl-PL.rc"
+#endif
+#ifdef LANGUAGE_PT_BR
+    #include "lang/pt-BR.rc"
+#endif
+#ifdef LANGUAGE_RO_RO
+    #include "lang/ro-RO.rc"
+#endif
+#ifdef LANGUAGE_RU_RU
+    #include "lang/ru-RU.rc"
+#endif
+#ifdef LANGUAGE_SK_SK
+    #include "lang/sk-SK.rc"
+#endif
+#ifdef LANGUAGE_SQ_AL
+    #include "lang/sq-AL.rc"
+#endif
+#ifdef LANGUAGE_TR_TR
+    #include "lang/tr-TR.rc"
+#endif
+#ifdef LANGUAGE_UK_UA
+    #include "lang/uk-UA.rc"
+#endif
diff --git a/reactos/dll/win32/devmgr_new/devmgr.spec b/reactos/dll/win32/devmgr_new/devmgr.spec
new file mode 100644 (file)
index 0000000..0ef1127
--- /dev/null
@@ -0,0 +1,27 @@
+# devmgr.dll exports
+
+ 5 stdcall DeviceProperties_RunDLLA(ptr ptr str long)
+ 6 stdcall DeviceProperties_RunDLLW(ptr ptr wstr long)
+ 7 stdcall DevicePropertiesA(ptr str str long)
+ 8 stdcall DevicePropertiesW(ptr wstr wstr long)
+ 9 stdcall DeviceManager_ExecuteA(ptr ptr str long)
+10 stdcall DeviceManager_ExecuteW(ptr ptr wstr long)
+11 stdcall DeviceProblemTextA(ptr long long str long)
+12 stdcall DeviceProblemTextW(ptr long long wstr long)
+13 stdcall DeviceProblemWizardA(ptr str str)
+14 stdcall DeviceProblemWizardW(ptr wstr wstr)
+15 stdcall DeviceManagerPrintA(str str long long ptr)
+16 stdcall DeviceManagerPrintW(wstr wstr long long ptr)
+17 stdcall DeviceAdvancedPropertiesA(ptr str str)
+18 stdcall DeviceAdvancedPropertiesW(ptr wstr wstr)
+19 stdcall DeviceCreateHardwarePage(ptr ptr)
+20 stdcall DeviceCreateHardwarePageEx(ptr ptr long long)
+21 stdcall DevicePropertiesExA(ptr str str long long)
+22 stdcall DevicePropertiesExW(ptr wstr wstr long long)
+23 stdcall DeviceProblenWizard_RunDLLA(ptr ptr str long) DeviceProblemWizard_RunDLLA
+24 stdcall DeviceProblenWizard_RunDLLW(ptr ptr wstr long) DeviceProblemWizard_RunDLLW
+
+@ stub -private DllCanUnloadNow
+@ stub -private DllGetClassObject
+@ stub -private DllRegisterServer
+@ stub -private DllUnregisterServer
diff --git a/reactos/dll/win32/devmgr_new/devprblm.c b/reactos/dll/win32/devmgr_new/devprblm.c
new file mode 100644 (file)
index 0000000..9d684db
--- /dev/null
@@ -0,0 +1,614 @@
+/*
+ * ReactOS Device Manager Applet
+ * Copyright (C) 2004 - 2005 ReactOS Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+/*
+ * PROJECT:         ReactOS devmgr.dll
+ * FILE:            lib/devmgr/devprblm.c
+ * PURPOSE:         ReactOS Device Manager
+ * PROGRAMMER:      Thomas Weidenmueller <w3seek@reactos.com>
+ * UPDATE HISTORY:
+ *      04-04-2004  Created
+ */
+
+#include "precomp.h"
+
+
+BOOL
+ShowDeviceProblemWizard(IN HWND hWndParent  OPTIONAL,
+                        IN HDEVINFO hDevInfo,
+                        IN PSP_DEVINFO_DATA DevInfoData,
+                        IN HMACHINE hMachine  OPTIONAL)
+{
+    WCHAR szDeviceInstanceId[256];
+    CONFIGRET cr;
+    ULONG Status, ProblemNumber;
+    DWORD dwReboot;
+    BOOL Ret = FALSE;
+
+    /* Get the device instance id */
+    if (!SetupDiGetDeviceInstanceId(hDevInfo,
+                                    DevInfoData,
+                                    szDeviceInstanceId,
+                                    256,
+                                    NULL))
+        return FALSE;
+
+    cr = CM_Get_DevNode_Status_Ex(&Status,
+                                  &ProblemNumber,
+                                  DevInfoData->DevInst,
+                                  0,
+                                  hMachine);
+    if (cr == CR_SUCCESS && (Status & DN_HAS_PROBLEM))
+    {
+        switch (ProblemNumber)
+        {
+            case CM_PROB_DEVLOADER_FAILED:
+            {
+                /* FIXME - only if it's not a root bus devloader */
+                /* FIXME - display the update driver wizard */
+                break;
+            }
+
+            case CM_PROB_OUT_OF_MEMORY:
+            case CM_PROB_ENTRY_IS_WRONG_TYPE:
+            case CM_PROB_LACKED_ARBITRATOR:
+            case CM_PROB_FAILED_START:
+            case CM_PROB_LIAR:
+            case CM_PROB_UNKNOWN_RESOURCE:
+            {
+                /* FIXME - display the update driver wizard */
+                InstallDevInst(hWndParent, szDeviceInstanceId, TRUE, &dwReboot);
+                break;
+            }
+
+            case CM_PROB_BOOT_CONFIG_CONFLICT:
+            case CM_PROB_NORMAL_CONFLICT:
+            case CM_PROB_REENUMERATION:
+            {
+                /* FIXME - display the conflict wizard */
+                break;
+            }
+
+            case CM_PROB_FAILED_FILTER:
+            case CM_PROB_REINSTALL:
+            case CM_PROB_FAILED_INSTALL:
+            {
+                /* FIXME - display the driver (re)installation wizard */
+                InstallDevInst(hWndParent, szDeviceInstanceId, TRUE, &dwReboot);
+                break;
+            }
+
+            case CM_PROB_DEVLOADER_NOT_FOUND:
+            {
+                /* FIXME - 4 cases:
+                   1) if it's a missing system devloader:
+                      - fail
+                   2) if it's not a system devloader but still missing:
+                      - display the driver reinstallation wizard
+                   3) if it's not a system devloader but the file can be found:
+                      - display the update driver wizard
+                   4) if it's a missing or empty software key
+                      - display the update driver wizard
+                 */
+                break;
+            }
+
+            case CM_PROB_INVALID_DATA:
+            case CM_PROB_PARTIAL_LOG_CONF:
+            case CM_PROB_NO_VALID_LOG_CONF:
+            case CM_PROB_HARDWARE_DISABLED:
+            case CM_PROB_CANT_SHARE_IRQ:
+            case CM_PROB_TRANSLATION_FAILED:
+            case CM_PROB_SYSTEM_SHUTDOWN:
+            case CM_PROB_PHANTOM:
+                /* FIXME - do nothing */
+                break;
+
+            case CM_PROB_NOT_VERIFIED:
+            case CM_PROB_DEVICE_NOT_THERE:
+                /* FIXME - display search hardware wizard */
+                break;
+
+            case CM_PROB_NEED_RESTART:
+            case CM_PROB_WILL_BE_REMOVED:
+            case CM_PROB_MOVED:
+            case CM_PROB_TOO_EARLY:
+            case CM_PROB_DISABLED_SERVICE:
+                /* FIXME - reboot computer */
+                break;
+
+            case CM_PROB_REGISTRY:
+                /* FIXME - check registry */
+                break;
+
+            case CM_PROB_DISABLED:
+            {
+                /* FIXME - if device was disabled by user display the "Enable Device" wizard,
+                           otherwise Troubleshoot because the device was disabled by the system */
+                break;
+            }
+
+            case CM_PROB_DEVLOADER_NOT_READY:
+            {
+                /* FIXME - if it's a graphics adapter:
+                           - if it's a a secondary adapter and the main adapter
+                             couldn't be found
+                             - do nothing or default action
+                           - else
+                             - display the Properties
+                         - else
+                           - Update driver
+                 */
+                break;
+            }
+
+            case CM_PROB_FAILED_ADD:
+            {
+                /* FIXME - display the properties of the sub-device */
+                break;
+            }
+
+            case CM_PROB_NO_SOFTCONFIG:
+            case CM_PROB_IRQ_TRANSLATION_FAILED:
+            case CM_PROB_FAILED_DRIVER_ENTRY:
+            case CM_PROB_DRIVER_FAILED_PRIOR_UNLOAD:
+            case CM_PROB_DRIVER_FAILED_LOAD:
+            case CM_PROB_DRIVER_SERVICE_KEY_INVALID:
+            case CM_PROB_LEGACY_SERVICE_NO_DEVICES:
+            case CM_PROB_DUPLICATE_DEVICE:
+            case CM_PROB_FAILED_POST_START:
+            case CM_PROB_HALTED:
+            case CM_PROB_HELD_FOR_EJECT:
+            case CM_PROB_DRIVER_BLOCKED:
+            case CM_PROB_REGISTRY_TOO_LARGE:
+            default:
+            {
+                /* FIXME - troubleshoot the device */
+                break;
+            }
+        }
+    }
+
+    return Ret;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceProblemWizardA
+ *
+ * DESCRIPTION
+ *   Calls the device problem wizard
+ *
+ * ARGUMENTS
+ *   hWndParent:    Handle to the parent window
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   lpDeviceID:    Specifies the device, also see NOTEs
+ *
+ * RETURN VALUE
+ *   TRUE:  if no errors occured
+ *   FALSE: if errors occured
+ *
+ * @implemented
+ */
+BOOL
+WINAPI
+DeviceProblemWizardA(IN HWND hWndParent  OPTIONAL,
+                     IN LPCSTR lpMachineName  OPTIONAL,
+                     IN LPCSTR lpDeviceID)
+{
+    LPWSTR lpMachineNameW = NULL;
+    LPWSTR lpDeviceIDW = NULL;
+    BOOL Ret = FALSE;
+
+    if (lpMachineName != NULL)
+    {
+        if (!(lpMachineNameW = ConvertMultiByteToUnicode(lpMachineName,
+                                                         CP_ACP)))
+        {
+            goto Cleanup;
+        }
+    }
+    if (lpDeviceID != NULL)
+    {
+        if (!(lpDeviceIDW = ConvertMultiByteToUnicode(lpDeviceID,
+                                                      CP_ACP)))
+        {
+            goto Cleanup;
+        }
+    }
+
+    Ret = DeviceProblemWizardW(hWndParent,
+                               lpMachineNameW,
+                               lpDeviceIDW);
+
+Cleanup:
+    if (lpMachineNameW != NULL)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpMachineNameW);
+    }
+    if (lpDeviceIDW != NULL)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpDeviceIDW);
+    }
+
+    return Ret;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceProblemWizardW
+ *
+ * DESCRIPTION
+ *   Calls the device problem wizard
+ *
+ * ARGUMENTS
+ *   hWndParent:    Handle to the parent window
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   lpDeviceID:    Specifies the device, also see NOTEs
+ *
+ * RETURN VALUE
+ *   TRUE:  if no errors occured
+ *   FALSE: if errors occured
+ *
+ * @unimplemented
+ */
+BOOL
+WINAPI
+DeviceProblemWizardW(IN HWND hWndParent  OPTIONAL,
+                     IN LPCWSTR lpMachineName  OPTIONAL,
+                     IN LPCWSTR lpDeviceID)
+{
+    HDEVINFO hDevInfo;
+    SP_DEVINFO_DATA DevInfoData;
+    HINSTANCE hComCtl32;
+    CONFIGRET cr;
+    HMACHINE hMachine;
+    BOOL Ret = FALSE;
+
+    if (lpDeviceID == NULL)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    /* dynamically load comctl32 */
+    hComCtl32 = LoadAndInitComctl32();
+    if (hComCtl32 != NULL)
+    {
+        hDevInfo = SetupDiCreateDeviceInfoListEx(NULL,
+                                                 hWndParent,
+                                                 lpMachineName,
+                                                 NULL);
+        if (hDevInfo != INVALID_HANDLE_VALUE)
+        {
+            cr = CM_Connect_Machine(lpMachineName,
+                                    &hMachine);
+            if (cr == CR_SUCCESS)
+            {
+                DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+                if (SetupDiOpenDeviceInfo(hDevInfo,
+                                          lpDeviceID,
+                                          hWndParent,
+                                          0,
+                                          &DevInfoData))
+                {
+                    Ret = ShowDeviceProblemWizard(hWndParent,
+                                                  hDevInfo,
+                                                  &DevInfoData,
+                                                  hMachine);
+                }
+
+                CM_Disconnect_Machine(hMachine);
+            }
+
+            SetupDiDestroyDeviceInfoList(hDevInfo);
+        }
+
+        FreeLibrary(hComCtl32);
+    }
+
+    return Ret;
+}
+
+
+static const UINT ProblemStringId[NUM_CM_PROB] =
+{
+    IDS_DEV_NO_PROBLEM,
+    IDS_DEV_DEVLOADER_FAILED,
+    IDS_DEV_NOT_CONFIGURED,
+    IDS_DEV_OUT_OF_MEMORY,
+    IDS_DEV_ENTRY_IS_WRONG_TYPE,
+    IDS_DEV_LACKED_ARBITRATOR,
+    IDS_DEV_BOOT_CONFIG_CONFLICT,
+    IDS_DEV_FAILED_FILTER,
+    IDS_DEV_DEVLOADER_NOT_FOUND,
+    IDS_DEV_INVALID_DATA,
+    IDS_DEV_FAILED_START,
+    IDS_DEV_LIAR,
+    IDS_DEV_NORMAL_CONFLICT,
+    IDS_DEV_NOT_VERIFIED,
+    IDS_DEV_NEED_RESTART,
+    IDS_DEV_REENUMERATION,
+    IDS_DEV_PARTIAL_LOG_CONF,
+    IDS_DEV_UNKNOWN_RESOURCE,
+    IDS_DEV_REINSTALL,
+    IDS_DEV_REGISTRY,
+    IDS_UNKNOWN, /* CM_PROB_VXDLDR, not used on NT */
+    IDS_DEV_WILL_BE_REMOVED,
+    IDS_DEV_DISABLED,
+    IDS_DEV_DEVLOADER_NOT_READY,
+    IDS_DEV_DEVICE_NOT_THERE,
+    IDS_DEV_MOVED,
+    IDS_DEV_TOO_EARLY,
+    IDS_DEV_NO_VALID_LOG_CONF,
+    IDS_DEV_FAILED_INSTALL,
+    IDS_DEV_HARDWARE_DISABLED,
+    IDS_DEV_CANT_SHARE_IRQ,
+    IDS_DEV_FAILED_ADD,
+    IDS_DEV_DISABLED_SERVICE,
+    IDS_DEV_TRANSLATION_FAILED,
+    IDS_DEV_NO_SOFTCONFIG,
+    IDS_DEV_BIOS_TABLE,
+    IDS_DEV_IRQ_TRANSLATION_FAILED,
+    IDS_DEV_FAILED_DRIVER_ENTRY,
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD,
+    IDS_DEV_DRIVER_FAILED_LOAD,
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID,
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES,
+    IDS_DEV_DUPLICATE_DEVICE,
+    IDS_DEV_FAILED_POST_START,
+    IDS_DEV_HALTED,
+    IDS_DEV_PHANTOM,
+    IDS_DEV_SYSTEM_SHUTDOWN,
+    IDS_DEV_HELD_FOR_EJECT,
+    IDS_DEV_DRIVER_BLOCKED,
+    IDS_DEV_REGISTRY_TOO_LARGE,
+    IDS_DEV_SETPROPERTIES_FAILED
+};
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceProblemTextA
+ *
+ * DESCRIPTION
+ *   Gets the problem text from a problem number displayed in the properties dialog
+ *
+ * ARGUMENTS
+ *   hMachine:   Machine handle or NULL for the local machine
+ *   DevInst:    Device instance handle
+ *   uProblemId: Specifies the problem ID
+ *   lpString:   Pointer to a buffer where the string is to be copied to. If the buffer
+ *               is too small, the return value is the required string length in characters,
+ *               excluding the NULL-termination.
+ *   uMaxString: Size of the buffer in characters
+ *
+ * RETURN VALUE
+ *   The return value is the length of the string in characters.
+ *   It returns 0 if an error occured.
+ *
+ * @implemented
+ */
+UINT
+WINAPI
+DeviceProblemTextA(IN HMACHINE hMachine  OPTIONAL,
+                   IN DEVINST dnDevInst,
+                   IN ULONG uProblemId,
+                   OUT LPSTR lpString,
+                   IN UINT uMaxString)
+{
+    LPWSTR lpBuffer = NULL;
+    UINT Ret = 0;
+
+    if (uMaxString != 0)
+    {
+        lpBuffer = HeapAlloc(GetProcessHeap(),
+                             0,
+                             (uMaxString + 1) * sizeof(WCHAR));
+        if (lpBuffer == NULL)
+        {
+            SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+            return 0;
+        }
+    }
+
+    Ret = DeviceProblemTextW(hMachine,
+                             dnDevInst,
+                             uProblemId,
+                             lpBuffer,
+                             uMaxString);
+
+    if (lpBuffer != NULL)
+    {
+        if (Ret)
+        {
+            WideCharToMultiByte(CP_ACP,
+                                0,
+                                lpBuffer,
+                                (int)Ret,
+                                lpString,
+                                (int)uMaxString,
+                                NULL,
+                                NULL);
+        }
+
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpBuffer);
+    }
+
+    return Ret;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceProblemTextW
+ *
+ * DESCRIPTION
+ *   Gets the problem text from a problem number displayed in the properties dialog
+ *
+ * ARGUMENTS
+ *   hMachine:   Machine handle or NULL for the local machine
+ *   DevInst:    Device instance handle
+ *   uProblemId: Specifies the problem ID
+ *   lpString:   Pointer to a buffer where the string is to be copied to. If the buffer
+ *               is too small, the return value is the required string length in characters,
+ *               excluding the NULL-termination.
+ *   uMaxString: Size of the buffer in characters
+ *
+ * RETURN VALUE
+ *   The return value is the length of the string in characters.
+ *   It returns 0 if an error occured.
+ *
+ * @implemented
+ */
+UINT
+WINAPI
+DeviceProblemTextW(IN HMACHINE hMachine  OPTIONAL,
+                   IN DEVINST dnDevInst,
+                   IN ULONG uProblemId,
+                   OUT LPWSTR lpString,
+                   IN UINT uMaxString)
+{
+    UINT MessageId = IDS_UNKNOWN;
+    UINT Ret = 0;
+
+    if (uProblemId < sizeof(ProblemStringId) / sizeof(ProblemStringId[0]))
+        MessageId = ProblemStringId[uProblemId];
+
+    if (uProblemId == 0)
+    {
+        if (uMaxString != 0)
+        {
+            Ret = LoadString(hDllInstance,
+                             MessageId,
+                             lpString,
+                             (int)uMaxString);
+        }
+        else
+        {
+            Ret = (UINT)LengthOfStrResource(hDllInstance,
+                                            MessageId);
+        }
+    }
+    else
+    {
+        LPWSTR szProblem, szInfo = L"FIXME";
+        DWORD dwRet;
+        BOOL AdvFormat = FALSE;
+        UINT StringIDs[] =
+        {
+            MessageId,
+            IDS_DEVCODE,
+        };
+
+        switch (uProblemId)
+        {
+            case CM_PROB_DEVLOADER_FAILED:
+            {
+                /* FIXME - if not a root bus devloader then use IDS_DEV_DEVLOADER_FAILED2 */
+                /* FIXME - get the type string (ie. ISAPNP, PCI or BIOS for root bus devloaders,
+                           or FLOP, ESDI, SCSI, etc for others */
+                AdvFormat = TRUE;
+                break;
+            }
+
+            case CM_PROB_DEVLOADER_NOT_FOUND:
+            {
+                /* FIXME - 4 cases:
+                   1) if it's a missing system devloader:
+                      - get the system devloader name
+                   2) if it's not a system devloader but still missing:
+                      - get the devloader name (file name?)
+                   3) if it's not a system devloader but the file can be found:
+                      - use IDS_DEV_DEVLOADER_NOT_FOUND2
+                   4) if it's a missing or empty software key
+                      - use IDS_DEV_DEVLOADER_NOT_FOUND3
+                      - AdvFormat = FALSE!
+                 */
+                AdvFormat = TRUE;
+                break;
+            }
+
+            case CM_PROB_INVALID_DATA:
+                /* FIXME - if the device isn't enumerated by the BIOS/ACPI use IDS_DEV_INVALID_DATA2 */
+                AdvFormat = FALSE;
+                break;
+
+            case CM_PROB_NORMAL_CONFLICT:
+                /* FIXME - get resource type (IRQ, DMA, Memory or I/O) */
+                AdvFormat = TRUE;
+                break;
+
+            case CM_PROB_UNKNOWN_RESOURCE:
+                /* FIXME - get the .inf file name */
+                AdvFormat = TRUE;
+                break;
+
+            case CM_PROB_DISABLED:
+                /* FIXME - if the device was disabled by the system use IDS_DEV_DISABLED2 */
+                break;
+
+            case CM_PROB_FAILED_ADD:
+                /* FIXME - get the name of the sub-device with the error */
+                AdvFormat = TRUE;
+                break;
+        }
+
+        if (AdvFormat)
+        {
+            StringIDs[1] = IDS_DEVCODE2;
+            dwRet = LoadAndFormatStringsCat(hDllInstance,
+                                            StringIDs,
+                                            sizeof(StringIDs) / sizeof(StringIDs[0]),
+                                            &szProblem,
+                                            szInfo,
+                                            uProblemId);
+        }
+        else
+        {
+            dwRet = LoadAndFormatStringsCat(hDllInstance,
+                                            StringIDs,
+                                            sizeof(StringIDs) / sizeof(StringIDs[0]),
+                                            &szProblem,
+                                            uProblemId);
+        }
+
+        if (dwRet != 0)
+        {
+            if (uMaxString != 0 && uMaxString >= dwRet)
+            {
+                wcscpy(lpString,
+                       szProblem);
+            }
+
+            LocalFree((HLOCAL)szProblem);
+
+            Ret = dwRet;
+        }
+    }
+
+    return Ret;
+}
diff --git a/reactos/dll/win32/devmgr_new/hwpage.c b/reactos/dll/win32/devmgr_new/hwpage.c
new file mode 100644 (file)
index 0000000..2d7eae6
--- /dev/null
@@ -0,0 +1,1116 @@
+/*
+ * ReactOS Device Manager Applet
+ * Copyright (C) 2004 - 2005 ReactOS Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+/*
+ * PROJECT:         ReactOS devmgr.dll
+ * FILE:            lib/devmgr/hwpage.c
+ * PURPOSE:         ReactOS Device Manager
+ * PROGRAMMER:      Thomas Weidenmueller <w3seek@reactos.com>
+ * UPDATE HISTORY:
+ *      04-04-2004  Created
+ */
+
+#include "precomp.h"
+
+
+typedef struct _HWDEVINFO
+{
+    struct _HWCLASSDEVINFO *ClassDevInfo;
+    SP_DEVINFO_DATA DevInfoData;
+    BOOL HideDevice;
+} HWDEVINFO, *PHWDEVINFO;
+
+typedef struct _HWCLASSDEVINFO
+{
+    GUID Guid;
+    HDEVINFO hDevInfo;
+    INT ImageIndex;
+    INT ItemCount;
+    PHWDEVINFO HwDevInfo;
+} HWCLASSDEVINFO, *PHWCLASSDEVINFO;
+
+typedef struct _HARDWARE_PAGE_DATA
+{
+    HWND hWnd;
+    HWND hWndDevList;
+    HINSTANCE hComCtl32; /* only save this to keep track of the references */
+    INT DevListViewHeight;
+    SP_CLASSIMAGELIST_DATA ClassImageListData;
+    HWPAGE_DISPLAYMODE DisplayMode;
+
+    /* parent window subclass info */
+    WNDPROC ParentOldWndProc;
+    HWND hWndParent;
+
+    UINT NumberOfGuids;
+    HWCLASSDEVINFO ClassDevInfo[1];
+    /* struct may be dynamically expanded here! */
+} HARDWARE_PAGE_DATA, *PHARDWARE_PAGE_DATA;
+
+#define CX_TYPECOLUMN_WIDTH 80
+
+static VOID
+InitializeDevicesList(IN PHARDWARE_PAGE_DATA hpd)
+{
+    LVCOLUMN lvc;
+    RECT rcClient;
+    WCHAR szColName[255];
+    int iCol = 0;
+
+    /* set the list view style */
+    (void)ListView_SetExtendedListViewStyle(hpd->hWndDevList,
+                                            LVS_EX_FULLROWSELECT);
+
+    /* set the list view image list */
+    if (hpd->ClassImageListData.ImageList != NULL)
+    {
+        (void)ListView_SetImageList(hpd->hWndDevList,
+                                    hpd->ClassImageListData.ImageList,
+                                    LVSIL_SMALL);
+    }
+
+    GetClientRect(hpd->hWndDevList,
+                  &rcClient);
+
+    /* add the list view columns */
+    lvc.mask = LVCF_TEXT | LVCF_WIDTH;
+    lvc.fmt = LVCFMT_LEFT;
+    lvc.pszText = szColName;
+
+    if (LoadString(hDllInstance,
+                   IDS_NAME,
+                   szColName,
+                   sizeof(szColName) / sizeof(szColName[0])))
+    {
+        lvc.cx = rcClient.right - CX_TYPECOLUMN_WIDTH -
+                 GetSystemMetrics(SM_CXVSCROLL);
+        (void)ListView_InsertColumn(hpd->hWndDevList,
+                                    iCol++,
+                                    &lvc);
+    }
+    if (LoadString(hDllInstance,
+                   IDS_TYPE,
+                   szColName,
+                   sizeof(szColName) / sizeof(szColName[0])))
+    {
+        lvc.cx = CX_TYPECOLUMN_WIDTH;
+        (void)ListView_InsertColumn(hpd->hWndDevList,
+                                    iCol++,
+                                    &lvc);
+    }
+}
+
+
+static BOOL
+DisplaySelectedDeviceProperties(IN PHARDWARE_PAGE_DATA hpd)
+{
+    PHWDEVINFO HwDevInfo;
+    SP_DEVINFO_DATA DevInfoData;
+    BOOL Ret = FALSE;
+
+    HwDevInfo = (PHWDEVINFO)ListViewGetSelectedItemData(hpd->hWndDevList);
+    if (HwDevInfo != NULL)
+    {
+        /* make a copy of the SP_DEVINFO_DATA structure on the stack, it may
+           become invalid in case the devices are updated */
+        DevInfoData = HwDevInfo->DevInfoData;
+
+        /* display the advanced properties */
+        Ret = DisplayDeviceAdvancedProperties(hpd->hWnd,
+                                              NULL,
+                                              HwDevInfo->ClassDevInfo->hDevInfo,
+                                              &DevInfoData,
+                                              hpd->hComCtl32,
+                                              NULL,
+                                              0) != -1;
+    }
+
+    return Ret;
+}
+
+
+static VOID
+UpdateControlStates(IN PHARDWARE_PAGE_DATA hpd)
+{
+    PHWDEVINFO HwDevInfo;
+    HWND hBtnTroubleShoot, hBtnProperties;
+
+    hBtnTroubleShoot = GetDlgItem(hpd->hWnd,
+                                  IDC_TROUBLESHOOT);
+    hBtnProperties = GetDlgItem(hpd->hWnd,
+                                IDC_PROPERTIES);
+
+    HwDevInfo = (PHWDEVINFO)ListViewGetSelectedItemData(hpd->hWndDevList);
+    if (HwDevInfo != NULL)
+    {
+        /* update static controls */
+        WCHAR szBuffer[256];
+        LPWSTR szFormatted = NULL;
+
+        /* get the manufacturer string */
+        if (GetDeviceManufacturerString(HwDevInfo->ClassDevInfo->hDevInfo,
+                                        &HwDevInfo->DevInfoData,
+                                        szBuffer,
+                                        sizeof(szBuffer) / sizeof(szBuffer[0])) &&
+            LoadAndFormatString(hDllInstance,
+                                IDS_MANUFACTURER,
+                                &szFormatted,
+                                szBuffer) != 0)
+        {
+            SetDlgItemText(hpd->hWnd,
+                           IDC_MANUFACTURER,
+                           szFormatted);
+            LocalFree((HLOCAL)szFormatted);
+        }
+
+        /* get the location string */
+        if (GetDeviceLocationString(HwDevInfo->ClassDevInfo->hDevInfo,
+                                    &HwDevInfo->DevInfoData,
+                                    0,
+                                    szBuffer,
+                                    sizeof(szBuffer) / sizeof(szBuffer[0])) &&
+            LoadAndFormatString(hDllInstance,
+                                IDS_LOCATION,
+                                &szFormatted,
+                                szBuffer) != 0)
+        {
+            SetDlgItemText(hpd->hWnd,
+                           IDC_LOCATION,
+                           szFormatted);
+            LocalFree((HLOCAL)szFormatted);
+        }
+
+        if (GetDeviceStatusString(HwDevInfo->DevInfoData.DevInst,
+                                  NULL,
+                                  szBuffer,
+                                  sizeof(szBuffer) / sizeof(szBuffer[0])) &&
+            LoadAndFormatString(hDllInstance,
+                                IDS_STATUS,
+                                &szFormatted,
+                                szBuffer) != 0)
+        {
+            SetDlgItemText(hpd->hWnd,
+                           IDC_STATUS,
+                           szFormatted);
+            LocalFree((HLOCAL)szFormatted);
+        }
+    }
+    else
+    {
+        /* clear static controls */
+        SetDlgItemText(hpd->hWnd,
+                       IDC_MANUFACTURER,
+                       NULL);
+        SetDlgItemText(hpd->hWnd,
+                       IDC_LOCATION,
+                       NULL);
+        SetDlgItemText(hpd->hWnd,
+                       IDC_STATUS,
+                       NULL);
+    }
+
+    EnableWindow(hBtnTroubleShoot,
+                 HwDevInfo != NULL);
+    EnableWindow(hBtnProperties,
+                 HwDevInfo != NULL);
+}
+
+
+static VOID
+FreeDevicesList(IN PHARDWARE_PAGE_DATA hpd)
+{
+    PHWCLASSDEVINFO ClassDevInfo, LastClassDevInfo;
+
+    ClassDevInfo = hpd->ClassDevInfo;
+    LastClassDevInfo = ClassDevInfo + hpd->NumberOfGuids;
+
+    /* free the device info set handles and structures */
+    while (ClassDevInfo != LastClassDevInfo)
+    {
+        if (ClassDevInfo->hDevInfo != INVALID_HANDLE_VALUE)
+        {
+            SetupDiDestroyDeviceInfoList(ClassDevInfo->hDevInfo);
+            ClassDevInfo->hDevInfo = INVALID_HANDLE_VALUE;
+        }
+
+        ClassDevInfo->ItemCount = 0;
+        ClassDevInfo->ImageIndex = 0;
+
+        if (ClassDevInfo->HwDevInfo != NULL)
+        {
+            HeapFree(GetProcessHeap(),
+                     0,
+                     ClassDevInfo->HwDevInfo);
+            ClassDevInfo->HwDevInfo = NULL;
+        }
+
+        ClassDevInfo++;
+    }
+}
+
+
+static VOID
+BuildDevicesList(IN PHARDWARE_PAGE_DATA hpd)
+{
+    PHWCLASSDEVINFO ClassDevInfo, LastClassDevInfo;
+    SP_DEVINFO_DATA DevInfoData;
+
+    DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+
+    ClassDevInfo = hpd->ClassDevInfo;
+    LastClassDevInfo = ClassDevInfo + hpd->NumberOfGuids;
+
+    while (ClassDevInfo != LastClassDevInfo)
+    {
+        ClassDevInfo->ImageIndex = -1;
+
+        /* open a class device handle for the GUID we're processing */
+        ClassDevInfo->hDevInfo = SetupDiGetClassDevs(&ClassDevInfo->Guid,
+                                                     NULL,
+                                                     hpd->hWnd,
+                                                     DIGCF_PRESENT | DIGCF_PROFILE);
+        if (ClassDevInfo->hDevInfo != INVALID_HANDLE_VALUE)
+        {
+            DWORD MemberIndex = 0;
+
+            SetupDiGetClassImageIndex(&hpd->ClassImageListData,
+                                      &ClassDevInfo->Guid,
+                                      &ClassDevInfo->ImageIndex);
+
+            /* enumerate all devices in the class */
+            while (SetupDiEnumDeviceInfo(ClassDevInfo->hDevInfo,
+                                         MemberIndex++,
+                                         &DevInfoData))
+            {
+                BOOL HideDevice = FALSE;
+
+                if (ClassDevInfo->HwDevInfo != NULL)
+                {
+                    PHWDEVINFO HwNewDevInfo = HeapReAlloc(GetProcessHeap(),
+                                                          0,
+                                                          ClassDevInfo->HwDevInfo,
+                                                          (ClassDevInfo->ItemCount + 1) *
+                                                              sizeof(HWDEVINFO));
+                    if (HwNewDevInfo != NULL)
+                    {
+                        ClassDevInfo->HwDevInfo = HwNewDevInfo;
+                    }
+                    else
+                    {
+                        ERR("Unable to allocate memory for %d SP_DEVINFO_DATA structures!\n",
+                            ClassDevInfo->ItemCount + 1);
+                        break;
+                    }
+                }
+                else
+                {
+                    ClassDevInfo->HwDevInfo = HeapAlloc(GetProcessHeap(),
+                                                        0,
+                                                        sizeof(HWDEVINFO));
+                    if (ClassDevInfo->HwDevInfo == NULL)
+                    {
+                        ERR("Unable to allocate memory for a SP_DEVINFO_DATA structures!\n");
+                        break;
+                    }
+                }
+
+                /* Find out if the device should be hidden by default */
+                IsDeviceHidden(DevInfoData.DevInst,
+                               NULL,
+                               &HideDevice);
+
+                /* save all information for the current device */
+                ClassDevInfo->HwDevInfo[ClassDevInfo->ItemCount].ClassDevInfo = ClassDevInfo;
+                ClassDevInfo->HwDevInfo[ClassDevInfo->ItemCount].DevInfoData = DevInfoData;
+                ClassDevInfo->HwDevInfo[ClassDevInfo->ItemCount++].HideDevice = HideDevice;
+            }
+        }
+
+        ClassDevInfo++;
+    }
+}
+
+
+static BOOL
+DeviceIdMatch(IN HDEVINFO DeviceInfoSet,
+              IN PSP_DEVINFO_DATA DeviceInfoData,
+              IN LPCWSTR lpDeviceId)
+{
+    DWORD DevIdLen;
+    LPWSTR lpQueriedDeviceId;
+    BOOL Ret = FALSE;
+
+    if (!SetupDiGetDeviceInstanceId(DeviceInfoSet,
+                                    DeviceInfoData,
+                                    NULL,
+                                    0,
+                                    &DevIdLen) &&
+        GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+    {
+        if (DevIdLen == wcslen(lpDeviceId) + 1)
+        {
+            lpQueriedDeviceId = HeapAlloc(GetProcessHeap(),
+                                          0,
+                                          DevIdLen * sizeof(WCHAR));
+            if (lpQueriedDeviceId != NULL)
+            {
+                if (SetupDiGetDeviceInstanceId(DeviceInfoSet,
+                                               DeviceInfoData,
+                                               lpQueriedDeviceId,
+                                               DevIdLen,
+                                               NULL))
+                {
+                    Ret = (wcscmp(lpDeviceId,
+                                  lpQueriedDeviceId) == 0);
+                }
+
+                HeapFree(GetProcessHeap(),
+                         0,
+                         lpQueriedDeviceId);
+            }
+        }
+    }
+
+    return Ret;
+}
+
+
+static VOID
+FillDevicesListViewControl(IN PHARDWARE_PAGE_DATA hpd,
+                           IN LPCWSTR lpSelectDeviceId  OPTIONAL,
+                           IN GUID *SelectedClassGuid  OPTIONAL)
+{
+    PHWCLASSDEVINFO ClassDevInfo, LastClassDevInfo;
+    PHWDEVINFO HwDevInfo, LastHwDevInfo;
+    WCHAR szBuffer[255];
+    BOOL SelectedInClass;
+    INT ItemCount = 0;
+
+    BuildDevicesList(hpd);
+
+    ClassDevInfo = hpd->ClassDevInfo;
+    LastClassDevInfo = ClassDevInfo + hpd->NumberOfGuids;
+
+    while (ClassDevInfo != LastClassDevInfo)
+    {
+        if (ClassDevInfo->HwDevInfo != NULL)
+        {
+            HwDevInfo = ClassDevInfo->HwDevInfo;
+            LastHwDevInfo = HwDevInfo + ClassDevInfo->ItemCount;
+
+            SelectedInClass = (SelectedClassGuid != NULL &&
+                               IsEqualGUID(SelectedClassGuid,
+                                           &ClassDevInfo->Guid));
+            while (HwDevInfo != LastHwDevInfo)
+            {
+                INT iItem;
+                LVITEM li = {0};
+
+                /* get the device name */
+                if (!HwDevInfo->HideDevice &&
+                    GetDeviceDescriptionString(ClassDevInfo->hDevInfo,
+                                               &HwDevInfo->DevInfoData,
+                                               szBuffer,
+                                               sizeof(szBuffer) / sizeof(szBuffer[0])))
+                {
+                    li.mask = LVIF_PARAM | LVIF_STATE | LVIF_TEXT | LVIF_IMAGE;
+                    li.iItem = ItemCount;
+                    if ((ItemCount == 0 && lpSelectDeviceId == NULL) ||
+                        (SelectedInClass &&
+                         DeviceIdMatch(ClassDevInfo->hDevInfo,
+                                       &HwDevInfo->DevInfoData,
+                                       lpSelectDeviceId)))
+                    {
+                        li.state = LVIS_SELECTED;
+                    }
+                    li.stateMask = LVIS_SELECTED;
+                    li.pszText = szBuffer;
+                    li.iImage = ClassDevInfo->ImageIndex;
+                    li.lParam = (LPARAM)HwDevInfo;
+
+                    iItem = ListView_InsertItem(hpd->hWndDevList,
+                                                &li);
+                    if (iItem != -1)
+                    {
+                        ItemCount++;
+
+                        /* get the device type for the second column */
+                        if (GetDeviceTypeString(&HwDevInfo->DevInfoData,
+                                                szBuffer,
+                                                sizeof(szBuffer) / sizeof(szBuffer[0])))
+                        {
+                            li.mask = LVIF_TEXT;
+                            li.iItem = iItem;
+                            li.iSubItem = 1;
+
+                            (void)ListView_SetItem(hpd->hWndDevList,
+                                                   &li);
+                        }
+                    }
+                }
+
+                HwDevInfo++;
+            }
+        }
+
+        ClassDevInfo++;
+    }
+
+    /* update the controls */
+    UpdateControlStates(hpd);
+}
+
+
+static VOID
+UpdateDevicesListViewControl(IN PHARDWARE_PAGE_DATA hpd)
+{
+    PHWDEVINFO HwDevInfo;
+    GUID SelectedClassGuid = {0};
+    LPWSTR lpDeviceId = NULL;
+
+    /* if a device currently is selected, remember the device id so we can
+       select the device after the update if still present */
+    HwDevInfo = (PHWDEVINFO)ListViewGetSelectedItemData(hpd->hWndDevList);
+    if (HwDevInfo != NULL)
+    {
+        DWORD DevIdLen;
+        if (!SetupDiGetDeviceInstanceId(HwDevInfo->ClassDevInfo->hDevInfo,
+                                        &HwDevInfo->DevInfoData,
+                                        NULL,
+                                        0,
+                                        &DevIdLen) &&
+            GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+        {
+            SelectedClassGuid = HwDevInfo->DevInfoData.ClassGuid;
+            lpDeviceId = HeapAlloc(GetProcessHeap(),
+                                   0,
+                                   DevIdLen * sizeof(WCHAR));
+            if (lpDeviceId != NULL &&
+                !SetupDiGetDeviceInstanceId(HwDevInfo->ClassDevInfo->hDevInfo,
+                                            &HwDevInfo->DevInfoData,
+                                            lpDeviceId,
+                                            DevIdLen,
+                                            NULL))
+            {
+                HeapFree(GetProcessHeap(),
+                         0,
+                         lpDeviceId);
+                lpDeviceId = NULL;
+            }
+        }
+    }
+
+    /* clear the devices list view control */
+    (void)ListView_DeleteAllItems(hpd->hWndDevList);
+
+    /* free the device list */
+    FreeDevicesList(hpd);
+
+    /* build rebuild the device list and fill the list box again */
+    FillDevicesListViewControl(hpd,
+                               lpDeviceId,
+                               (lpDeviceId != NULL ?
+                                    &SelectedClassGuid :
+                                    NULL));
+
+    if (lpDeviceId != NULL)
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpDeviceId);
+    }
+}
+
+
+static LRESULT
+CALLBACK
+ParentSubWndProc(IN HWND hwnd,
+                 IN UINT uMsg,
+                 IN WPARAM wParam,
+                 IN LPARAM lParam)
+{
+    PHARDWARE_PAGE_DATA hpd;
+
+    hpd = (PHARDWARE_PAGE_DATA)GetProp(hwnd,
+                                       L"DevMgrSubClassInfo");
+    if (hpd != NULL)
+    {
+        if (uMsg == WM_SIZE)
+        {
+            /* resize the hardware page */
+            SetWindowPos(hpd->hWnd,
+                         NULL,
+                         0,
+                         0,
+                         LOWORD(lParam),
+                         HIWORD(lParam),
+                         SWP_NOZORDER);
+        }
+        else if (uMsg == WM_DEVICECHANGE && IsWindowVisible(hpd->hWnd))
+        {
+            /* forward a WM_DEVICECHANGE message to the hardware
+               page which wouldn't get the message itself as it is
+               a child window */
+            SendMessage(hpd->hWnd,
+                        WM_DEVICECHANGE,
+                        wParam,
+                        lParam);
+        }
+
+        /* pass the message the the old window proc */
+        return CallWindowProc(hpd->ParentOldWndProc,
+                              hwnd,
+                              uMsg,
+                              wParam,
+                              lParam);
+    }
+    else
+    {
+        /* this is not a good idea if the subclassed window was an ansi
+           window, but we failed finding out the previous window proc
+           so we can't use CallWindowProc. This should rarely - if ever -
+           happen. */
+
+        return DefWindowProc(hwnd,
+                             uMsg,
+                             wParam,
+                             lParam);
+    }
+}
+
+
+static VOID
+HardwareDlgResize(IN PHARDWARE_PAGE_DATA hpd,
+                  IN INT cx,
+                  IN INT cy)
+{
+    HDWP dwp;
+    HWND hControl, hButton;
+    INT Width, x, y;
+    RECT rc, rcButton;
+    POINT pt = {0};
+    POINT ptMargin = {0};
+    POINT ptMarginGroup = {0};
+
+    /* use left margin of the IDC_DEVICES label as the right
+       margin of all controls outside the group box */
+    hControl = GetDlgItem(hpd->hWnd,
+                          IDC_DEVICES);
+    GetWindowRect(hControl,
+                  &rc);
+    MapWindowPoints(hControl,
+                    hpd->hWnd,
+                    &ptMargin,
+                    1);
+
+    Width = cx - (2 * ptMargin.x);
+
+    if ((dwp = BeginDeferWindowPos(8)))
+    {
+        /* rc already has the window rect of IDC_DEVICES! */
+        if (!(dwp = DeferWindowPos(dwp,
+                                   hControl,
+                                   NULL,
+                                   0,
+                                   0,
+                                   Width,
+                                   rc.bottom - rc.top,
+                                   SWP_NOMOVE | SWP_NOZORDER)))
+        {
+            return;
+        }
+
+        /* resize the devices list view control */
+        GetWindowRect(hpd->hWndDevList,
+                      &rc);
+        MapWindowPoints(hpd->hWndDevList,
+                        hpd->hWnd,
+                        &pt,
+                        1);
+        y = pt.y + hpd->DevListViewHeight + ptMargin.y;
+        if (!(dwp = DeferWindowPos(dwp,
+                                   hpd->hWndDevList,
+                                   NULL,
+                                   0,
+                                   0,
+                                   Width,
+                                   hpd->DevListViewHeight,
+                                   SWP_NOMOVE | SWP_NOZORDER)))
+        {
+            return;
+        }
+
+        /* resize the group box control */
+        hControl = GetDlgItem(hpd->hWnd,
+                              IDC_PROPERTIESGROUP);
+        GetWindowRect(hControl,
+                      &rc);
+        if (!(dwp = DeferWindowPos(dwp,
+                                   hControl,
+                                   NULL,
+                                   ptMargin.x,
+                                   y,
+                                   Width,
+                                   cy - y - ptMargin.y,
+                                   SWP_NOZORDER)))
+        {
+            return;
+        }
+
+        /* use left margin of the IDC_MANUFACTURER label as the right
+           margin of all controls inside the group box */
+        hControl = GetDlgItem(hpd->hWnd,
+                              IDC_MANUFACTURER);
+        GetWindowRect(hControl,
+                      &rc);
+        MapWindowPoints(hControl,
+                        hpd->hWnd,
+                        &ptMarginGroup,
+                        1);
+
+        ptMarginGroup.y = ptMargin.y * 2;
+        Width = cx - (2 * ptMarginGroup.x);
+        y += ptMarginGroup.y;
+        if (!(dwp = DeferWindowPos(dwp,
+                                   hControl,
+                                   NULL,
+                                   ptMarginGroup.x,
+                                   y,
+                                   Width,
+                                   rc.bottom - rc.top,
+                                   SWP_NOZORDER)))
+        {
+            return;
+        }
+        y += rc.bottom - rc.top + (ptMargin.y / 2);
+
+        /* resize the IDC_LOCATION label */
+        hControl = GetDlgItem(hpd->hWnd,
+                              IDC_LOCATION);
+        GetWindowRect(hControl,
+                      &rc);
+        if (!(dwp = DeferWindowPos(dwp,
+                                   hControl,
+                                   NULL,
+                                   ptMarginGroup.x,
+                                   y,
+                                   Width,
+                                   rc.bottom - rc.top,
+                                   SWP_NOZORDER)))
+        {
+            return;
+        }
+        y += rc.bottom - rc.top + (ptMargin.y / 2);
+
+        /* measure the size of the buttons */
+        hButton = GetDlgItem(hpd->hWnd,
+                             IDC_PROPERTIES);
+        GetWindowRect(hButton,
+                      &rcButton);
+
+        /* resize the IDC_STATUS label */
+        hControl = GetDlgItem(hpd->hWnd,
+                              IDC_STATUS);
+        GetWindowRect(hControl,
+                      &rc);
+        if (!(dwp = DeferWindowPos(dwp,
+                                   hControl,
+                                   NULL,
+                                   ptMarginGroup.x,
+                                   y,
+                                   Width,
+                                   cy - y - (3 * ptMargin.y) -
+                                       (rcButton.bottom - rcButton.top),
+                                   SWP_NOZORDER)))
+        {
+            return;
+        }
+
+        /* move the IDC_PROPERTIES button */
+        y = cy - (2 * ptMargin.y) - (rcButton.bottom - rcButton.top);
+        x = cx - ptMarginGroup.x - (rcButton.right - rcButton.left);
+        if (!(dwp = DeferWindowPos(dwp,
+                                   hButton,
+                                   NULL,
+                                   x,
+                                   y,
+                                   0,
+                                   0,
+                                   SWP_NOSIZE | SWP_NOZORDER)))
+        {
+            return;
+        }
+
+        /* move the IDC_TROUBLESHOOT button */
+        hButton = GetDlgItem(hpd->hWnd,
+                             IDC_TROUBLESHOOT);
+        GetWindowRect(hButton,
+                      &rcButton);
+        x -= (ptMargin.x / 2) + (rcButton.right - rcButton.left);
+        if (!(dwp = DeferWindowPos(dwp,
+                                   hButton,
+                                   NULL,
+                                   x,
+                                   y,
+                                   0,
+                                   0,
+                                   SWP_NOSIZE | SWP_NOZORDER)))
+        {
+            return;
+        }
+
+        EndDeferWindowPos(dwp);
+    }
+}
+
+
+static VOID
+EnableTroubleShoot(PHARDWARE_PAGE_DATA hpd,
+                   BOOL Enable)
+{
+    HWND hBtnTroubleShoot = GetDlgItem(hpd->hWnd,
+                                       IDC_TROUBLESHOOT);
+
+    ShowWindow(hBtnTroubleShoot,
+               Enable ? SW_SHOW : SW_HIDE);
+}
+
+
+static INT_PTR
+CALLBACK
+HardwareDlgProc(IN HWND hwndDlg,
+                IN UINT uMsg,
+                IN WPARAM wParam,
+                IN LPARAM lParam)
+{
+    PHARDWARE_PAGE_DATA hpd;
+    INT_PTR Ret = FALSE;
+
+    hpd = (PHARDWARE_PAGE_DATA)GetWindowLongPtr(hwndDlg,
+                                                DWL_USER);
+
+    if (hpd != NULL || uMsg == WM_INITDIALOG)
+    {
+        switch (uMsg)
+        {
+            case WM_NOTIFY:
+            {
+                NMHDR *pnmh = (NMHDR*)lParam;
+                if (pnmh->hwndFrom == hpd->hWndDevList)
+                {
+                    switch (pnmh->code)
+                    {
+                        case LVN_ITEMCHANGED:
+                        {
+                            LPNMLISTVIEW pnmv = (LPNMLISTVIEW)lParam;
+
+                            if ((pnmv->uChanged & LVIF_STATE) &&
+                                ((pnmv->uOldState & (LVIS_FOCUSED | LVIS_SELECTED)) ||
+                                 (pnmv->uNewState & (LVIS_FOCUSED | LVIS_SELECTED))))
+                            {
+                                UpdateControlStates(hpd);
+                            }
+                            break;
+                        }
+
+                        case NM_DBLCLK:
+                        {
+                            DisplaySelectedDeviceProperties(hpd);
+                            break;
+                        }
+                    }
+                }
+                break;
+            }
+
+            case WM_COMMAND:
+            {
+                switch (LOWORD(wParam))
+                {
+                    case IDC_TROUBLESHOOT:
+                    {
+                        /* FIXME - start the help using the command in the window text */
+                        break;
+                    }
+
+                    case IDC_PROPERTIES:
+                    {
+                        DisplaySelectedDeviceProperties(hpd);
+                        break;
+                    }
+                }
+                break;
+            }
+
+            case WM_SIZE:
+                HardwareDlgResize(hpd,
+                                  (INT)LOWORD(lParam),
+                                  (INT)HIWORD(lParam));
+                break;
+
+            case WM_SETTEXT:
+            {
+                LPCWSTR szWndText = (LPCWSTR)lParam;
+                EnableTroubleShoot(hpd,
+                                   (szWndText != NULL && szWndText[0] != L'\0'));
+                break;
+            }
+
+            case WM_DEVICECHANGE:
+            {
+                /* FIXME - don't call UpdateDevicesListViewControl for all events */
+                UpdateDevicesListViewControl(hpd);
+                Ret = TRUE;
+                break;
+            }
+
+            case WM_INITDIALOG:
+            {
+                hpd = (PHARDWARE_PAGE_DATA)lParam;
+                if (hpd != NULL)
+                {
+                    HWND hWndParent;
+
+                    hpd->hWnd = hwndDlg;
+                    SetWindowLongPtr(hwndDlg,
+                                     DWL_USER,
+                                     (DWORD_PTR)hpd);
+
+                    hpd->ClassImageListData.cbSize = sizeof(SP_CLASSIMAGELIST_DATA);
+
+                    SetupDiGetClassImageList(&hpd->ClassImageListData);
+
+                    /* calculate the size of the devices list view control */
+                    hpd->hWndDevList = GetDlgItem(hwndDlg,
+                                                  IDC_LV_DEVICES);
+                    if (hpd->hWndDevList != NULL)
+                    {
+                        RECT rcClient;
+                        GetClientRect(hpd->hWndDevList,
+                                      &rcClient);
+                        hpd->DevListViewHeight = rcClient.bottom;
+
+                        if (hpd->DisplayMode == HWPD_LARGELIST)
+                        {
+                            hpd->DevListViewHeight = (hpd->DevListViewHeight * 3) / 2;
+                        }
+                    }
+
+                    /* subclass the parent window */
+                    hWndParent = GetAncestor(hwndDlg,
+                                             GA_PARENT);
+                    if (hWndParent != NULL)
+                    {
+                        RECT rcClient;
+
+                        if (GetClientRect(hWndParent,
+                                          &rcClient) &&
+                            SetWindowPos(hwndDlg,
+                                         NULL,
+                                         0,
+                                         0,
+                                         rcClient.right,
+                                         rcClient.bottom,
+                                         SWP_NOZORDER))
+                        {
+                            /* subclass the parent window. This is not safe
+                               if the parent window belongs to another thread! */
+                            hpd->ParentOldWndProc = (WNDPROC)SetWindowLongPtr(hWndParent,
+                                                                              GWLP_WNDPROC,
+                                                                              (LONG_PTR)ParentSubWndProc);
+
+                            if (hpd->ParentOldWndProc != NULL &&
+                                SetProp(hWndParent,
+                                        L"DevMgrSubClassInfo",
+                                        (HANDLE)hpd))
+                            {
+                                hpd->hWndParent = hWndParent;
+                            }
+                        }
+                    }
+
+                    /* initialize the devices list view control */
+                    InitializeDevicesList(hpd);
+
+                    /* fill the devices list view control */
+                    FillDevicesListViewControl(hpd,
+                                               NULL,
+                                               NULL);
+
+                    /* decide whether to show or hide the troubleshoot button */
+                    EnableTroubleShoot(hpd,
+                                       GetWindowTextLength(hwndDlg) != 0);
+                }
+                Ret = TRUE;
+                break;
+            }
+
+            case WM_DESTROY:
+            {
+                /* zero hpd pointer in window data, because it can be used later (WM_DESTROY has not to be last message) */
+                SetWindowLongPtr(hwndDlg, DWL_USER, (DWORD_PTR)NULL);
+                
+                /* free devices list */
+                FreeDevicesList(hpd);
+
+                /* restore the old window proc of the subclassed parent window */
+                if (hpd->hWndParent != NULL && hpd->ParentOldWndProc != NULL)
+                {
+                    SetWindowLongPtr(hpd->hWndParent,
+                                     GWLP_WNDPROC,
+                                     (LONG_PTR)hpd->ParentOldWndProc);
+                }
+
+                if (hpd->ClassImageListData.ImageList != NULL)
+                {
+                    SetupDiDestroyClassImageList(&hpd->ClassImageListData);
+                }
+
+                /* free the reference to comctl32 */
+                FreeLibrary(hpd->hComCtl32);
+                hpd->hComCtl32 = NULL;
+
+                /* free the allocated resources */
+                HeapFree(GetProcessHeap(),
+                         0,
+                         hpd);
+                break;
+            }
+        }
+    }
+
+    return Ret;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceCreateHardwarePageEx
+ *
+ * DESCRIPTION
+ *   Creates a hardware page
+ *
+ * ARGUMENTS
+ *   hWndParent:     Handle to the parent window
+ *   lpGuids:        An array of guids of devices that are to be listed
+ *   uNumberOfGuids: Numbers of guids in the Guids array
+ *   DisplayMode:    Sets the size of the device list view control
+ *
+ * RETURN VALUE
+ *   Returns the handle of the hardware page window that has been created or
+ *   NULL if it failed.
+ *
+ * @implemented
+ */
+HWND
+WINAPI
+DeviceCreateHardwarePageEx(IN HWND hWndParent,
+                           IN LPGUID lpGuids,
+                           IN UINT uNumberOfGuids,
+                           IN HWPAGE_DISPLAYMODE DisplayMode)
+{
+    PHARDWARE_PAGE_DATA hpd;
+
+    /* allocate the HARDWARE_PAGE_DATA structure. Make sure it is
+       zeroed because the initialization code assumes that in
+       failure cases! */
+    hpd = HeapAlloc(GetProcessHeap(),
+                    HEAP_ZERO_MEMORY,
+                    FIELD_OFFSET(HARDWARE_PAGE_DATA,
+                                 ClassDevInfo[uNumberOfGuids]));
+    if (hpd != NULL)
+    {
+        HWND hWnd;
+        UINT i;
+
+        hpd->DisplayMode = ((DisplayMode > HWPD_MAX) ? HWPD_STANDARDLIST : DisplayMode);
+
+        /* initialize the HARDWARE_PAGE_DATA structure */
+        hpd->NumberOfGuids = uNumberOfGuids;
+        for (i = 0;
+             i < uNumberOfGuids;
+             i++)
+        {
+            hpd->ClassDevInfo[i].hDevInfo = INVALID_HANDLE_VALUE;
+            hpd->ClassDevInfo[i].Guid = lpGuids[i];
+        }
+
+        /* load comctl32.dll dynamically */
+        hpd->hComCtl32 = LoadAndInitComctl32();
+        if (hpd->hComCtl32 == NULL)
+        {
+            goto Cleanup;
+        }
+
+        /* create the dialog */
+        hWnd = CreateDialogParam(hDllInstance,
+                                 MAKEINTRESOURCE(IDD_HARDWARE),
+                                 hWndParent,
+                                 HardwareDlgProc,
+                                 (LPARAM)hpd);
+        if (hWnd != NULL)
+        {
+            HeapFree(GetProcessHeap(), 0, hpd);
+            return hWnd;
+        }
+        else
+        {
+Cleanup:
+            /* oops, something went wrong... */
+            if (hpd->hComCtl32 != NULL)
+            {
+                FreeLibrary(hpd->hComCtl32);
+            }
+
+            HeapFree(GetProcessHeap(),
+                     0,
+                     hpd);
+        }
+    }
+
+    return NULL;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceCreateHardwarePage
+ *
+ * DESCRIPTION
+ *   Creates a hardware page
+ *
+ * ARGUMENTS
+ *   hWndParent: Handle to the parent window
+ *   lpGuid:     Guid of the device
+ *
+ * RETURN VALUE
+ *   Returns the handle of the hardware page window that has been created or
+ *   NULL if it failed.
+ *
+ * @implemented
+ */
+HWND
+WINAPI
+DeviceCreateHardwarePage(IN HWND hWndParent,
+                         IN LPGUID lpGuid)
+{
+    return DeviceCreateHardwarePageEx(hWndParent,
+                                      lpGuid,
+                                      1,
+                                      HWPD_LARGELIST);
+}
diff --git a/reactos/dll/win32/devmgr_new/hwresource.c b/reactos/dll/win32/devmgr_new/hwresource.c
new file mode 100644 (file)
index 0000000..fcc8095
--- /dev/null
@@ -0,0 +1,381 @@
+/*
+ * PROJECT:         ReactOS devmgr.dll
+ * FILE:            dll/win32/devmgr/hwresource.c
+ * PURPOSE:         ReactOS Device Manager
+ * PROGRAMMER:      Johannes Anderwald <johannes.anderwald@reactos.org>
+ * UPDATE HISTORY:
+ *      2005/11/24  Created
+ */
+
+#include "precomp.h"
+
+
+typedef struct
+{
+    HWND hWnd;
+    HWND hWndDevList;
+
+
+}HARDWARE_RESOURCE_DATA, *PHARDWARE_RESOURCE_DATA;
+
+/* Physical Addresses are always treated as 64-bit wide */
+typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
+
+#include <pshpack4.h>
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
+  UCHAR Type;
+  UCHAR ShareDisposition;
+  USHORT Flags;
+  union {
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length;
+    } Generic;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length;
+    } Port;
+    struct {
+#if defined(NT_PROCESSOR_GROUPS)
+      USHORT Level;
+      USHORT Group;
+#else
+      ULONG Level;
+#endif
+      ULONG Vector;
+      KAFFINITY Affinity;
+    } Interrupt;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    struct {
+      _ANONYMOUS_UNION union {
+        struct {
+#if defined(NT_PROCESSOR_GROUPS)
+          USHORT Group;
+#else
+          USHORT Reserved;
+#endif
+          USHORT MessageCount;
+          ULONG Vector;
+          KAFFINITY Affinity;
+        } Raw;
+        struct {
+#if defined(NT_PROCESSOR_GROUPS)
+          USHORT Level;
+          USHORT Group;
+#else
+          ULONG Level;
+#endif
+          ULONG Vector;
+          KAFFINITY Affinity;
+        } Translated;
+      } DUMMYUNIONNAME;
+    } MessageInterrupt;
+#endif
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length;
+    } Memory;
+    struct {
+      ULONG Channel;
+      ULONG Port;
+      ULONG Reserved1;
+    } Dma;
+    struct {
+      ULONG Data[3];
+    } DevicePrivate;
+    struct {
+      ULONG Start;
+      ULONG Length;
+      ULONG Reserved;
+    } BusNumber;
+    struct {
+      ULONG DataSize;
+      ULONG Reserved1;
+      ULONG Reserved2;
+    } DeviceSpecificData;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length40;
+    } Memory40;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length48;
+    } Memory48;
+    struct {
+      PHYSICAL_ADDRESS Start;
+      ULONG Length64;
+    } Memory64;
+#endif
+  } u;
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
+#include <poppack.h>
+typedef struct _CM_PARTIAL_RESOURCE_LIST {
+  USHORT Version;
+  USHORT Revision;
+  ULONG Count;
+  CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
+} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
+
+#define CmResourceTypeNull              0
+#define CmResourceTypePort              1
+#define CmResourceTypeInterrupt         2
+#define CmResourceTypeMemory            3
+#define CmResourceTypeDma               4
+#define CmResourceTypeDeviceSpecific    5
+#define CmResourceTypeBusNumber         6
+#define CmResourceTypeNonArbitrated     128
+#define CmResourceTypeConfigData        128
+#define CmResourceTypeDevicePrivate     129
+#define CmResourceTypePcCardConfig      130
+#define CmResourceTypeMfCardConfig      131
+
+typedef enum _INTERFACE_TYPE {
+  InterfaceTypeUndefined = -1,
+  Internal,
+  Isa,
+  Eisa,
+  MicroChannel,
+  TurboChannel,
+  PCIBus,
+  VMEBus,
+  NuBus,
+  PCMCIABus,
+  CBus,
+  MPIBus,
+  MPSABus,
+  ProcessorInternal,
+  InternalPowerBus,
+  PNPISABus,
+  PNPBus,
+  Vmcs,
+  MaximumInterfaceType
+} INTERFACE_TYPE, *PINTERFACE_TYPE;
+
+typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
+  INTERFACE_TYPE InterfaceType;
+  ULONG BusNumber;
+  CM_PARTIAL_RESOURCE_LIST PartialResourceList;
+} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_RESOURCE_LIST {
+  ULONG                       Count;
+  CM_FULL_RESOURCE_DESCRIPTOR List[1];
+} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
+
+
+#define CX_TYPECOLUMN_WIDTH 120
+
+static VOID
+InitializeDevicesList(
+    IN HWND hWndDevList)
+{
+    LVCOLUMN lvc;
+    RECT rcClient;
+    WCHAR szColName[255];
+    int iCol = 0;
+
+    /* set the list view style */
+    (void)ListView_SetExtendedListViewStyle(hWndDevList,
+                                            LVS_EX_FULLROWSELECT);
+
+    GetClientRect(hWndDevList,
+                  &rcClient);
+
+    /* add the list view columns */
+    lvc.mask = LVCF_TEXT | LVCF_WIDTH;
+    lvc.fmt = LVCFMT_LEFT;
+    lvc.pszText = szColName;
+
+    if (LoadString(hDllInstance,
+                   IDS_RESOURCE_COLUMN,
+                   szColName,
+                   sizeof(szColName) / sizeof(szColName[0])))
+    {
+        lvc.cx = CX_TYPECOLUMN_WIDTH;
+        (void)ListView_InsertColumn(hWndDevList,
+                                    iCol++,
+                                    &lvc);
+    }
+    if (LoadString(hDllInstance,
+                   IDS_SETTING_COLUMN,
+                   szColName,
+                   sizeof(szColName) / sizeof(szColName[0])))
+    {
+        lvc.cx = rcClient.right - CX_TYPECOLUMN_WIDTH -
+                 GetSystemMetrics(SM_CXVSCROLL);
+
+        (void)ListView_InsertColumn(hWndDevList,
+                                    iCol++,
+                                    &lvc);
+    }
+}
+
+VOID
+InsertListItem(
+    IN HWND hWndDevList,
+    IN INT ItemCount,
+    IN LPWSTR ResourceType,
+    IN LPWSTR ResourceDescription)
+{
+    INT iItem;
+    LVITEM li = {0};
+
+    li.mask = LVIF_STATE | LVIF_TEXT;
+    li.iItem = ItemCount;
+    li.pszText = ResourceType;
+    //li.iImage = ClassDevInfo->ImageIndex;
+    iItem = ListView_InsertItem(hWndDevList, &li);
+
+    if (iItem != -1)
+    {
+        li.mask = LVIF_TEXT;
+        li.iItem = iItem;
+        li.iSubItem = 1;
+        li.pszText = ResourceDescription;
+        (void)ListView_SetItem(hWndDevList, &li);
+    }
+}
+
+VOID
+AddResourceItems(
+    IN PDEVADVPROP_INFO dap,
+    IN HWND hWndDevList)
+{
+    HKEY hKey;
+    WCHAR szBuffer[100];
+    WCHAR szDetail[100];
+    BYTE szData[512];
+    DWORD dwSize;
+    PCM_RESOURCE_LIST ResourceList;
+    LONG Result;
+    ULONG ItemCount = 0, Index;
+
+    wsprintf(szBuffer, L"SYSTEM\\CurrentControlSet\\Enum\\%s\\LogConf", dap->szDeviceID);
+    Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, szBuffer, 0, KEY_READ, &hKey);
+    if (Result != ERROR_SUCCESS)
+    {
+        /* failed to open device instance log conf dir */
+        return;
+    }
+
+    dwSize = sizeof(szData);
+    Result = RegQueryValueExW(hKey, L"BootConfig", NULL, NULL, szData, &dwSize);
+
+    RegCloseKey(hKey);
+    if (Result != ERROR_SUCCESS)
+    {
+        /* failed to query resources */
+        return;
+    }
+
+    ResourceList = (PCM_RESOURCE_LIST)szData;
+
+    for (Index = 0; Index < ResourceList->List[0].PartialResourceList.Count; Index++)
+    {
+         PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor = &ResourceList->List[0].PartialResourceList.PartialDescriptors[Index];
+         if (Descriptor->Type == CmResourceTypeInterrupt)
+         {
+             if (LoadString(hDllInstance, IDS_RESOURCE_INTERRUPT, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
+             {
+                 wsprintf(szDetail, L"0x%08x (%d)", Descriptor->u.Interrupt.Level, Descriptor->u.Interrupt.Vector);
+                 InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
+                 ItemCount++;
+             }
+         }
+         else if (Descriptor->Type == CmResourceTypePort)
+         {
+             if (LoadString(hDllInstance, IDS_RESOURCE_PORT, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
+             {
+                 wsprintf(szDetail, L"%08lx - %08lx", Descriptor->u.Port.Start.LowPart, Descriptor->u.Port.Start.LowPart + Descriptor->u.Port.Length - 1);
+                 InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
+                 ItemCount++;
+             }
+         }
+         else if (Descriptor->Type == CmResourceTypeMemory)
+         {
+             if (LoadString(hDllInstance, IDS_RESOURCE_MEMORY_RANGE, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
+             {
+                 wsprintf(szDetail, L"%08I64x - %08I64x", Descriptor->u.Memory.Start.QuadPart, Descriptor->u.Memory.Start.QuadPart + Descriptor->u.Memory.Length - 1);
+                 InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
+                 ItemCount++;
+             }
+         }
+         else if (Descriptor->Type == CmResourceTypeDma)
+         {
+             if (LoadString(hDllInstance, IDS_RESOURCE_DMA, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
+             {
+                 wsprintf(szDetail, L"%08ld", Descriptor->u.Dma.Channel);
+                 InsertListItem(hWndDevList, ItemCount, szBuffer, szDetail);
+                 ItemCount++;
+             }
+         }
+    }
+}
+
+
+static VOID
+UpdateDriverResourceDlg(IN HWND hwndDlg,
+                        IN PDEVADVPROP_INFO dap)
+{
+    /* set the device image */
+    SendDlgItemMessage(hwndDlg,
+                       IDC_DEVICON,
+                       STM_SETICON,
+                       (WPARAM)dap->hDevIcon,
+                       0);
+
+    /* set the device name edit control text */
+    SetDlgItemText(hwndDlg,
+                   IDC_DEVNAME,
+                   dap->szDevName);
+}
+
+INT_PTR
+CALLBACK
+ResourcesProcDriverDlgProc(IN HWND hwndDlg,
+                     IN UINT uMsg,
+                     IN WPARAM wParam,
+                     IN LPARAM lParam)
+{
+    PDEVADVPROP_INFO hpd;
+    HWND hWndDevList;
+    INT_PTR Ret = FALSE;
+
+    hpd = (PDEVADVPROP_INFO)GetWindowLongPtr(hwndDlg,
+                                                DWL_USER);
+
+    if (hpd != NULL || uMsg == WM_INITDIALOG)
+    {
+        switch (uMsg)
+        {
+            case WM_INITDIALOG:
+            {
+                /* init list */
+                hWndDevList = GetDlgItem(hwndDlg, IDC_DRIVERRESOURCES);
+                InitializeDevicesList(hWndDevList);
+
+                hpd = (PDEVADVPROP_INFO)((LPPROPSHEETPAGE)lParam)->lParam;
+                if (hpd != NULL)
+                {
+                    SetWindowLongPtr(hwndDlg,
+                                     DWL_USER,
+                                     (DWORD_PTR)hpd);
+
+                    SetWindowLongPtr(hwndDlg,
+                                     DWL_USER,
+                                     (DWORD_PTR)hpd);
+
+                    UpdateDriverResourceDlg(hwndDlg, hpd);
+                    AddResourceItems(hpd, hWndDevList);
+                }
+
+                Ret = TRUE;
+                break;
+            }
+        }
+    }
+
+    return Ret;
+}
+
diff --git a/reactos/dll/win32/devmgr_new/lang/bg-BG.rc b/reactos/dll/win32/devmgr_new/lang/bg-BG.rc
new file mode 100644 (file)
index 0000000..f6ea39b
--- /dev/null
@@ -0,0 +1,238 @@
+LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Име"
+    IDS_TYPE "Вид"
+    IDS_MANUFACTURER "Производител: %1"
+    IDS_LOCATION "Местоположение: %1"
+    IDS_STATUS "Състояние на устройството: %1"
+    IDS_UNKNOWN "Неизвестно"
+    IDS_LOCATIONSTR "Местоположение %1!u! (%2)"
+    IDS_DEVCODE " (Код %1!u!)"
+    IDS_DEVCODE2 " (Код %2!u!)"
+    IDS_ENABLEDEVICE "Устройството да се използва (включване)"
+    IDS_DISABLEDEVICE "Устройството да не се използва (изключване)"
+    IDS_UNKNOWNDEVICE "НЕИЗВЕСТНО УСТРОЙСТВО"
+    IDS_NODRIVERLOADED "Не са сложени водачи (драйвери) за устройството."
+    IDS_DEVONPARENT "на %1"
+    IDS_TROUBLESHOOTDEV "&Поправка..."
+    IDS_ENABLEDEV "&Включване на устройството"
+    IDS_REINSTALLDRV "По&вторно слагане на драйвера..."
+    IDS_PROPERTIES "&Свойства"
+    IDS_UPDATEDRV "Об&новаване на водача..."
+    IDS_REBOOT "&Презапуск на компютъра..."
+    IDS_NOTAVAILABLE "Неналично"
+    IDS_NOTDIGITALLYSIGNED "Без цифров подпис"
+    IDS_NODRIVERS "Не са нужни или не са заредени водачи за това устройство."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Устройството работи правилно."
+    IDS_DEV_NOT_CONFIGURED "Устройството не е правилно настроено."
+    IDS_DEV_DEVLOADER_FAILED "РеактОС не успя да зареди водача за това устройство, понеже компютърът докладва два вида %1 шини."
+    IDS_DEV_DEVLOADER_FAILED2 "Зареждачът/ите за устройство %1 не успя да зареди водача."
+    IDS_DEV_OUT_OF_MEMORY "Или водачът на това устройство е повреден, или уредбата ви има недостиг на памет или други средства."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Устройството не работи правилно, понеже някой от водачите му е повреден или има грешка в регистъра."
+    IDS_DEV_LACKED_ARBITRATOR "Водачът на това устройство е заявил ресурс, който РеактОС не знае как да ползва."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Друго устройство използва ресурсите, нужни на това устройство."
+    IDS_DEV_FAILED_FILTER "Водачът за това устройство трябва да бъде сложен наново."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Това устройство не работи правилно, понеже РеактОС не може да зареди файл %1, който зарежда водачите за устройството."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Това устройство не работи правилно, понеже файл %1, който зарежда водачите за устройството е повреден."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Неуспех с устройство: Опитайте да смените водача за това устройство. Ако не работи се запознайте с документацията му."
+    IDS_DEV_INVALID_DATA "Това устройство не работи правилно, понеже БИОСът на компютърът ви не дава правилни данни за него."
+    IDS_DEV_INVALID_DATA2 "Това устройство не работи правилно, понеже БИОСът в в устройството не докладва данните на му правилно."
+    IDS_DEV_FAILED_START "Това устройство липсва, не работи правилно или не всичките му водачи са сложени."
+    IDS_DEV_LIAR "РеактОС спря да отговаря, докато се опитваше да пусне устройството и следователно повече няма да се опита да го включи."
+    IDS_DEV_NORMAL_CONFLICT "Устройството не може да намери свободни %1 ресурси, които да използва."
+    IDS_DEV_NOT_VERIFIED "Това устройство липсва, не работи правилно или не всичките му водачи са сложени."
+    IDS_DEV_NEED_RESTART "Устройството няма да работи правилно, докато не презапуснете компютъра."
+    IDS_DEV_REENUMERATION "Устройството причинява сблъсък на ресурси."
+    IDS_DEV_PARTIAL_LOG_CONF "РеактОС не успя да разпознае всички използвани от устройството ресурси."
+    IDS_DEV_UNKNOWN_RESOURCE "Информационният файл %1 указва на дъщерното му устройство да ползва ресурс, който родителското устройство няма или не разпознава."
+    IDS_DEV_REINSTALL "Водачът за това устройство трябва да бъде сложен наново."
+    IDS_DEV_REGISTRY "Възможно е регистърът ви да е повреден."
+    IDS_DEV_WILL_BE_REMOVED "РеактОС премахва устройството."
+    IDS_DEV_DISABLED "Устройството не е включено."
+    IDS_DEV_DISABLED2 "Устройството е забранено."
+    IDS_DEV_DEVLOADER_NOT_READY "Зареждачите за устройството не могат да заредят водачите."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Видеокартата работи правилно."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Зареждачите за устройството не могат да заредят водачите."
+    IDS_DEV_DEVICE_NOT_THERE "Това устройство липсва, не работи правилно или не всичките му водачи са сложени."
+    IDS_DEV_MOVED "РеактОС все още настройва устройството."
+    IDS_DEV_TOO_EARLY "РеактОС все още настройва устройството."
+    IDS_DEV_NO_VALID_LOG_CONF "РеактОС не може да уточни ресурсите за това устройство."
+    IDS_DEV_FAILED_INSTALL "Водачите за това устройство не са сложени."
+    IDS_DEV_HARDWARE_DISABLED "Устройството е изключено, понеже БИОСът му не му е дал никакви ресурси."
+    IDS_DEV_CANT_SHARE_IRQ "Това устройство ползва заявка за прекъсване (IRQ), която се ползва от друго устройство и не може да бъде споделена.\nТрябва да смените спорната настройка или да махнете водача за реално време, причиняващ неразбирателството."
+    IDS_DEV_FAILED_ADD "Това устройство не работи правилно, понеже %1 не работи правилно."
+    IDS_DEV_DISABLED_SERVICE "РеактОС не може да сложи водачите за устройството, понеже няма достъп до устройството или мрежовото местоположение, което съдържа нужните файлове."
+    IDS_DEV_TRANSLATION_FAILED "Устройството не отговаря на своя водач (драйвер)."
+    IDS_DEV_NO_SOFTCONFIG "РеактОС не може да определи настройките на устройството. Вижте документацията на устройството и използвайте подпрозореца ""Ресурси"" за да го настроите."
+    IDS_DEV_BIOS_TABLE "Системният фърмуер на компютъра ви не съдържа достатъчно сведения за правилната настройка и употреба на това устройство.\nЗа да го използвате, свтржете се с производителя на компютъра си, за да се получите обновление на фърмуера или БИОСа."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Това устройство подава заявка за прекъсване на PCI, но е настроено за прекъсване на ISA (или наопаки).\nИзползвате програмата за системна настройка на компютъра, за да пренастроите прекъсването за това устройство."
+    IDS_DEV_FAILED_DRIVER_ENTRY "РеактОС не може да подготви водача за това оборудване."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "РеактОС не може да зареди водача за това оборудване, понеже предишно изпълнение на водача на устройството е все още в паметта."
+    IDS_DEV_DRIVER_FAILED_LOAD "РеактОС не може да зареди водача за това оборудване. Водачът може да е повреден или да липсва."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "РеактОС не получава достъп до устройството, понеже сведенията за облужващият му ключ в регистъра липсват или са записани грешно."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "РеактОС е заредил успешно водача за устройството но не може да намери самото устройство."
+    IDS_DEV_DUPLICATE_DEVICE "РеактОС не може да зареди водача за това оборудване, понеже вече има такъв водач, изпълняван от уредбата."
+    IDS_DEV_FAILED_POST_START "РеактОС е изключил това устройство, понеже е докладвало за нередности."
+    IDS_DEV_HALTED "Приложение или услуга е изключила това устройство."
+    IDS_DEV_PHANTOM "Понастоящем, устройството не е закачено за компютъра."
+    IDS_DEV_SYSTEM_SHUTDOWN "РеактОС не може да получи достъп до това устройство, понеже работната уредба се изключва."
+    IDS_DEV_HELD_FOR_EJECT "РеактОС не може да използва това устройство, защото е било приготвено за безопасно откачане, но не е било откачено."
+    IDS_DEV_DRIVER_BLOCKED "Софтуерът за това устройство не е бил пуснат, понеже е известно, че има ядове с РеактОС. Свържете се с производителя на оборудването за нов водач."
+    IDS_DEV_REGISTRY_TOO_LARGE "РеактОС не успя да пусне новите устройства, понеже системният рой е твърде голям (надхвърля ограничението по размер на регистъра)."
+    IDS_DEV_SETPROPERTIES_FAILED "РеактОС не успя да смени настройките на устройството."
+END
+
+/*Непреведен раздел*/
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Услуга"
+    IDS_PROP_ENUMERATOR "Изброител"
+    IDS_PROP_CAPABILITIES "Способности"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Текущо състояние на захранването"
+    IDS_PROP_POWERCAPABILITIES "Възможности на захранването"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Устройства:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Свойства на устройството:", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Поправка...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "&Свойства", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Общи"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Вид устройство:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Производител:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Местоположение", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Състояние на устройството", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Поправка...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "Употреба на устройството:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Водач (драйвер)"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Доставчик на водача:", -1, 37, 39, 65, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 105, 39, 140, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Дата на водача:", -1, 37, 53, 65, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 105, 53, 140, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Версия на водача:", -1, 37, 67, 65, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 105, 67, 140, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Подписал цифрово:", -1, 37, 81, 70, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 105, 81, 140, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "Подробности за водача...", IDC_DRIVERDETAILS, 7, 106, 95, 15
+    LTEXT "Показване на подробности за файловете на водача.", -1, 105, 110, 141, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 95, 15
+    LTEXT "Update the device driver.", -1, 105, 130, 141, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Подробностите за файловете на водача"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Файлове на &водача:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Доставчик:", -1, 14, 134, 66, 8
+    EDITTEXT IDC_FILEPROVIDER, 82, 134, 140, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Файлова версия:", -1, 14, 150, 66, 16
+    EDITTEXT IDC_FILEVERSION, 82, 150, 140, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Възпроизводствени права:", -1, 14, 166, 66, 16
+    EDITTEXT IDC_FILECOPYRIGHT, 82, 166, 140, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Подписал цифрово:", -1, 14, 182, 66, 16
+    EDITTEXT IDC_DIGITALSIGNER, 82, 182, 140, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "Добре", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Подробности"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Захранване"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/cs-CZ.rc b/reactos/dll/win32/devmgr_new/lang/cs-CZ.rc
new file mode 100644 (file)
index 0000000..29ced01
--- /dev/null
@@ -0,0 +1,242 @@
+/* FILE:       dll/win32/devmgr/lang/cs-CZ.rc
+ * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
+ * UPDATED:    2013-06-01
+ */
+
+LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Název"
+    IDS_TYPE "Typ"
+    IDS_MANUFACTURER "Výrobce: %1"
+    IDS_LOCATION "Umístění: %1"
+    IDS_STATUS "Status zařízení: %1"
+    IDS_UNKNOWN "Neznámý"
+    IDS_LOCATIONSTR "Umístění %1!u! (%2)"
+    IDS_DEVCODE " (Kód %1!u!)"
+    IDS_DEVCODE2 " (Kód %2!u!)"
+    IDS_ENABLEDEVICE "Používat toto zařízení (zapnout)"
+    IDS_DISABLEDEVICE "Nepoužívat toto zařízení (vypnout)"
+    IDS_UNKNOWNDEVICE "Neznámé zařízení"
+    IDS_NODRIVERLOADED "Pro toto zařízení nejsou nainstalovány žádné ovladače."
+    IDS_DEVONPARENT "na %1"
+    IDS_TROUBLESHOOTDEV "Ř&ešení problémů..."
+    IDS_ENABLEDEV "Povolit zaříze&ní"
+    IDS_REINSTALLDRV "Pře&instalovat ovladač"
+    IDS_PROPERTIES "Vlas&tnosti"
+    IDS_UPDATEDRV "A&ktualizovat ovladač..."
+    IDS_REBOOT "Resta&rtovat počítač..."
+    IDS_NOTAVAILABLE "Není dostupné"
+    IDS_NOTDIGITALLYSIGNED "Není digitálně podepsáno"
+    IDS_NODRIVERS "Pro toto zařízení nejsou vyžadovány nebo nebyly načteny žádné soubory ovladačů."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* puvodni anglicke error messages prevzaty z: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Toto zařízení funguje správně."
+    IDS_DEV_NOT_CONFIGURED "Toto zařízení není správně nastaveno."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS nemohl načíst ovladač pro toto zařízení, protože počítač hlásí dva typy sběrnice %1."
+    IDS_DEV_DEVLOADER_FAILED2 "Device loader %1 nemohl načíst ovladač tohoto zařízení."
+    IDS_DEV_OUT_OF_MEMORY "Ovladač tohoto zařízení je poškozený nebo má systém málo paměti či jiných zdrojů."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Toto zařízení nefunguje správně, protože je špatný některý z jeho ovladačů nebo registr."
+    IDS_DEV_LACKED_ARBITRATOR "Ovladač tohoto zařízení požaduje zdroj, který ReactOS neumí zpracovat."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Zdroje, které toto zařízení vyžaduje, jsou už používány jiným zařízením."
+    IDS_DEV_FAILED_FILTER "Ovladače tohoto zařízení musí být přeinstalovány."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Toto zařízení nefunguje správně, protože ReactOS nedokáže načíst soubor %1, který načítá ovladače pro toto zařízení."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Toto zařízení nefunguje správně, protože soubor %1, který načítá ovladače pro toto zařízení, je poškozený."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Selhání zařízení: Zkuste změnit ovladač tohoto zařízení nebo konzultujte manuál."
+    IDS_DEV_INVALID_DATA "Toto zařízení nefunguje správně, protože BIOS v počítači nesprávně hlásí zdroje zařízení."
+    IDS_DEV_INVALID_DATA2 "Toto zařízení nefunguje správně, protože BIOS v zařízení nesprávně hlásí zdroje zařízení."
+    IDS_DEV_FAILED_START "Zařízení není přítomno, nepracuje správně nebo nemá nainstalované všechny ovladače."
+    IDS_DEV_LIAR "ReactOS přestal odpovídat při pokusu o spuštění tohoto zařízení, a proto se nebude znovu pokoušet spustit zařízení."
+    IDS_DEV_NORMAL_CONFLICT "Toto zařízení nedokáže nalézt volné %1 zdroje."
+    IDS_DEV_NOT_VERIFIED "Zařízení není přítomno, nepracuje správně nebo nemá nainstalované všechny ovladače."
+    IDS_DEV_NEED_RESTART "Toto zařízení nebude pracovat správně, dokud nebude počítač zrestartován."
+    IDS_DEV_REENUMERATION "Toto zařízení způsobuje konflikt zdrojů."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS nedokázal identifikovat všechny zdroje, které toto zařízení užívá."
+    IDS_DEV_UNKNOWN_RESOURCE "Informační soubor ovladače %1 požaduje po tomto zařízení použití zdroje, který jeho rodičovské zařízení nemá nebo nepoznává."
+    IDS_DEV_REINSTALL "Ovladače tohoto zařízení musí být přeinstalovány."
+    IDS_DEV_REGISTRY "Registry jsou možná poškozeny."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS odstraňuje toto zařízení."
+    IDS_DEV_DISABLED "Toto zařízení není spuštěno."
+    IDS_DEV_DISABLED2 "Toto zařízení je vypnuto."
+    IDS_DEV_DEVLOADER_NOT_READY "Loadery tohoto zařízení nemohou načíst požadované ovladače."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Tento zobrazovací adaptér funguje správně."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Loadery tohoto zařízení nemohou načíst požadované ovladače."
+    IDS_DEV_DEVICE_NOT_THERE "Zařízení není přítomno, nepracuje správně nebo nemá nainstalované všechny ovladače."
+    IDS_DEV_MOVED "ReactOS právě nastavuje toto zařízení."
+    IDS_DEV_TOO_EARLY "ReactOS právě nastavuje toto zařízení."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS nemohl určit zdroje tohoto zařízení."
+    IDS_DEV_FAILED_INSTALL "Ovladače tohoto zařízení nejsou naintalovány."
+    IDS_DEV_HARDWARE_DISABLED "Toto zařízení je vypnuto, protože mu BIOS nepřiřadil žádné zdroje."
+    IDS_DEV_CANT_SHARE_IRQ "Toto zařízení využívá IRQ, které je využíváno jiným zařízením a nemůže být sdíleno.\nJe potřeba změnit konfliktní nastavení nebo odebrat ovladač způsobující konflikt."
+    IDS_DEV_FAILED_ADD "Toto zařízení nepracuje správně, protože %1 nepracuje správně."
+    IDS_DEV_DISABLED_SERVICE "ReactOS nemůže nainstalovat ovladače tohoto zařízení, protože nemá přístup na disk nebo síťové umístění, na kterém se nacházejí instalační soubory."
+    IDS_DEV_TRANSLATION_FAILED "Toto zařízení neodpovídá svému ovladači."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS nedokáže určit nastavení tohoto zařízení. Konzultujte manuál, který byl přibalen k zařízení a použijte záložku ""Zdroje"" k vybrání nastavení."
+    IDS_DEV_BIOS_TABLE "Firmware tohoto počítače nezahrnuje dost informací nutných pro správné nastavení a použití tohoto zařízení.\nAby bylo možné použít toto zařízení, kontaktujte výrobce počítače k získání novější verze firmwaru nebo BIOSu."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Toto zařízení požaduje PCI přerušení, ale je konfigurováno pro ISA přerušení (či naopak).\nProsím, nastavte správně přerušení pro toto zařízení."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS nemůže incializovat ovladač zařízení pro toto zařízení."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS nemůže načíst ovladač pro toto zařízení, protože předchozí instance ovladače je stále v paměti."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS nemůže načíst ovladač pro toto zařízení. Ovladač může být poškozený nebo chybět."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS nemůže získat přístup k tomuto zařízení, protože jeho service key informace v registru chybí nebo je zapsána nesprávně."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS úspěšně načetl ovladač zařízení, ale nemůže najít zařízení."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS nemůže načíst ovladač tohoto zařízení, protože v systému už je spuštěno duplicitní zařízení."
+    IDS_DEV_FAILED_POST_START "ReactOS zastavil toto zařízení, protože způsobovalo problémy."
+    IDS_DEV_HALTED "Aplikace nebo služba zastavila toto zařízení."
+    IDS_DEV_PHANTOM "Toto zařízení nyní není připojeno k počítači."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS nemohl získat přístup k tomuto zařízení, protože operační systém se právě vypíná."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS nemůže používat toto zařízení, protože bylo připraveno pro bezpečné odebrání a ještě nebylo odebráno."
+    IDS_DEV_DRIVER_BLOCKED "Softwaru tohoto zařízení nebylo dovoleno spuštění, protože způsobuje v systému ReactOS problémy. Kontaktujte prodejce pro nový ovladač."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS nemůže spustit nové zařízení, protože systémová složka registru je příliš velká (překračuje limit velikosti registru)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS nedokázal změnit nastavení tohoto zařízení."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Zařízení:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Vlastnosti zařízení", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "Ř&ešení problémů...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "Vlas&tnosti", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Obecné"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Typ zařízení:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Výrobce:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Umístění:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Stav zařízení", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "Ř&ešení problémů...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "Využití &zařízení:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Ovladač"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Zprostředkovatel:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Datum ovladače:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Verze ovladače:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digitální podpis:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Detaily ovladače...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Zobrazí detaily souborů ovladače.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Aktualizovat ovladač...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Aktualizuje ovladač zařízení.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Detaily souborů ovladače"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Soubory ovla&dače:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Zprostředkovatel:", -1, 14, 134, 66, 8
+    EDITTEXT IDC_FILEPROVIDER, 80, 134, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Verze souboru:", -1, 14, 150, 66, 8
+    EDITTEXT IDC_FILEVERSION, 80, 150, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Autorská práva:", -1, 14, 166, 66, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 80, 166, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digitální podpis:", -1, 14, 182, 66, 8
+    EDITTEXT IDC_DIGITALSIGNER, 80, 182, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Detaily"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Napájení"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/de-DE.rc b/reactos/dll/win32/devmgr_new/lang/de-DE.rc
new file mode 100644 (file)
index 0000000..d5ffc0b
--- /dev/null
@@ -0,0 +1,239 @@
+/* German translation by David Hinz (fRy2oo5) 2005-12-04 and Friedrich Stange (dj_smith_reactos@online.de) 2006-1-20 */
+
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Name"
+    IDS_TYPE "Typ"
+    IDS_MANUFACTURER "Hersteller: %1"
+    IDS_LOCATION "Ort: %1"
+    IDS_STATUS "Gerätestatus: %1"
+    IDS_UNKNOWN "Unbekannt"
+    IDS_LOCATIONSTR "Ort %1!u! (%2)"
+    IDS_DEVCODE " (Code %1!u!)"
+    IDS_DEVCODE2 " (Code %2!u!)"
+    IDS_ENABLEDEVICE "Benutze dieses Gerät (aktivieren)"
+    IDS_DISABLEDEVICE "Benutze dieses Gerät nicht (deaktivieren)"
+    IDS_UNKNOWNDEVICE "Unbekanntes Gerät"
+    IDS_NODRIVERLOADED "Für dieses Gerät sind keine Treiber installiert."
+    IDS_DEVONPARENT "auf %1"
+    IDS_TROUBLESHOOTDEV "Problem &lösen..."
+    IDS_ENABLEDEV "Gerät &aktivieren"
+    IDS_REINSTALLDRV "Treiber neu &installieren"
+    IDS_PROPERTIES "&Eigenschaften"
+    IDS_UPDATEDRV "Treiber &aktualisieren..."
+    IDS_REBOOT "Computer neusta&rten..."
+    IDS_NOTAVAILABLE "Nicht verfügbar"
+    IDS_NOTDIGITALLYSIGNED "Nicht digital signiert"
+    IDS_NODRIVERS "Es werden keine Treiber für dieses Gerät benötigt oder es wurden keine Treiber geladen."
+    IDS_RESOURCE_COLUMN "Ressourcentyp"
+    IDS_SETTING_COLUMN "Einstellung"
+    IDS_RESOURCE_MEMORY_RANGE "Speicherbereich"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "E/A-Bereich"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Dieses Gerät funktioniert einwandfrei."
+    IDS_DEV_NOT_CONFIGURED "Dieses Gerät ist nicht richtig konfiguriert."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS konnte den Treiber für dieses Gerät nicht laden, weil der Computer zwei %1 Bustypen meldet."
+    IDS_DEV_DEVLOADER_FAILED2 "Der/die %1 Gerätelader für dieses Gerät konnte den Gerätetreiber nicht laden."
+    IDS_DEV_OUT_OF_MEMORY "Der Treiber für dieses Gerät könnte beschädigt sein, oder Ihr System verfügt über zu wenig Speicher oder andere Ressourcen."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Dieses Gerät arbeitet nicht korrekt, weil einer seiner Treiber oder die Registry beschädigt ist."
+    IDS_DEV_LACKED_ARBITRATOR "Der Treiber dieses Gerätes hat eine Ressource angefragt, die ReactOS nicht behandeln kann."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Ein anderes Gerät benutzt bereits die Ressourcen, die dieses Gerät benötigt."
+    IDS_DEV_FAILED_FILTER "Die Treiber für dieses Gerät müssen neu installiert werden."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Dieses Gerät arbeitet nicht korrekt, weil ReactOS die Datei %1 nicht laden kann, die die Treiber für dieses Gerät lädt."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Dieses Gerät arbeitet nicht korrekt, weil die Datei %1, die die Treiber für dieses Gerät lädt, defekt ist."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Gerätefehler: Versuchen Sie, einen anderen Treiber für dieses Gerät zu verwenden. Wenn das nicht hilft, sehen Sie in die Gerätedokumentation."
+    IDS_DEV_INVALID_DATA "Dieses Gerät arbeitet nicht korrekt, weil das BIOS ihres Computers die Ressourcen für dieses Gerät falsch angibt."
+    IDS_DEV_INVALID_DATA2 "Dieses Gerät arbeitet nicht korrekt, weil das BIOS dieses Gerätes die Ressourcen für dieses Gerät falsch angibt. "
+    IDS_DEV_FAILED_START "Dieses Gerät ist entweder nicht vorhanden, funktioniert nicht korrekt, oder es sind nicht alle Treiber installiert."
+    IDS_DEV_LIAR "ReactOS hörte während des Versuchs dieses Gerät zu starten auf zu reagieren und wird deshalb nicht wieder versuchen, dieses Gerät zu starten.."
+    IDS_DEV_NORMAL_CONFLICT "Dieses Gerät kann keine freien %1 Ressourcen zur Benutzung finden."
+    IDS_DEV_NOT_VERIFIED "Dieses Gerät ist entweder nicht vorhanden, funktioniert nicht korrekt, oder es sind nicht alle Treiber installiert."
+    IDS_DEV_NEED_RESTART "Dieses Gerät wird erst korrekt funktionieren, wenn Sie den Computer neugestartet haben."
+    IDS_DEV_REENUMERATION "Dieses Gerät verursacht einen Ressourcenkonflikt."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS konnte nicht alle Ressourcen identifizieren, die dieses Gerät benutzt."
+    IDS_DEV_UNKNOWN_RESOURCE "Die Treiberinformationsdatei %1 lässt dieses Kind-Gerät auf eine Ressource zugreifen, welche dem Eltern-Gerät nicht zur Verfügung steht oder bekannt ist."
+    IDS_DEV_REINSTALL "Die Treiber für dieses Gerät müssen neuinstalliert werden."
+    IDS_DEV_REGISTRY "Die Registrierungsdatenbank könnte beschädigt sein."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS wird dieses Gerät entfernen."
+    IDS_DEV_DISABLED "Dieses Gerät ist nicht gestartet."
+    IDS_DEV_DISABLED2 "Dieses Gerät ist deaktiviert."
+    IDS_DEV_DEVLOADER_NOT_READY "Der Lader für dieses Gerät kann die benötigten Treiber nicht laden."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Diese Grafikkarte funktioniert einwandfrei."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Die Lader für dieses Gerät können die benötigten Treiber nicht laden."
+    IDS_DEV_DEVICE_NOT_THERE "Dieses Gerät ist entweder nicht vorhanden, funktioniert nicht korrekt, oder es sind nicht alle Treiber installiert."
+    IDS_DEV_MOVED "ReactOS ist dabei dieses Gerät zu aktivieren."
+    IDS_DEV_TOO_EARLY "ReactOS ist dabei dieses Gerät zu aktivieren."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS kann die Ressourcen für dieses Gerät nicht feststellen."
+    IDS_DEV_FAILED_INSTALL "Die Treiber für dieses Gerät sind nicht installiert."
+    IDS_DEV_HARDWARE_DISABLED "Dieses Gerät ist deaktiviert, weil das BIOS für dieses Gerät keine Ressourcen zugeteilt hat."
+    IDS_DEV_CANT_SHARE_IRQ "Dieses Gerät benutzt einen Interrupt (IRQ), der bereits von einem anderen Gerät benutzt wird und nicht geteilt werden kann. Sie müssen die kollidierenden Einstellungen ändern, oder den real-mode Treiber entfernen, der den Konflikt verursacht."
+    IDS_DEV_FAILED_ADD "Dieses Gerät arbeitet nicht korrekt, weil %1 nicht korrekt funktioniert."
+    IDS_DEV_DISABLED_SERVICE "ReactOS kann die Treiber für dieses Gerät nicht installieren, weil auf das (Netz-)Laufwerk, auf dem die Installationsdateien abgelegt sind, nicht zugegriffen werden kann."
+    IDS_DEV_TRANSLATION_FAILED "Dieses Gerät reagiert nicht auf seinen Treiber."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS kann die Einstellungen für dieses Gerät nicht feststellen. Lesen Sie die Dokumentation, die mit diesem Gerät kam und benutzen Sie den Reiter ""Ressourcen"" umd die Konfiguration vorzunehmen."
+    IDS_DEV_BIOS_TABLE "Die System-Firmware ihres Computers beinhaltet nicht genug Information um dieses Gerät korrekt konfigurieren und benutzen zu können. Um dieses Gerät benutzen zu können, kontaktieren Sie bitte Ihren Computerhersteller um ein Firmware- oder BIOS-Update zu erhalten."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Dieses Gerät beantragt einen PCI-Interrupt, ist aber für einen ISA-Interrupt konfiguriert (oder andersherum). Bitte benutzen Sie das System-Setup Programm dieses Computers, um den Interrupt für dieses Gerät neu zu konfigurieren."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS kann den Gerätetreiber für dieses Gerät nicht initialisieren."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS kann den Gerätetreiber für dieses Gerät nicht laden, weil eine noch frühere Instanz des Gerätetreibers im Speicher ist."
+    IDS_DEV_DRIVER_FAILED_LOAD "Der Gerätetreiber für diese Hardware kann nicht geladen werden. Der Treiber ist möglicherweise beschädigt oder nicht vorhanden."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS kann dieses Gerät nicht ansprechen, weil seine Serviceschlüssel-Information nicht in der Registrierungsdatenbank ist oder weil sie falsch ist."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS hat den Gerätetreiber für dieses Gerät erfolgreich geladen, kann aber das Gerät nicht finden."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS kann den Gerätetreiber für dieses Gerät nicht laden, weil bereits ein identisches Gerät installiert ist."
+    IDS_DEV_FAILED_POST_START "ReactOS hat dieses Gerät angehalten, weil es Probleme berichtet hat."
+    IDS_DEV_HALTED "Eine Anwendung oder ein Dienst hat dieses Gerät heruntergefahren."
+    IDS_DEV_PHANTOM "Dieses Gerät ist momentan nicht mit dem Computer verbunden."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS kann auf dieses Gerät nicht zugreifen, weil das Betriebssystem heruntergefahren wird."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS kann dieses Gerät nicht benutzen, weil es für ""Sicheres Entfernen"" vorbereitet, aber bisher nicht vom Computer entfernt wurde."
+    IDS_DEV_DRIVER_BLOCKED "Die Ausführung der Software für dieses Gerät wurde blockiert, weil bekannt ist, dass sie Probleme mit ReactOS hat. Kontaktieren Sie den Hersteller für einen neuen Treiber."
+    IDS_DEV_REGISTRY_TOO_LARGE "Die neuen Hardwaregeräte können nicht gestartet werden, da die Systemstruktur zu groß ist (die Struktur überschreitet die Registrierungsgrößenbeschränkung)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS konnte die Einstellungen für dieses Gerät nicht verändern."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Geräteinstanz-ID"
+    IDS_PROP_HARDWAREIDS "Hardware-IDs"
+    IDS_PROP_COMPATIBLEIDS "Kompatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Passende Geräte-ID"
+    IDS_PROP_SERVICE "Dienst"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Eigenschaften"
+    IDS_PROP_DEVNODEFLAGS "DevNode-Flags"
+    IDS_PROP_CONFIGFLAGS "Config-Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig-Flags"
+    IDS_PROP_EJECTIONRELATIONS "Auswurfsrichtlinien"
+    IDS_PROP_REMOVALRELATIONS "Entfernungsrichtlinen"
+    IDS_PROP_BUSRELATIONS "Busrichtlinien"
+    IDS_PROP_DEVUPPERFILTERS "Obere Gerätefilter"
+    IDS_PROP_DEVLOWERFILTERS "Untere Gerätefilter"
+    IDS_PROP_CLASSUPPERFILTERS "Obere Klassenfilter"
+    IDS_PROP_CLASSLOWERFILTERS "Untere Klassenfilter"
+    IDS_PROP_CLASSINSTALLER "Klasseninstallationsprogramm"
+    IDS_PROP_CLASSCOINSTALLER "Klassen-Coinstallationsprogramm"
+    IDS_PROP_DEVICECOINSTALLER "Geräte-Coinstallationsprogramm"
+    IDS_PROP_FIRMWAREREVISION "Firmwarerevision"
+    IDS_PROP_CURRENTPOWERSTATE "Aktueller Energiezustand"
+    IDS_PROP_POWERCAPABILITIES "Energie-Eigenschaften"
+    IDS_PROP_POWERSTATEMAPPINGS "Energiezustandszuordnungen"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Geräte:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Geräteeigenschaften", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "Problem &lösen...", IDC_TROUBLESHOOT, 80, 140, 60, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "&Eigenschaften", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Allgemein"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Gerätetyp:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Hersteller:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Ort:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Gerätestatus", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "Problem &lösen...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "Geräte&benutzung:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Treiber"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Treiberanbieter:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Treiberdatum:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Treiberversion:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Signaturgeber:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Treiberdetails...", IDC_DRIVERDETAILS, 7, 106, 80, 15
+    LTEXT "Einzelheiten über die Treiberdateien anzeigen.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "Treiber &aktualisieren...", IDC_UPDATEDRIVER, 7, 126, 80, 15
+    LTEXT "Aktualisiert den Gerätetreiber.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Treiberdateidetails"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Treiberdateien:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Anbieter:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Dateiversion:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Copyright:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Signaturgeber:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Ressourcen"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Ressourcen-Einstellungen:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Energie"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/el-GR.rc b/reactos/dll/win32/devmgr_new/lang/el-GR.rc
new file mode 100644 (file)
index 0000000..6eb4c6a
--- /dev/null
@@ -0,0 +1,239 @@
+/* Greek translation by Apostolos Alexiadis, 2009-01-25 */
+
+LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Όνομα"
+    IDS_TYPE "Τύπος"
+    IDS_MANUFACTURER "Κατασκευαστής: %1"
+    IDS_LOCATION "Τοποθεσία: %1"
+    IDS_STATUS "Κατάσταση Συσκευής: %1"
+    IDS_UNKNOWN "Άγνωστο"
+    IDS_LOCATIONSTR "Τοποθεσία  %1!u! (%2)"
+    IDS_DEVCODE " (Code %1!u!)"
+    IDS_DEVCODE2 " (Code %2!u!)"
+    IDS_ENABLEDEVICE "Χρήση αυτής της συσκευής (ενεργοποίηση)"
+    IDS_DISABLEDEVICE "Μη χρήση αυτής της συσκευής (απενεργοποίηση)"
+    IDS_UNKNOWNDEVICE "Άγνωστη συσκευή"
+    IDS_NODRIVERLOADED "Δεν έχουν εγκατασταθεί οδηγοί για αυτή τη συσκευή."
+    IDS_DEVONPARENT "στο %1"
+    IDS_TROUBLESHOOTDEV "&Αντιμετώπιση προβλημάτων..."
+    IDS_ENABLEDEV "Ε&νεργοποίηση Συσκευής"
+    IDS_REINSTALLDRV "Ε&πανεγκατάσταση Οδηγού"
+    IDS_PROPERTIES "Ι&διότητες"
+    IDS_UPDATEDRV "Α&ναβάθμιση Οδηγού..."
+    IDS_REBOOT "Επανεκκίνηση &Υπολογιστή..."
+    IDS_NOTAVAILABLE "Μη διαθέσιμο"
+    IDS_NOTDIGITALLYSIGNED "Not digitally signed"
+    IDS_NODRIVERS "No driver files are required or have been loaded for this device."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Αυτή η συσκευή λειτουργεί κανονικά."
+    IDS_DEV_NOT_CONFIGURED "Αυτή η συσκευή δεν έχει διαμορφωθεί σωστά."
+    IDS_DEV_DEVLOADER_FAILED "Το ReactOS δε μπόρεσε να φορτώσει τον οδηγό για αυτή τη συσκευή γιατί ο υπολογιστής αναφέρει 2 %1 bus τύπους."
+    IDS_DEV_DEVLOADER_FAILED2 "The %1 device loader(s) for this device could not load the device driver."
+    IDS_DEV_OUT_OF_MEMORY "Ο οδηγός για αυτή τη συσκευή μπορεί να είναι λανθασμένος, ή το σύστημά σας μπορεί να έχει λίγη μνήμη ή άλλους πόρους."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Αυτή η συσκευή δε λειτουργεί κανονικά επειδή ένας από τους οδηγούς τους πιθανόν να είναι λανθασμένος, ή το μητρώο σας ενδέχεται να έχει λάθη."
+    IDS_DEV_LACKED_ARBITRATOR "The driver for this device requested a resource that ReactOS does not know how to handle."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Another device is using the resources this device needs."
+    IDS_DEV_FAILED_FILTER "Οι οδηγοί για αυτή τη συσκευή πρέπει να επανεγκατασταθούν."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Αυτή η συσκευή δε λειτουργεί κανονικά επειδή το ReactOS δε μπορεί να φορτώσει το αρχείο %1 που φορτώνει τους οδηγούς για τη συσκευή."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Αυτή η συσκευή δε λειτουργεί κανονικά επειδή το αρχείο %1 που φορτώνει τους οδηγούς για αυτή τη συσκευή είναι λανθασμένο."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Device failure: Try changing the driver for this device. If that doesn't work, see your hardware documentation."
+    IDS_DEV_INVALID_DATA "This device is not working properly because the BIOS in your computer is reporting the resources for the device incorrectly."
+    IDS_DEV_INVALID_DATA2 "This device is not working properly because the BIOS in the device is reporting the resources for the device incorrectly. "
+    IDS_DEV_FAILED_START "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_LIAR "ReactOS stopped responding while attempting to start this device, and therefore will never attempt to start this device again."
+    IDS_DEV_NORMAL_CONFLICT "This device cannot find any free %1 resources to use."
+    IDS_DEV_NOT_VERIFIED "Αυτή η συσκευή μπορεί να μην είναι παρούσα, να μη λειτουργεί σωστά, ή να μην έχει όλους τους οδηγούς της εγκατεστημένους."
+    IDS_DEV_NEED_RESTART "Αυτή η συσκευή δε μπορεί να λειτουργήσει κανονικά μέχρι να επανεκκινήσετε τον υπολογιστή σας."
+    IDS_DEV_REENUMERATION "This device is causing a resource conflict."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS could not identify all the resources this device uses."
+    IDS_DEV_UNKNOWN_RESOURCE "The driver information file %1 is telling this child device to use a resource that the parent device does not have or recognize."
+    IDS_DEV_REINSTALL "Οι οδηγοί για αυτή τη συσκευή πρέπει να επανεγκατασταθούν."
+    IDS_DEV_REGISTRY "Το μητρώο σας ενδέχεται να έχει λάθη."
+    IDS_DEV_WILL_BE_REMOVED "Το ReactOS αφαιρεί αυτή τη συσκευή."
+    IDS_DEV_DISABLED "Αυτή η συσκευή δεν ξεκίνησε."
+    IDS_DEV_DISABLED2 "Αυτή η συσκευή είναι απενεργοποιημένη."
+    IDS_DEV_DEVLOADER_NOT_READY "The loaders for this device cannot load the required drivers."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Αυτός ο προσαρμογέας οθόνης λειτουργεί κανονικά."
+    IDS_DEV_DEVLOADER_NOT_READY3 "The loaders for this device cannot load the required drivers."
+    IDS_DEV_DEVICE_NOT_THERE "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_MOVED "ReactOS is in the process of setting up this device."
+    IDS_DEV_TOO_EARLY "ReactOS is in the process of setting up this device."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS can't specify the resources for this device."
+    IDS_DEV_FAILED_INSTALL "The drivers for this device are not installed."
+    IDS_DEV_HARDWARE_DISABLED "This device is disabled because the BIOS for the device did not give it any resources."
+    IDS_DEV_CANT_SHARE_IRQ "This device is using an Interrupt Request (IRQ) resource that is in use by another device and cannot be shared.\nYou must change the conflicting setting or remove the real-mode driver causing the conflict."
+    IDS_DEV_FAILED_ADD "This device is not working properly because %1 is not working properly."
+    IDS_DEV_DISABLED_SERVICE "ReactOS cannot install the drivers for this device because it cannot access the drive or network location that has the setup files on it."
+    IDS_DEV_TRANSLATION_FAILED "This device isn't responding to its driver."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS cannot determine the settings for this device. Consult the documentation that came with this device and use the Resource tab to set the configuration."
+    IDS_DEV_BIOS_TABLE "Your computer's system firmware does not include enough information to properly configure and use this device. \nTo use this device, contact your computer manufacturer to obtain a firmware or BIOS update."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "This device is requesting a PCI interrupt but is configured for an ISA interrupt (or vice versa). \nPlease use the computer's system setup program to reconfigure the interrupt for this device."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS cannot initialize the device driver for this hardware."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS cannot load the device driver for this hardware because a previous instance of the device driver is still in memory."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS cannot load the device driver for this hardware. The driver may be corrupted or missing."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS cannot access this hardware because its service key information in the registry is missing or recorded incorrectly."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS successfully loaded the device driver for this hardware but cannot find the hardware device."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS cannot load the device driver for this hardware because there is a duplicate device already running in the system."
+    IDS_DEV_FAILED_POST_START "ReactOS has stopped this device because it has reported problems."
+    IDS_DEV_HALTED "An application or service has shut down this hardware device."
+    IDS_DEV_PHANTOM "Currently, this hardware device is not connected to the computer."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS cannot gain access to this hardware device because the operating system is in the process of shutting down."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS cannot use this hardware device because it has been prepared for safe removal, but it has not been removed from the computer"
+    IDS_DEV_DRIVER_BLOCKED "The software for this device has been blocked from starting because it is known to have problems with ReactOS. Contact the hardware vendor for a new driver."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS cannot start new hardware devices because the system hive is too large (exceeds the Registry Size Limit)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS wasn't able to change the settings of this device."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Συσκευές:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Ιδιότητες Συσκευής", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Αντιμετώπιση προβλημάτων...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "Ι&διότητες", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Γενικά"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Τύπος συσκευής:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Κατασκευαστής:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Τοποθεσία:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Κατάσταση συσκευής", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Αντιμετώπιση προβλημάτων...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Χρήση συσκευής:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Οδηγός"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Προμηθευτής οδηγού:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Ημερομηνία οδηγού:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Έκδοση οδηγού:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digital Signer:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Λεπτομέρειες οδηγού...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "To view details about the driver files.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Λεπτομέρειες Αρχείων Οδηγού"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Αρχεία οδηγού:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Προμηθευτής:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Έκδοση αρχείου:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Δικαιώματα:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digital Signer:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Power"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/en-US.rc b/reactos/dll/win32/devmgr_new/lang/en-US.rc
new file mode 100644 (file)
index 0000000..f34f4ec
--- /dev/null
@@ -0,0 +1,237 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Name"
+    IDS_TYPE "Type"
+    IDS_MANUFACTURER "Manufacturer: %1"
+    IDS_LOCATION "Location: %1"
+    IDS_STATUS "Device Status: %1"
+    IDS_UNKNOWN "Unknown"
+    IDS_LOCATIONSTR "Location %1!u! (%2)"
+    IDS_DEVCODE " (Code %1!u!)"
+    IDS_DEVCODE2 " (Code %2!u!)"
+    IDS_ENABLEDEVICE "Use this device (enable)"
+    IDS_DISABLEDEVICE "Do not use this device (disable)"
+    IDS_UNKNOWNDEVICE "Unknown device"
+    IDS_NODRIVERLOADED "No drivers are installed for this device."
+    IDS_DEVONPARENT "on %1"
+    IDS_TROUBLESHOOTDEV "&Troubleshoot..."
+    IDS_ENABLEDEV "E&nable Device"
+    IDS_REINSTALLDRV "Re&install Driver"
+    IDS_PROPERTIES "P&roperties"
+    IDS_UPDATEDRV "U&pdate Driver..."
+    IDS_REBOOT "Restart &Computer..."
+    IDS_NOTAVAILABLE "Not available"
+    IDS_NOTDIGITALLYSIGNED "Not digitally signed"
+    IDS_NODRIVERS "No driver files are required or have been loaded for this device."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "This device is working properly."
+    IDS_DEV_NOT_CONFIGURED "This device is not configured correctly."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS  could not load the driver for this device because the computer is reporting two %1 bus types."
+    IDS_DEV_DEVLOADER_FAILED2 "The %1 device loader(s) for this device could not load the device driver."
+    IDS_DEV_OUT_OF_MEMORY "The driver for this device may be bad, or your system may be running low on memory or other resources."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "This device is not working properly because one of its drivers may be bad, or your registry may be bad."
+    IDS_DEV_LACKED_ARBITRATOR "The driver for this device requested a resource that ReactOS does not know how to handle."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Another device is using the resources this device needs."
+    IDS_DEV_FAILED_FILTER "The drivers for this device need to be reinstalled."
+    IDS_DEV_DEVLOADER_NOT_FOUND "This device is not working properly because ReactOS cannot load the file %1 that loads the drivers for the device."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "This device is not working properly because the file %1 that loads the drivers for this device is bad."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Device failure: Try changing the driver for this device. If that doesn't work, see your hardware documentation."
+    IDS_DEV_INVALID_DATA "This device is not working properly because the BIOS in your computer is reporting the resources for the device incorrectly."
+    IDS_DEV_INVALID_DATA2 "This device is not working properly because the BIOS in the device is reporting the resources for the device incorrectly. "
+    IDS_DEV_FAILED_START "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_LIAR "ReactOS stopped responding while attempting to start this device, and therefore will never attempt to start this device again."
+    IDS_DEV_NORMAL_CONFLICT "This device cannot find any free %1 resources to use."
+    IDS_DEV_NOT_VERIFIED "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_NEED_RESTART "This device cannot work properly until you restart your computer."
+    IDS_DEV_REENUMERATION "This device is causing a resource conflict."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS could not identify all the resources this device uses."
+    IDS_DEV_UNKNOWN_RESOURCE "The driver information file %1 is telling this child device to use a resource that the parent device does not have or recognize."
+    IDS_DEV_REINSTALL "The drivers for this device need to be reinstalled."
+    IDS_DEV_REGISTRY "Your registry may be bad."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS is removing this device."
+    IDS_DEV_DISABLED "This device is not started."
+    IDS_DEV_DISABLED2 "This device is disabled."
+    IDS_DEV_DEVLOADER_NOT_READY "The loaders for this device cannot load the required drivers."
+    IDS_DEV_DEVLOADER_NOT_READY2 "This display adapter is functioning correctly."
+    IDS_DEV_DEVLOADER_NOT_READY3 "The loaders for this device cannot load the required drivers."
+    IDS_DEV_DEVICE_NOT_THERE "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_MOVED "ReactOS is in the process of setting up this device."
+    IDS_DEV_TOO_EARLY "ReactOS is in the process of setting up this device."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS can't specify the resources for this device."
+    IDS_DEV_FAILED_INSTALL "The drivers for this device are not installed."
+    IDS_DEV_HARDWARE_DISABLED "This device is disabled because the BIOS for the device did not give it any resources."
+    IDS_DEV_CANT_SHARE_IRQ "This device is using an Interrupt Request (IRQ) resource that is in use by another device and cannot be shared.\nYou must change the conflicting setting or remove the real-mode driver causing the conflict."
+    IDS_DEV_FAILED_ADD "This device is not working properly because %1 is not working properly."
+    IDS_DEV_DISABLED_SERVICE "ReactOS cannot install the drivers for this device because it cannot access the drive or network location that has the setup files on it."
+    IDS_DEV_TRANSLATION_FAILED "This device isn't responding to its driver."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS cannot determine the settings for this device. Consult the documentation that came with this device and use the Resource tab to set the configuration."
+    IDS_DEV_BIOS_TABLE "Your computer's system firmware does not include enough information to properly configure and use this device. \nTo use this device, contact your computer manufacturer to obtain a firmware or BIOS update."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "This device is requesting a PCI interrupt but is configured for an ISA interrupt (or vice versa). \nPlease use the computer's system setup program to reconfigure the interrupt for this device."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS cannot initialize the device driver for this hardware."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS cannot load the device driver for this hardware because a previous instance of the device driver is still in memory."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS cannot load the device driver for this hardware. The driver may be corrupted or missing."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS cannot access this hardware because its service key information in the registry is missing or recorded incorrectly."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS successfully loaded the device driver for this hardware but cannot find the hardware device."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS cannot load the device driver for this hardware because there is a duplicate device already running in the system."
+    IDS_DEV_FAILED_POST_START "ReactOS has stopped this device because it has reported problems."
+    IDS_DEV_HALTED "An application or service has shut down this hardware device."
+    IDS_DEV_PHANTOM "Currently, this hardware device is not connected to the computer."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS cannot gain access to this hardware device because the operating system is in the process of shutting down."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS cannot use this hardware device because it has been prepared for safe removal, but it has not been removed from the computer"
+    IDS_DEV_DRIVER_BLOCKED "The software for this device has been blocked from starting because it is known to have problems with ReactOS. Contact the hardware vendor for a new driver."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS cannot start new hardware devices because the system hive is too large (exceeds the Registry Size Limit)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS wasn't able to change the settings of this device."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Devices:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Device Properties", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Troubleshoot...", IDC_TROUBLESHOOT, 80, 140, 60, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "P&roperties", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "General"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Device type:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Manufacturer:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Location:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Device status", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Troubleshoot...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Device usage:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Driver"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Driver provider:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Driver date:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Driver version:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digital Signer:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Driver Details...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "To view details about the driver files.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Driver File Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Driver files:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Provider:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "File version:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Copyright:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digital Signer:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Power"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/es-ES.rc b/reactos/dll/win32/devmgr_new/lang/es-ES.rc
new file mode 100644 (file)
index 0000000..a5a172a
--- /dev/null
@@ -0,0 +1,239 @@
+/* Spanish translation by Samuel Serapion Vega, Javier Remacha and Ismael Ferreras Morezuelas */
+
+LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Nombre"
+    IDS_TYPE "Tipo"
+    IDS_MANUFACTURER "Fabricante: %1"
+    IDS_LOCATION "Ubicación: %1"
+    IDS_STATUS "Estado del dispositivo: %1"
+    IDS_UNKNOWN "Desconocida"
+    IDS_LOCATIONSTR "Ubicación %1!u! (%2)"
+    IDS_DEVCODE " (Código %1!u!)"
+    IDS_DEVCODE2 " (Código %2!u!)"
+    IDS_ENABLEDEVICE "Habilitar este dispositivo"
+    IDS_DISABLEDEVICE "Deshabilitar este dispositivo"
+    IDS_UNKNOWNDEVICE "Dispositivo desconocido"
+    IDS_NODRIVERLOADED "No hay ningún controlador instalado para este dispositivo."
+    IDS_DEVONPARENT "en %1"
+    IDS_TROUBLESHOOTDEV "&Solucionar problemas..."
+    IDS_ENABLEDEV "Habilit&ar dispositivo"
+    IDS_REINSTALLDRV "Re&instalar controlador"
+    IDS_PROPERTIES "P&ropiedades"
+    IDS_UPDATEDRV "Actualizar controlador..."
+    IDS_REBOOT "&Reiniciar equipo..."
+    IDS_NOTAVAILABLE "No disponible"
+    IDS_NOTDIGITALLYSIGNED "Sin firma digital"
+    IDS_NODRIVERS "Los controladores para este dispositivo o no son necesarios o ya han sido cargados."
+    IDS_RESOURCE_COLUMN "Tipo de recurso"
+    IDS_SETTING_COLUMN "Ajuste"
+    IDS_RESOURCE_MEMORY_RANGE "Intervalo de memoria"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "Intervalo de I/O"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Este dispositivo está funcionando correctamente."
+    IDS_DEV_NOT_CONFIGURED "Este dispositivo no esta configurado correctamente."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS no podría cargar el controlador para este dispositivo porque la computadora está reportando dos %1 tipos de Bus."
+    IDS_DEV_DEVLOADER_FAILED2 "El cargador de %1 no puede cargar el controlador del dispositivo."
+    IDS_DEV_OUT_OF_MEMORY "El controlador para este dispositivo puede estar dañado, o su sistema puede estar bajo en memoria u otros recursos."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Este dispositivo no está funcionando correctamente porque uno de sus controladores estan dañados, o su registro esta corrupto."
+    IDS_DEV_LACKED_ARBITRATOR "El controlador para este dispositivo solicitó un recurso que ReactOS no sabe dirigir."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Otro dispositivo está utilizando los recursos que necesita de este dispositivo."
+    IDS_DEV_FAILED_FILTER "Los controladors para este dispositivo necesitan ser reinstalados."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Este dispositivo no está funcionando correctamente porque ReactOS no puede cargar el archivo %1 que carga los controladors para el dispositivo."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Este dispositivo no está funcionando correctamente porque el archivo %1 que carga los controladors para este dispositivo esta dañado."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Falla del dispositivo: Trate de cambiar el controlador para este dispositivo. Si eso no funciona, vea la documentación de su hardware."
+    IDS_DEV_INVALID_DATA "Este dispositivo no está funcionando correctamente porque la BIOS en su computadora está reportando los recursos para el dispositivo incorrectamente."
+    IDS_DEV_INVALID_DATA2 "Este dispositivo no está funcionando correctamente porque la BIOS en el dispositivo está reportando los recursos para el dispositivo incorrectamente."
+    IDS_DEV_FAILED_START "Este dispositivo o no esta presente, no trabajando correctamente, o no tiene todos los controladors instalados."
+    IDS_DEV_LIAR "ReactOS paró de responder mientras que procuraba encender este dispositivo, y por lo tanto nunca procurará encender este dispositivo otra vez."
+    IDS_DEV_NORMAL_CONFLICT "Este dispositivo no puede encontrar ningun %1 recurso libre para utilizar."
+    IDS_DEV_NOT_VERIFIED "Este dispositivo no esta presente, no trabaja correctamente, o no tiene todos los controladors instalados."
+    IDS_DEV_NEED_RESTART "Este dispositivo no puede trabajar correctamente hasta que usted reinicie su equipo."
+    IDS_DEV_REENUMERATION "Este dispositivo está causando un conflicto de recursos."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS no puede identificar todos los recursos que este dispositivo usa."
+    IDS_DEV_UNKNOWN_RESOURCE "El archivo de información del controlador %1 está diciendo que este dispositivo hijo utiliza un recurso que el dispositivo padre no tiene o no reconoce."
+    IDS_DEV_REINSTALL  "Los controladorer para este dispositivo necesitan reinstalarse."
+    IDS_DEV_REGISTRY "Su Registro puede estar corrupto."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS esta removiendo este dispositivo."
+    IDS_DEV_DISABLED "Este dispositivo no ha sido inicializado."
+    IDS_DEV_DISABLED2 "Este dispositivo ha sido deshabilitado."
+    IDS_DEV_DEVLOADER_NOT_READY "Los cargadores para este dispositivo no pueden cargar los controladors requeridos."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Este adaptador de video esta funcionando correctamente."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Los cargadores para este dispositivo no pueden cargar los controladors requeridos."
+    IDS_DEV_DEVICE_NOT_THERE "Este dispositivo no esta presente, no trabaja correctamente, o no tiene todos los controladors instalados."
+    IDS_DEV_MOVED "ReactOS está en el proceso de instalación de este dispositivo."
+    IDS_DEV_TOO_EARLY "ReactOS está en el proceso de instalación de este dispositivo."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS no puede especificar los recursos para este dispositivo."
+    IDS_DEV_FAILED_INSTALL "Los controladors para este dispositivo no están instalados."
+    IDS_DEV_HARDWARE_DISABLED "Este dispositivo es deshabilitado porque la BIOS para el dispositivo no le dio ningún recurso."
+    IDS_DEV_CANT_SHARE_IRQ "Este dispositivo está utilizando un recurso de la petición de interrupción (IRQ) que usa otro dispositivo y no puede ser compartido. Usted debe cambiar la opción que esta confligiendo o remover el real-mode controlador que causa el conflicto."
+    IDS_DEV_FAILED_ADD "Este dispositivo no está funcionando correctamente porque %1 no está trabajando correctamente."
+    IDS_DEV_DISABLED_SERVICE "ReactOS no puede instalar los controladors para este dispositivo porque no se puede acceder al disco o la localización en la red que tiene los archivos de instalación."
+    IDS_DEV_TRANSLATION_FAILED "Este dispositivo no responde a su controlador."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS no puede determinar las propiedades de este dispositivo. Consulte la documentación que vino con este dispositivo y utiliza la pestaña del recurso para fijar la configuración correcta."
+    IDS_DEV_BIOS_TABLE "Los soportes lógicos inalterables del sistema(firmware) no incluyen suficiente información para configurar correctamente y utilizar este dispositivo Para utilizar este dispositivo, entre en contacto con el fabricante de su equipo para obtener una actualización de la BIOS."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Este dispositivo esta pidiendo un interruptor PC pero  es configurado para interruptor ISA (o vice versa). Por favor utilize el programa de configuración de la BIOS para reconfigurar el interruptor para este dispositivo."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS no puede inicializar el controlador del dispositivo para este hardware."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS no puede cargar el controlador del dispositivo para este hardware porque un caso anterior del controlador de dispositivo todavía está en memoria."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS no puede cargar el controlador del dispositivo para este hardware. El controlador puede estar corrompido o ausente."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS no puede tener acceso a este hardware porque su información de la llave del servicio en el registro es falta o esta registrada incorrectamente."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS cargó con éxito el controlador del dispositivo pero no puede encontrar el dispositivo."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS no puede cargar el controlador de dispositivo para este hardware porque hay un dispositivo duplicado que ya funciona en el sistema."
+    IDS_DEV_FAILED_POST_START "ReactOS a deshabilitado este dispositivo porque a reportado problemas."
+    IDS_DEV_HALTED "Una aplicación o un servicio ha cerrado este dispositivo de hardware."
+    IDS_DEV_PHANTOM "Actualmente, este dispositivo de hardware no está conectado al equipo."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS no puede accesar este dispositivo de hardware porque el sistema operativo está en el proceso de cerrar."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS no puede usar este dispositivo de hardware por que ha sido preparado para quitar con seguiridad, pero aun no ha sido desconectado del equipo."
+    IDS_DEV_DRIVER_BLOCKED "El software para este dispositivo se ha bloqueado de comenzar porque tiene problemas con ReactOS. Entre en contacto con su vendedor de hardware para un controlador nuevo."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS no puede encender los nuevos dispositivos de hardware porque la estructura del sistema es demasiado grande (excede el límite del tamaño del registro)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS no fue capaz de cambiar las propiedades de este dispositivo."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Id. de instancia de dispositivo"
+    IDS_PROP_HARDWAREIDS "Identificadores de hardware"
+    IDS_PROP_COMPATIBLEIDS "Identificadores compatibles"
+    IDS_PROP_MATCHINGDEVICEID "Id. de dispositivo coincidente"
+    IDS_PROP_SERVICE "Servicio"
+    IDS_PROP_ENUMERATOR "Enumerador"
+    IDS_PROP_CAPABILITIES "Recursos"
+    IDS_PROP_DEVNODEFLAGS "Marcadores Devnode"
+    IDS_PROP_CONFIGFLAGS "Marcadores Config"
+    IDS_PROP_CSCONFIGFLAGS "Marcadores CSConfig"
+    IDS_PROP_EJECTIONRELATIONS "Relaciones de extracción"
+    IDS_PROP_REMOVALRELATIONS "Relaciones de eliminación"
+    IDS_PROP_BUSRELATIONS "Relaciones de bus"
+    IDS_PROP_DEVUPPERFILTERS "Filtros superiores de dispositivo"
+    IDS_PROP_DEVLOWERFILTERS "Filtros inferiores de dispositivo"
+    IDS_PROP_CLASSUPPERFILTERS "Filtros superiores de clase"
+    IDS_PROP_CLASSLOWERFILTERS "Filtros inferiores de clase"
+    IDS_PROP_CLASSINSTALLER "Instaladores de clase"
+    IDS_PROP_CLASSCOINSTALLER "Coinstaladores de clase"
+    IDS_PROP_DEVICECOINSTALLER "Coinstaladores de dispositivo"
+    IDS_PROP_FIRMWAREREVISION "Revisión de firmware"
+    IDS_PROP_CURRENTPOWERSTATE "Estado actual de energía"
+    IDS_PROP_POWERCAPABILITIES "Capacidad de energía"
+    IDS_PROP_POWERSTATEMAPPINGS "Asignaciones de estado de energía"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Dispositivos:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Propiedades del dispositivo ", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Solucionar problemas...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "&Propiedades", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "General"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Tipo de dispositivo:", -1, 37, 39, 65, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Fabricante:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Ubicación:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Estado del dispositivo ", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "S&olucionar problemas...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Uso del dispositivo:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Controlador"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Proveedor del controlador:", -1, 15, 39, 92, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Fecha del controlador:", -1, 15, 53, 80, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versión del controlador:", -1, 15, 67, 80, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Firmante digital:", -1, 15, 81, 80, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Detalles del controlador...", IDC_DRIVERDETAILS, 7, 106, 90, 15
+    LTEXT "Ver detalles de los archivos del controlador.", -1, 100, 110, 150, 17, SS_NOPREFIX
+    PUSHBUTTON "&Actualizar controlador...", IDC_UPDATEDRIVER, 7, 126, 90, 15
+    LTEXT "Actualizar el controlador del dispositivo.", -1, 100, 130, 150, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Detalles de archivo de controlador"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Archivos de controlador:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Proveedor:", -1, 10, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versión:", -1, 10, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Copyright:", -1, 10, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Firmante digital:", -1, 10, 182, 60, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "Aceptar", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Detalles"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Recursos"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Ajustes de recurso:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Administración de energía"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/fr-FR.rc b/reactos/dll/win32/devmgr_new/lang/fr-FR.rc
new file mode 100644 (file)
index 0000000..0d750de
--- /dev/null
@@ -0,0 +1,238 @@
+/* French translation by Sylvain Petreolle */
+
+LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Nom"
+    IDS_TYPE "Type"
+    IDS_MANUFACTURER "Fabricant: %1"
+    IDS_LOCATION "Emplacement: %1"
+    IDS_STATUS "État : %1"
+    IDS_UNKNOWN "Inconnu"
+    IDS_LOCATIONSTR "Emplacement %1!u! (%2)"
+    IDS_DEVCODE " (Code %1!u!)"
+    IDS_DEVCODE2 " (Code %2!u!)"
+    IDS_ENABLEDEVICE "Utiliser ce périphérique (activé)"
+    IDS_DISABLEDEVICE "Ne pas utiliser ce matériel (désactivé)"
+    IDS_UNKNOWNDEVICE "Matériel inconnu"
+    IDS_NODRIVERLOADED "Aucun driver n'est installé pour ce matériel."
+    IDS_DEVONPARENT "sur %1"
+    IDS_TROUBLESHOOTDEV "&Dépannage..."
+    IDS_ENABLEDEV "A&ctiver le matériel"
+    IDS_REINSTALLDRV "Ré&installer le Driver"
+    IDS_PROPERTIES "&Propriétés"
+    IDS_UPDATEDRV "Mettre à jour le Driver..."
+    IDS_REBOOT "&Redémarrer l'ordinateur..."
+    IDS_NOTAVAILABLE "Non disponible"
+    IDS_NOTDIGITALLYSIGNED "Non signé numériquement"
+    IDS_NODRIVERS "Aucun fichier n'est requis ou n'a été chargé pour ce matériel."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Ce périphérique fonctionne correctement."
+    IDS_DEV_NOT_CONFIGURED "Ce périphérique n'est pas configuré correctement."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS n'a pas pu charger le pilote de ce périphérique car l'ordinateur signale deux types de bus %1."
+    IDS_DEV_DEVLOADER_FAILED2 "Le(s) chargeur(s) de périphérique %1 pour ce périphérique n'ont pas pu charger le driver."
+    IDS_DEV_OUT_OF_MEMORY "Le pilote de ce périphérique peut être mauvais, ou votre système peut être à court de mémoire ou d'autres ressources."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Ce périphérique ne fonctionne pas correctement parce qu'un des pilotes de ce périphérique peut être mauvais, ou votre base de registres peut être mauvaise."
+    IDS_DEV_LACKED_ARBITRATOR "Le pilote de ce périphérique a demandé une ressource que ReactOS ne sait pas prendre en compte."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Un autre périphérique utilise les ressources nécessaires à ce périphérique."
+    IDS_DEV_FAILED_FILTER "Les pilotes de ce périphérique doivent être réinstallés."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Ce périphérique ne fonctionne pas correctement parce que ReactOS ne peut charger le fichier %1 qui charge les pilotes de ce périphérique."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Ce périphérique ne fonctionne pas correctement parce que le fichier %1 qui charge les pilotes de ce périphérique est mauvais."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Erreur du périphérique: Essayez de changer le pilote du périphérique. Si cela ne fonctionne pas, consultez la documentation du matériel."
+    IDS_DEV_INVALID_DATA "Ce périphérique ne fonctionne pas correctement parce que le BIOS de votre ordinateur rapporte incorrectement les ressources de ce périphérique."
+    IDS_DEV_INVALID_DATA2 "Ce périphérique ne fonctionne pas correctement parce que le BIOS de votre ordinateur rapporte incorrectement les ressources de ce périphérique. "
+    IDS_DEV_FAILED_START "Ce périphérique est soit non présent, ne fonctionne pas correctement, ou n'a pas tous les pilotes installés."
+    IDS_DEV_LIAR "ReactOS a arrêté de fonctionner en essayant de démarrer ce périphérique, et n'essayera donc plus de le démarrer de nouveau."
+    IDS_DEV_NORMAL_CONFLICT "Ce périphérique ne peut pas trouver de ressources %1 à utiliser."
+    IDS_DEV_NOT_VERIFIED "Ce périphérique est soit non présent, ne fonctionne pas correctement, ou n'a pas tous les pilotes installés."
+    IDS_DEV_NEED_RESTART "Ce périphérique ne peut fonctionner correctement tant que vous n'aurez pas redémarré votre ordinateur."
+    IDS_DEV_REENUMERATION "Ce périphérique cause un conflit de ressources."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS n'a pas pu identifier toutes les ressources utilisées par ce périphérique."
+    IDS_DEV_UNKNOWN_RESOURCE "Le fichier d'information du pilote %1 indique à ce périphérique enfant d'utiliser une ressource que le périphérique parent n'a ou ne reconnait pas."
+    IDS_DEV_REINSTALL "Les pilotes de ce périphérique doivent être réinstallés."
+    IDS_DEV_REGISTRY "Votre base de registre peut être mauvaise."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS est en train de supprimer ce périphérique."
+    IDS_DEV_DISABLED "Ce périphérique n'est pas démarré."
+    IDS_DEV_DISABLED2 "Ce périphérique est désactivé."
+    IDS_DEV_DEVLOADER_NOT_READY "Les chargeurs de ce périphérique ne peuvent pas charger les drivers requis."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Cet écran fonctionne correctement."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Les chargeurs de ce périphérique ne peuvent pas charger les drivers requis."
+    IDS_DEV_DEVICE_NOT_THERE "Ce périphérique est soit non présent, soit ne fonctionne pas correctement, ou n'a pas tous les pilotes installés."
+    IDS_DEV_MOVED "ReactOS est en train de mettre en place ce périphérique."
+    IDS_DEV_TOO_EARLY "ReactOS est en train de mettre en place ce périphérique."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS ne peut pas spécifier des ressources pour ce périphérique."
+    IDS_DEV_FAILED_INSTALL "Les pilotes de ce périphérique ne sont pas installés."
+    IDS_DEV_HARDWARE_DISABLED "Ce périphérique est désactivé car le BIOS ne lui a pas donné de ressources."
+    IDS_DEV_CANT_SHARE_IRQ "Ce périphérique utilise une Interruption Matérielle (IRQ) qui est utilisée par un autre périphérique et ne peut être partagée.\nVous devez changer les réglages en conflit ou enlever le pilote en mode-réel causant le conflit."
+    IDS_DEV_FAILED_ADD "Ce périphérique ne fonctionne pas correctement parce que %1 ne fonctionne pas correctement."
+    IDS_DEV_DISABLED_SERVICE "ReactOS ne peut pas installer les pilotes pour ce périphérique car il ne peut pas accéder au lecteur ou à l'emplacement réseau contenant les fichiers d'installation."
+    IDS_DEV_TRANSLATION_FAILED "Ce périphérique ne répond pas à son pilote."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS ne peut pas déterminer les réglages de ce périphérique. Consultez la documentation accompagnant ce périphérique et utilisez la page des Ressources pour modifier la configuration."
+    IDS_DEV_BIOS_TABLE "Le firmware de votre ordinateur n'inclut pas assez d'informations pour configurer et utiliser correctement ce périphérique. \nPour utiliser ce périphérique, contactez le fabricant de votre ordinateur afin d'obtenir une mise à jour du firmware ou du BIOS."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Ce périphérique demande une Interruption PCI mais il est configuré pour une Interruption ISA (ou vice versa). \nVeuillez utiliser le programme système d'installation de l'ordinateur pour reconfigurer les interruptions de ce périphérique."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS ne peut pas initialiser le pilote de ce matériel."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS ne peut pas charger le pilote de ce matériel parce qu'une instance précédente de ce pilote est toujours en mémoire."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS ne peut pas charger le pilote de ce matériel. Le pilote peut être corrompu ou manquant."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS ne peut pas accéder à ce matériel parce que la clé de registre de son service est manquante ou incorrectement inscrite."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS a chargé avec succès le pilote pour ce matériel mais n'a pas pu trouver le périphérique matériel."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS ne peut pas charger le pilote pour ce périphérique matériel parce qu'un matériel en double tourne déjà dans le système."
+    IDS_DEV_FAILED_POST_START "ReactOS a arrêté ce périphérique car il a signalé des problèmes."
+    IDS_DEV_HALTED "Une application ou un service a arrêté ce périphérique matériel."
+    IDS_DEV_PHANTOM "Ce périphérique matériel n'est pas connecté à l'ordinateur actuellement."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS ne peut pas accéder à ce matériel parce que le système est en train de s'arrêter."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS ne peut pas utiliser ce matériel parce qu'il a été préparé pour être enlevé, mais n'a pas encore été enlevé de l'ordinateur."
+    IDS_DEV_DRIVER_BLOCKED "Le logiciel de ce périphérique a été empéché de démarrer car il est connu pour avoir des problèmes avec ReactOS. Contactez votre vendeur pour obtenir un pilote adéquat."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS ne peut pas démarrer de nouveaux matériels parce que la base de registre est trop grande (dépasse la taille limite de la base)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS n'a pas pu changer les réglages de ce périphérique."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Périphériques:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Propriétés des périphériques", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Dépannage...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "P&ropriétés", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Général"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Type de matériel :", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Fabricant :", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Emplacement :", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "État du matériel", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Dépannage...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Utilisation du matériel:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Pilote"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Fournisseur :", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 120, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Date du Pilote :", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 120, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Version du Pilote :", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 120, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Signature numérique :", -1, 37, 81, 80, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 120, 81, 126, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Détails...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Voir les détails à propos des fichiers du Pilote.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Fichiers du Pilote"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Fichiers :", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Fournisseur :", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Version :", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Copyright:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Signature numérique :", -1, 14, 182, 80, 8
+    EDITTEXT IDC_DIGITALSIGNER, 96, 182, 125, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Power"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/he-IL.rc b/reactos/dll/win32/devmgr_new/lang/he-IL.rc
new file mode 100644 (file)
index 0000000..be0bf81
--- /dev/null
@@ -0,0 +1,239 @@
+/* Hebrew translation by Baruch Rutman */
+
+LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "שם"
+    IDS_TYPE "סוג"
+    IDS_MANUFACTURER "יצרן: %1"
+    IDS_LOCATION "מיקום: %1"
+    IDS_STATUS "מצב ההתקן: %1"
+    IDS_UNKNOWN "לא ידוע"
+    IDS_LOCATIONSTR "מיקום %1!u! (%2)"
+    IDS_DEVCODE " (קוד %1!u!)"
+    IDS_DEVCODE2 " (קוד %2!u!)"
+    IDS_ENABLEDEVICE "התשמש בהתקן זה (אפשר)"
+    IDS_DISABLEDEVICE "אל תשתמש בהתקן זה (הפסק)"
+    IDS_UNKNOWNDEVICE "התקן לא ידוע"
+    IDS_NODRIVERLOADED "אין מנהלי התקנים מותקנים עבור התקן זה"
+    IDS_DEVONPARENT "על %1"
+    IDS_TROUBLESHOOTDEV "פתור בעיות..."
+    IDS_ENABLEDEV "אפשר התקן"
+    IDS_REINSTALLDRV "התקן מחדש את מנהל ההתקן"
+    IDS_PROPERTIES "מאפיינים"
+    IDS_UPDATEDRV "עדכן מנהל התקן..."
+    IDS_REBOOT "הפעל מחדש את המחשב..."
+    IDS_NOTAVAILABLE "לא זמין"
+    IDS_NOTDIGITALLYSIGNED "לא חתום דיגיטלית"
+    IDS_NODRIVERS "קבצי מנהל ההתקן עבור התקן זה אינם דרושים ולא נטענו."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "התקן זה פועל כראוי"
+    IDS_DEV_NOT_CONFIGURED "This device is not configured correctly."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS  could not load the driver for this device because the computer is reporting two %1 bus types."
+    IDS_DEV_DEVLOADER_FAILED2 "The %1 device loader(s) for this device could not load the device driver."
+    IDS_DEV_OUT_OF_MEMORY "The driver for this device may be bad, or your system may be running low on memory or other resources."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "This device is not working properly because one of its drivers may be bad, or your registry may be bad."
+    IDS_DEV_LACKED_ARBITRATOR "The driver for this device requested a resource that ReactOS does not know how to handle."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Another device is using the resources this device needs."
+    IDS_DEV_FAILED_FILTER "The drivers for this device need to be reinstalled."
+    IDS_DEV_DEVLOADER_NOT_FOUND "This device is not working properly because ReactOS cannot load the file %1 that loads the drivers for the device."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "This device is not working properly because the file %1 that loads the drivers for this device is bad."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Device failure: Try changing the driver for this device. If that doesn't work, see your hardware documentation."
+    IDS_DEV_INVALID_DATA "This device is not working properly because the BIOS in your computer is reporting the resources for the device incorrectly."
+    IDS_DEV_INVALID_DATA2 "This device is not working properly because the BIOS in the device is reporting the resources for the device incorrectly. "
+    IDS_DEV_FAILED_START "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_LIAR "ReactOS stopped responding while attempting to start this device, and therefore will never attempt to start this device again."
+    IDS_DEV_NORMAL_CONFLICT "This device cannot find any free %1 resources to use."
+    IDS_DEV_NOT_VERIFIED "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_NEED_RESTART "This device cannot work properly until you restart your computer."
+    IDS_DEV_REENUMERATION "This device is causing a resource conflict."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS could not identify all the resources this device uses."
+    IDS_DEV_UNKNOWN_RESOURCE "The driver information file %1 is telling this child device to use a resource that the parent device does not have or recognize."
+    IDS_DEV_REINSTALL "The drivers for this device need to be reinstalled."
+    IDS_DEV_REGISTRY "Your registry may be bad."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS is removing this device."
+    IDS_DEV_DISABLED "This device is not started."
+    IDS_DEV_DISABLED2 "This device is disabled."
+    IDS_DEV_DEVLOADER_NOT_READY "The loaders for this device cannot load the required drivers."
+    IDS_DEV_DEVLOADER_NOT_READY2 "This display adapter is functioning correctly."
+    IDS_DEV_DEVLOADER_NOT_READY3 "The loaders for this device cannot load the required drivers."
+    IDS_DEV_DEVICE_NOT_THERE "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_MOVED "ReactOS is in the process of setting up this device."
+    IDS_DEV_TOO_EARLY "ReactOS is in the process of setting up this device."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS can't specify the resources for this device."
+    IDS_DEV_FAILED_INSTALL "The drivers for this device are not installed."
+    IDS_DEV_HARDWARE_DISABLED "This device is disabled because the BIOS for the device did not give it any resources."
+    IDS_DEV_CANT_SHARE_IRQ "This device is using an Interrupt Request (IRQ) resource that is in use by another device and cannot be shared.\nYou must change the conflicting setting or remove the real-mode driver causing the conflict."
+    IDS_DEV_FAILED_ADD "This device is not working properly because %1 is not working properly."
+    IDS_DEV_DISABLED_SERVICE "ReactOS cannot install the drivers for this device because it cannot access the drive or network location that has the setup files on it."
+    IDS_DEV_TRANSLATION_FAILED "This device isn't responding to its driver."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS cannot determine the settings for this device. Consult the documentation that came with this device and use the Resource tab to set the configuration."
+    IDS_DEV_BIOS_TABLE "Your computer's system firmware does not include enough information to properly configure and use this device. \nTo use this device, contact your computer manufacturer to obtain a firmware or BIOS update."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "This device is requesting a PCI interrupt but is configured for an ISA interrupt (or vice versa). \nPlease use the computer's system setup program to reconfigure the interrupt for this device."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS cannot initialize the device driver for this hardware."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS cannot load the device driver for this hardware because a previous instance of the device driver is still in memory."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS cannot load the device driver for this hardware. The driver may be corrupted or missing."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS cannot access this hardware because its service key information in the registry is missing or recorded incorrectly."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS successfully loaded the device driver for this hardware but cannot find the hardware device."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS cannot load the device driver for this hardware because there is a duplicate device already running in the system."
+    IDS_DEV_FAILED_POST_START "ReactOS has stopped this device because it has reported problems."
+    IDS_DEV_HALTED "An application or service has shut down this hardware device."
+    IDS_DEV_PHANTOM "Currently, this hardware device is not connected to the computer."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS cannot gain access to this hardware device because the operating system is in the process of shutting down."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS cannot use this hardware device because it has been prepared for safe removal, but it has not been removed from the computer"
+    IDS_DEV_DRIVER_BLOCKED "The software for this device has been blocked from starting because it is known to have problems with ReactOS. Contact the hardware vendor for a new driver."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS cannot start new hardware devices because the system hive is too large (exceeds the Registry Size Limit)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS wasn't able to change the settings of this device."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "התקנים:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "מאפייני התקן", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "פתירת בעיות...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "מאפיינים", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "כללי"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "סוג התקן:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "יצרן:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "מיקום:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "מצב ההתקן", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "פתירת בעיות...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "שימוש של ההתקן:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "מנהל התקן"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "ספק מנהל התקן:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "תאריך מנהל התקן:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "גירסת מנהל התקן:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "יוצר חתימה דיגיטלית:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "פרטי מנהל ההתקן...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "לשם הצגת פרטים אודות קבצי מנהל ההתקן.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "פרטי קובץ מנהל התקן"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "קבצי מנהל התקן:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "ספק:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "גרסת קובץ:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "זכויות יוצרים:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "יוצר חתימה דיגיטלית:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "אישור", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "פרטים"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "צריכת חשמל"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/hu-HU.rc b/reactos/dll/win32/devmgr_new/lang/hu-HU.rc
new file mode 100644 (file)
index 0000000..e6ef778
--- /dev/null
@@ -0,0 +1,238 @@
+/* Hungarian translation by Robert Horvath, talley at cubeclub dot hu */
+
+LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Név"
+    IDS_TYPE "Típus"
+    IDS_MANUFACTURER "Gyártó: %1"
+    IDS_LOCATION "Hely: %1"
+    IDS_STATUS "Eszköz állapota: %1"
+    IDS_UNKNOWN "Ismeretlen"
+    IDS_LOCATIONSTR "Hely %1!u! (%2)"
+    IDS_DEVCODE " (Code %1!u!)"
+    IDS_DEVCODE2 " (Code %2!u!)"
+    IDS_ENABLEDEVICE "Eszköz használata (bekapcsolva)"
+    IDS_DISABLEDEVICE "Ne használja ezt az eszközt (kikapcsolva)"
+    IDS_UNKNOWNDEVICE "Ismeretlen eszköz"
+    IDS_NODRIVERLOADED "Nincsenek meghajtó szoftverek telepítve ehhez az eszközhöz."
+    IDS_DEVONPARENT "on %1"
+    IDS_TROUBLESHOOTDEV "&Hibakeresés..."
+    IDS_ENABLEDEV "Eszköz &bekapcsolása"
+    IDS_REINSTALLDRV "Illesztõprogramok új&ratelepítése"
+    IDS_PROPERTIES "&Tulajdonságok"
+    IDS_UPDATEDRV "Illesztõprogramok &frissítése..."
+    IDS_REBOOT "Számítógép &újraindítása..."
+    IDS_NOTAVAILABLE "Not available"
+    IDS_NOTDIGITALLYSIGNED "Not digitally signed"
+    IDS_NODRIVERS "No driver files are required or have been loaded for this device."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Ez az eszköz megfelelõen mûködik."
+    IDS_DEV_NOT_CONFIGURED "Ez az eszköz rosszul van beállítva."
+    IDS_DEV_DEVLOADER_FAILED "A ReactOS nem tudja betölteni a meghajtóprogramot ehhez az eszközhöz, mert a számítógép két %1 busz típust lát."
+    IDS_DEV_DEVLOADER_FAILED2 "A(z) %1 eszközvezérlõ betöltõ nem tudják betölteni ennek az eszköznek a meghajtóprogramját."
+    IDS_DEV_OUT_OF_MEMORY "Az eszköz meghajtóprogram hibás lehet, vagy nincs elég memória a betöltéséhez."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Ez az eszköz nem tud mûködni, mert a meghajtóprogramjai vagy a rendszerleíró bejegyzései hibásak."
+    IDS_DEV_LACKED_ARBITRATOR "Az eszköz meghajtóprogramja egy olyan erõforrást igényel amit nem tud a ReactOS kezelni."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Egy másik eszköz használja azokat az erõforrásokat amelyeket ez az eszköz igényel."
+    IDS_DEV_FAILED_FILTER "Az eszköz meghajtóprogramjait újra kell telepíteni."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Ez az eszköz nem mûködik, mert a ReactOS nem tudja betölteni a meghajtóprogramjait, mivel a(z) %1 elérhetetlen."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Ez az eszköz nem mûködik, mert a ReactOS nem tudja betölteni a meghajtóprogramjait, mivel a(z) %1 sérült."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Eszköz hiba: próbáld meg kicserélni a meghajtóprogramokat, és ha ez sem segít akkor nézd meg a felhasználói könyvét."
+    IDS_DEV_INVALID_DATA "Ez az eszköz lehet, hogy nem fog megfelelõen mûködni, mert a számítógép BIOS-a rossz erõforrásokat osztott ki."
+    IDS_DEV_INVALID_DATA2 "Ez az eszköz lehet, hogy nem fog megfelelõen mûködni, mert az eszköz BIOS-a rossz erõforrásokat igényelt."
+    IDS_DEV_FAILED_START "Ez az eszköz már nincs jelen, elromlott vagy nincs minden meghajtóprogram feltelepítve hozzá."
+    IDS_DEV_LIAR "A ReactOS megállt miközben megpróbálta elindítani ezt az eszközt, ezért nem fogja mégegyszer megpróbálni."
+    IDS_DEV_NORMAL_CONFLICT "Az eszköz nem tud szabad %1 erõforrást találni."
+    IDS_DEV_NOT_VERIFIED "Az eszköz illesztõprogramja nem találja az eszközt."
+    IDS_DEV_NEED_RESTART "Ez az eszköz nem tud megfelelõen mûködni, amíg nem indítod újra a gépet."
+    IDS_DEV_REENUMERATION "Az eszköz erõforrás ütközést okozott elõ."
+    IDS_DEV_PARTIAL_LOG_CONF "A ReactOS nem tudja azonosítani az eszköz által használt erõforrásokat."
+    IDS_DEV_UNKNOWN_RESOURCE "Az illesztõprogram olyan erõforrás használatára kényszeríti az eszközt, amelyet nem tud kezelni a számítógép eszközvezérlõje."
+    IDS_DEV_REINSTALL "Az eszköz illesztõprogramjait újra kell telepíteni."
+    IDS_DEV_REGISTRY "A rendszerleíró hibás lehet."
+    IDS_DEV_WILL_BE_REMOVED "A ReactOS eltávolítja ezt az eszközt."
+    IDS_DEV_DISABLED "Az eszköz nincs bekapcsolva."
+    IDS_DEV_DISABLED2 "Az eszköz nincs bekapcsolva."
+    IDS_DEV_DEVLOADER_NOT_READY "Nem lehet betölteni az igényelt eszköz illesztõprogramjait."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Ez a megjelenítõ megfelelõen mûködik."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Nem lehet betölteni az igényelt eszköz illesztõprogramjait."
+    IDS_DEV_DEVICE_NOT_THERE "Ez az eszköz már nincs jelen, elromlott vagy nincs minden illesztõprogram feltelepítve hozzá."
+    IDS_DEV_MOVED "A ReactOS épp az eszközt telepíti."
+    IDS_DEV_TOO_EARLY "A ReactOS épp az eszközt telepíti."
+    IDS_DEV_NO_VALID_LOG_CONF "A ReactOS nemtudja megállapítani, hogy milyen erõforrásokat igényel az eszköz."
+    IDS_DEV_FAILED_INSTALL "Az eszközhoz nincsenek illesztõprogramok telepítve."
+    IDS_DEV_HARDWARE_DISABLED "Az eszköz levan tiltva, mivel a BIOS-a nem adott neki erõforrást."
+    IDS_DEV_CANT_SHARE_IRQ "Ez az eszköz egy olyan megszakítást (IRQ) igényelt, amit egy másik eszköz használ és nem oszthatja meg. Meg kell változtatnod az erõforrás kiosztást, vagy eltávolítanod a real-mode (16 bites) illesztõprogramot."
+    IDS_DEV_FAILED_ADD "Ez az eszköz nem tud megfelelõen mûködni, mivel a(z) %1 sem mûködik megfelelõen."
+    IDS_DEV_DISABLED_SERVICE "A ReactOS nem tudja feltelepíteni az eszköz illesztõprogramjait, mivel a programokat tartalmazó hely nem elérhetõ."
+    IDS_DEV_TRANSLATION_FAILED "Ez az eszköz nem válaszol a illesztõprogramjának."
+    IDS_DEV_NO_SOFTCONFIG "A ReactOS nem tudja kitalálni a beállításokat ehhez az eszközhöz. Használd a felhasználói utasítást, ami ehhez az eszközhöz jár, és állítsd be az erõforrásait."
+    IDS_DEV_BIOS_TABLE "A számítógép nem tud elég információt adni, hogy ezt az eszközt megfelelõen használja. Konzultálj a gép karbantartójával, illetve a céggel aki szállította, hogy igényelj egy firmware vagy BIOS frissítést."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Ez az eszköz egy PCI megszakítást igényelt de ISA megszakítást használ (vagy fordítva). Használd a géphez kapott illesztõprogramokat, hogy beállíthasd megfelelõen."
+    IDS_DEV_FAILED_DRIVER_ENTRY "A ReactOS nem tudja elindítani az eszköz illesztõprogramját."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "A ReactOS nem tudja elindítani az eszköz illesztõprogramját mivel egy elõzõ illesztõprogram már bevan töltve a memóriában."
+    IDS_DEV_DRIVER_FAILED_LOAD "A ReactOS nem tudja elindítani az eszköz illesztõprogramját. Az illesztõprogram sérült vagy hiányzik."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "A ReactOS nem tudja elérni ezt az eszközt, mivel a szervíz beállításai a rendszerleíróban hibásak vagy hiányoznak."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "A ReactOS betudta tölteni az eszköz illesztõprogramját, de nem találja az eszközt."
+    IDS_DEV_DUPLICATE_DEVICE "A ReactOS nem tudja elindítani az eszköz illesztõprogramját mivel már fut egy ilyen illesztõprogram."
+    IDS_DEV_FAILED_POST_START "A ReactOS leállította ezt az eszközt mert problémák léptek fel."
+    IDS_DEV_HALTED "Egy alkalmazás vagy szolgáltatás leállította ezt az eszközt."
+    IDS_DEV_PHANTOM "Jelenleg ez az eszköz nincs a számítógéphez csatlakoztatva."
+    IDS_DEV_SYSTEM_SHUTDOWN "A ReactOS nem tud hozzáférni ehhez az eszközhöz, mivel a rendszer a leállítás folyamatában van."
+    IDS_DEV_HELD_FOR_EJECT "A ReactOS nem tudja használni ezt az eszközt, mivel a ""Biztonságos eltávolítás"" fázisba került de még nem lett eltávolítva."
+    IDS_DEV_DRIVER_BLOCKED "Az eszközhöz tartozó szoftver nem lett elindítva mivel nem mûködik a ReactOS-al. Kérj egy friss illesztõprogram csomagot a gyártójától."
+    IDS_DEV_REGISTRY_TOO_LARGE "A ReactOS nem tudja elindítani ezt az eszközt mert a rendszerleíró elérte a maximum méretét."
+    IDS_DEV_SETPROPERTIES_FAILED "A ReactOS nem tudta megváltoztatni az eszköz beállításait."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Eszközök:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Eszköz tulajdonságok", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Hiba megoldása...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "&Tulajdonságok", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Általános"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Eszköz típus:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Gyárta:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Hely:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Eszköz állapot", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Hiba megoldása...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Eszköz használat:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Illesztõprogram"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Illesztõprogram szállítója:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Illesztõprogram kiadása:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Illesztõprogram verziója:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digital Signer:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Driver Details...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "To view details about the driver files.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Driver File Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Driver files:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Provider:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "File version:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Copyright:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digital Signer:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Power"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/id-ID.rc b/reactos/dll/win32/devmgr_new/lang/id-ID.rc
new file mode 100644 (file)
index 0000000..f77b2e0
--- /dev/null
@@ -0,0 +1,239 @@
+/* Indonesian translation by Zaenal Mutaqin, 2007-02-16 */
+
+LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Nama"
+    IDS_TYPE "Tipe"
+    IDS_MANUFACTURER "Manufakturer: %1"
+    IDS_LOCATION "Lokasi: %1"
+    IDS_STATUS "Device Status: %1"
+    IDS_UNKNOWN "Tidak dikenal"
+    IDS_LOCATIONSTR "Lokasi %1!u! (%2)"
+    IDS_DEVCODE " (Kode %1!u!)"
+    IDS_DEVCODE2 " (Kode %2!u!)"
+    IDS_ENABLEDEVICE "Gunakan device ini (hidupkan)"
+    IDS_DISABLEDEVICE "Jangan gunakan device ini (matikan)"
+    IDS_UNKNOWNDEVICE "Device tidak dikenal"
+    IDS_NODRIVERLOADED "Driver tidak diinstalasi untuk device ini."
+    IDS_DEVONPARENT "pada %1"
+    IDS_TROUBLESHOOTDEV "&Pecahkan Masalah..."
+    IDS_ENABLEDEV "Hidupka&n Device"
+    IDS_REINSTALLDRV "Re&instalasi Driver"
+    IDS_PROPERTIES "P&roperti"
+    IDS_UPDATEDRV "&Mutakhirkan Driver..."
+    IDS_REBOOT "Mulai lagi &Komputer..."
+    IDS_NOTAVAILABLE "Tidak tersedia"
+    IDS_NOTDIGITALLYSIGNED "Tidak ditandatangan secara digital"
+    IDS_NODRIVERS "File driver tidak diperlukan atau sudah diambil untuk device ini."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Device ini bekerja dengan baik."
+    IDS_DEV_NOT_CONFIGURED "Device ini tidak dikonfigurasi dengan baik."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS  tidak bisa mengambil driver untuk device ini karena komputer melaporkan dua %1 tipe bus."
+    IDS_DEV_DEVLOADER_FAILED2 "Pengambil device %1 untuk device ini tidak mengambil device driver."
+    IDS_DEV_OUT_OF_MEMORY "Driver untuk device ini mungkin rusak, sistem anda bisa berjalan lambat pada memori atau sumber daya lain."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Device ini tidak bekerja dengan baik karena salah satu driver-nya mungkin rusak, atau registri anda mungkin rusak."
+    IDS_DEV_LACKED_ARBITRATOR "Driver untuk device ini meminta resource dimana ReactOS tidak mengetahui bagaimana menanganinya."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Device lain sedang menggunakan resources yang dibutuhkan device ini."
+    IDS_DEV_FAILED_FILTER "Drivers untuk device ini perlu diinstalasi ulang."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Device ini tidak bekerja dengan baik karena ReactOS tida dapat mengambil file %1 yang mengambil driver untuk device ini."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Device ini tidak bekerja dengan baik karena file %1 yang mengambil driver untuk device ini rusak."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Kegagalan device: Coba mengubah driver untuk device ini. Jika itu tidak bekerja, lihat dokumentasi hardware anda."
+    IDS_DEV_INVALID_DATA "Device ini tidak bekerja dengan baik karena BIOS dalam komputer anda melaporkan resources untuk device secara tidak benar."
+    IDS_DEV_INVALID_DATA2 "Device ini tidak bekerja dengan baik karena BIOS dalam komputer anda melaporkan resources untuk device secara tidak benar."
+    IDS_DEV_FAILED_START "Device ini baik tidak ada, tidak bekerja dengan baik, ataupun drivernya tidak semua terinstalasi."
+    IDS_DEV_LIAR "ReactOS berhenti merespon ketika mencoba untuk memulai device ini, dan karenanya tidak akan pernah mecoba untuk memulai lagi device ini."
+    IDS_DEV_NORMAL_CONFLICT "Device ini tidak menemukan %1 resources bebas untuk digunakan."
+    IDS_DEV_NOT_VERIFIED "Device ini baik tidak ada, tidak bekerja dengan baik, ataupun drivernya tidak semua terinstalasi."
+    IDS_DEV_NEED_RESTART "Device ini tidak akan bekerja denganbaik sampai anda memulai lagi komputer anda."
+    IDS_DEV_REENUMERATION "Device ini menyebabkan konflik resource."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS tidak mengenali semua resources yang dipakai device ini."
+    IDS_DEV_UNKNOWN_RESOURCE "File informasi driver %1 memberitahu device anak ini untuk memakai resource yang tidak dimiliki atau dikenal device leluhurnya."
+    IDS_DEV_REINSTALL "Driver untuk device ini perlu diinstalasi ulang."
+    IDS_DEV_REGISTRY "Registri anda mungkin rusak."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS menghapus device ini."
+    IDS_DEV_DISABLED "Device ini tidak dimulai."
+    IDS_DEV_DISABLED2 "Device ini dimatikan."
+    IDS_DEV_DEVLOADER_NOT_READY "Pengambil device ini tidak bisa mengambil driver yang dibutuhkan."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Adapter tampilan ini berfungsi dengan baik."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Pengambil device ini tidak bisa mengambil driver yang dibutuhkan."
+    IDS_DEV_DEVICE_NOT_THERE "Device ini baik tidak ada, tidak bekerja dengan baik, ataupun drivernya tidak semua terinstalasi."
+    IDS_DEV_MOVED "ReactOS sedang dalam proses menyiapkan device ini."
+    IDS_DEV_TOO_EARLY "ReactOS sedang dalam proses menyiapkan device ini."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS tidak bisa menetapkan resources untuk device ini."
+    IDS_DEV_FAILED_INSTALL "Driver untuk device ini tidak diinstalasi."
+    IDS_DEV_HARDWARE_DISABLED "Device ini dimatikan karena BIOS untuk device ini tidak memberikan resource-nya."
+    IDS_DEV_CANT_SHARE_IRQ "Device ini menggunakan Interrupt Request (IRQ) resource yang dipakai oleh device lain dan tidak bisa berbagi.\nAnda harus mengubah setelan yang konflik atau menghapus real-mode driver penyebab konflik."
+    IDS_DEV_FAILED_ADD "Device ini tidak bekerja dengan benar karena %1 tidak bekerja dengan baik."
+    IDS_DEV_DISABLED_SERVICE "ReactOS tidak bisa menginstalasi driver untuk device ini karena ia tidak bisa mengakses drive atau lokasi jaringan dimana file setup berada di dalamnya."
+    IDS_DEV_TRANSLATION_FAILED "Device ini tidak merespon terhadap driver-nya."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS tidak bisa memeriksa setelan untuk device ini. Lihat dokumentasi yang datang dengan device ini dan gunakan tab Resource untuk menyetel konfigurasi."
+    IDS_DEV_BIOS_TABLE "Firmware sistem komputer anda tidak menyertakan informasi cukup untuk dikonfigurasi dengan benar dan memakai device ini. \nUntuk menggunakan device ini, lihat manufakturer komputer anda guna mendapatkan pemutakhiran firmware atau BIOS."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Device ini meminta interupsi PCI tapi dikonfigurasi untuk interupsi ISA (atau sebaliknya). \nSilahkan gunakan program setup sistem komputer anda untuk mengkonfigurasi ulang pada device ini."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS tidak bisa menginisialisasi device driver untuk hardware ini."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS tidak bisa mengambil device driver untuk hardware ini karena instan sebelumnya pada device driver masih dalam memori."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS tidak bisa mengambil device driver untuk hardware ini. Driver mungkin rusak atau hilang."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS tidak bisa mengakses hardware ini karena informasi kunci layanan dalam registri hilang atau direkam secara tidak benar."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS mengambil device driver untuk hardware dengan sukses tapi tidak bisa menemukan hardware device."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS tidak bisa mengambil device driver untuk hardware ini karena ada duplikasi device yang sudah berjalan dalam sistem."
+    IDS_DEV_FAILED_POST_START "ReactOS telah menghentikan device ini karena dilaporkan bermasalah."
+    IDS_DEV_HALTED "Aplikasi atau layanan telah mematikan hardware device ini."
+    IDS_DEV_PHANTOM "Saat ini, hardware device ini tidak disambungkan ke komputer."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS tidak mendapatkan akses terhadap hardware device ini karena sistem operasi masih dalam proses dimatikan."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS tidak bisa memakai hardware device ini karena ia disiapkan untuk penghapusan aman, tapi ia tidak dihapus dari komputer"
+    IDS_DEV_DRIVER_BLOCKED "Software untuk device ini telah diblok dari awal karena ia dikenal mempunyai masalah dengan ReactOS. Hubungi vendor hardware untuk meminta driver baru."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS tidak bisa memulai hardware devices baru karena hive sistem terlalu besar (melebihi Batas Ukuran Registri)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS tidak bisa mengubah setelan device ini."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Device:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Properti Device", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "Pecahkan &Maslah...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "P&roperti", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Umum"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Tipe Device:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Manufakturer:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Lokasi:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Status Device", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "Pecahkan &Masalah...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "Penggunaan &Device:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Driver"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Penyedia Driver:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Tanggal driver:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versi driver:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Penanda tangan Digital:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "Rincian &Driver...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Untuk melihat rincian tetang file driver.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Rincian File Driver"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "File &Driver:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Penyedia:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versi File:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Hak Cipta:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Penanda tangan Digital:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Power"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/it-IT.rc b/reactos/dll/win32/devmgr_new/lang/it-IT.rc
new file mode 100644 (file)
index 0000000..9be3be8
--- /dev/null
@@ -0,0 +1,239 @@
+/* Italian translation by Paolo Devoti, devotip@tiscali.it, 2007-01-10 */
+
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Nome"
+    IDS_TYPE "Tipo"
+    IDS_MANUFACTURER "Produttore: %1"
+    IDS_LOCATION "Località: %1"
+    IDS_STATUS "Stato del dispositivo: %1"
+    IDS_UNKNOWN "Sconosciuto"
+    IDS_LOCATIONSTR "Località %1!u! (%2)"
+    IDS_DEVCODE " (Codice %1!u!)"
+    IDS_DEVCODE2 " (Codice %2!u!)"
+    IDS_ENABLEDEVICE "Usa questo dispositivo (abilita)"
+    IDS_DISABLEDEVICE "Non usare questo dispositivo (disabilita)"
+    IDS_UNKNOWNDEVICE "Dispositivo sconosciuto"
+    IDS_NODRIVERLOADED "Nessun driver è installato per questo dispositivo."
+    IDS_DEVONPARENT "su %1"
+    IDS_TROUBLESHOOTDEV "&Verifiche di funzionamento..."
+    IDS_ENABLEDEV "&Abilita il dispositivo"
+    IDS_REINSTALLDRV "Re&installe il Driver"
+    IDS_PROPERTIES "P&roprietà"
+    IDS_UPDATEDRV "&Aggiorna il Driver..."
+    IDS_REBOOT "Riavvia il &Computer..."
+    IDS_NOTAVAILABLE "Non disponibile"
+    IDS_NOTDIGITALLYSIGNED "Manca la firma digitale"
+    IDS_NODRIVERS "Nessun driver è necessario o è stato caricato per questo dispositivo."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Questo dispositivo funziona regolarmente."
+    IDS_DEV_NOT_CONFIGURED "Questo dispositivo non è configurato correttamente."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS non può caricare il driver di questo dispositivo perchè il computer stà rilevando due tipi di bus %1 ."
+    IDS_DEV_DEVLOADER_FAILED2 "Il loader %1 per questo dispositivo non puo' caricare il driver."
+    IDS_DEV_OUT_OF_MEMORY "Il driver di questo dispositivo potrebbe essere sbagliato, o il sistema potrebbe non avere sufficiente memoria o altre risorse."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Questo dispositivo non funziona regolarmente perchè uno dei driver è sbagliato, o è sbagliato il registry."
+    IDS_DEV_LACKED_ARBITRATOR "Il drive di questo dispositivo ha richiesto delle risorse che ReactOS non sa come gestire."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Un altro dispositivo stà usando le risorse richieste da questo dispositivo."
+    IDS_DEV_FAILED_FILTER "Il driver di questo dispositivo deve essere reinstallato."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Questo dispositivo non funziona regolarmente perchè ReactOS non può caricare il file %1 che carica i driver per questo dispositivo."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Questo dispositivo non funziona regolarmente perchè il file %1 che carica i driver per questo dispositivo è sbagliato."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Anomalia del dispositivo: Prova a cambiare il driver. Se non ha effetto verifica la documentazione dell'hardware."
+    IDS_DEV_INVALID_DATA "Questo dispositivo non funziona regolarmente perchè il BIOS del computer indica in modo errato le risorse per il dispositivo."
+    IDS_DEV_INVALID_DATA2 "Questo dispositivo non funziona regolarmente perchè il BIOS del dispositivo indica in modo errato le risorse per il dispositivo. "
+    IDS_DEV_FAILED_START "Il dispositivo può essere assente, malfunzionante o non ha tutti i driver necessari."
+    IDS_DEV_LIAR "ReactOS si è bloccato durante il tentativo di avvio di questo dispositivo, di conseguenza non verranno fatti ulteriori tentativi di avvio di questo dispositivo."
+    IDS_DEV_NORMAL_CONFLICT "Impossibile trovare %1 libera da usare."
+    IDS_DEV_NOT_VERIFIED "Il dispositivo può essere assente, malfunzionante o non ha tutti i driver necessari."
+    IDS_DEV_NEED_RESTART "Il dispositivo non funzionerà regolarmente prima del riavvio del computer."
+    IDS_DEV_REENUMERATION "Conflitto nell'uso delle risorse."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS non può identificare tutte le risorse usate da questo dispositivo."
+    IDS_DEV_UNKNOWN_RESOURCE "Il file %1 con le informazioni sul driver dichiara che il dispositivo dipendente deve usare risorse che non sono a disposizione del dispositivo base."
+    IDS_DEV_REINSTALL "Il driver di questo dispositivo deve essere reinstallato."
+    IDS_DEV_REGISTRY "Il registry potrebbe essere sbagliato."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS sta rimuovendo questo dispositivo."
+    IDS_DEV_DISABLED "Questo dispositivo non è avviato."
+    IDS_DEV_DISABLED2 "Questo dispositivo è disabilitato."
+    IDS_DEV_DEVLOADER_NOT_READY "Il loader del dispositivo non può caricare i driver necessari."
+    IDS_DEV_DEVLOADER_NOT_READY2 "L'adattatore per il monitor funziona regolarmente."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Il loader del dispositivo non può caricare i driver necessari."
+    IDS_DEV_DEVICE_NOT_THERE "Il dispositivo può essere assente, malfunzionante o non ha tutti i driver necessari."
+    IDS_DEV_MOVED "ReactOS sta per attivare questo dispositivo."
+    IDS_DEV_TOO_EARLY "ReactOS sta per attivare questo dispositivo."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS non può indicare le risorse per questo dispositivo."
+    IDS_DEV_FAILED_INSTALL "I driver non sono installati."
+    IDS_DEV_HARDWARE_DISABLED "Disabilitato perchè il BIOS del dispositivo non ha assegnato nessuna risorsa."
+    IDS_DEV_CANT_SHARE_IRQ "Questo dispositivo usa un Interrupt Request (IRQ) che è già in uso e non può essere condiviso.\nDevi cambiare l'impostazione in conflitto o togliere il driver ""real-mode"" che provoca il conflitto."
+    IDS_DEV_FAILED_ADD "Non funziona regolarmente a causa di %1 ."
+    IDS_DEV_DISABLED_SERVICE "ReactOS non può installare i driver del dispositivo perchè non è possibile accedere al disco o alla rete dove si trovano i file di setup."
+    IDS_DEV_TRANSLATION_FAILED "Il dispositivo non risponde ai suoi driver."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS non può individuare le impostazioni necessarie. Verificate la documentazione e usate il tab Risorse per impostare la configurazione."
+    IDS_DEV_BIOS_TABLE "Il firmware di sistema del vostro con contiene sufficienti informazioni per configurare correttamente questo dispositivo. \nPer utilizzare questo dispositivo contattate il costruttore per richiedere un aggiornamento del firmware o del BIOS."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "E' necessario un Interrupt PCI ma ne è configurato uno ISA o viceversa. \nUsate il setup di sistema del computer per riconfigurare l'Interrupt."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS non può inizializzare il driver di questo hardware."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS non puo' caricare il driver perchè si trova in memoria una attivazione precedente."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS non puo' caricare il driver, potrebbe essere corrotto o assente."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS non può accedere a questo hardware perchè le informazioni nel registry sono mancanti o memorizzate in modo errato."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS ha caricato regolarmente il driver ma non ha rilevato l'hardware."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS non puo' caricare il driver perchè si trova nel sistema un suo duplicato già attivo."
+    IDS_DEV_FAILED_POST_START "ReactOS ha fermato il driver perchè sono stati rileveti dei problemi."
+    IDS_DEV_HALTED "Una applicazione o un servizio ha disattivato il dispositivo hardware."
+    IDS_DEV_PHANTOM "Al momento l'hardware non è collegato al computer."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS Non può accede a questo  hardware perchè il sistema operativo si stà spegnendo."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS non può accedere al dispositivo perchè è stato predisposto per la rimozione ma non è ancora stato rimosso"
+    IDS_DEV_DRIVER_BLOCKED "Il software per questo dispositivo non può essere avviato perchè è noto che ha problemi con ReactOS. Contate il venditore hardware per un aggiornamento del driver."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS non può avviare il nuovo hardware perchè il contesto di sistema è troppo grande (supera i limiti della dimensione del Registry)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS non può modificare le impostazioni di questo dispositivo."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Dispositivi:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Proprieta dei dispositivi", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Verifiche di funzionamento...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "P&roprietà", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Generale"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Tipo:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Produttore:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Località:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Stato del dispositivo", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Verifiche di funzionamento...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Uso del dispositivo:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Driver"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Fornitore del Driver:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Data del Driver:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versione del Driver:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Firmatario digitale:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "Dettagli del &Driver...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Per vedere i dettagli sui file del driver.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Aggiorna il Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Aggiorna il Driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Dettagli sui file del driver"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "File del &Driver:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Fornitore del Driver:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versione:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Copyright:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Firmatario digitale:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Dettagli"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Power"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/no-NO.rc b/reactos/dll/win32/devmgr_new/lang/no-NO.rc
new file mode 100644 (file)
index 0000000..92c3121
--- /dev/null
@@ -0,0 +1,239 @@
+/* Norwegain translation by Sebastian Gasiorek, 2005-11-13 */
+
+LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Navn"
+    IDS_TYPE "Type"
+    IDS_MANUFACTURER "Fabrikant: %1"
+    IDS_LOCATION "Plassering: %1"
+    IDS_STATUS "Enhetsstatus: %1"
+    IDS_UNKNOWN "Ukjent"
+    IDS_LOCATIONSTR "Plassering %1!u! (%2)"
+    IDS_DEVCODE " (Kode %1!u!)"
+    IDS_DEVCODE2 " (Kode %2!u!)"
+    IDS_ENABLEDEVICE "Bruk denne enheten (aktiver)"
+    IDS_DISABLEDEVICE "Ikke bruk denne enheten (deaktiver)"
+    IDS_UNKNOWNDEVICE "Ukjent enhet"
+    IDS_NODRIVERLOADED "Ingen drivere er installert for denne enheten."
+    IDS_DEVONPARENT "på %1"
+    IDS_TROUBLESHOOTDEV "&Feilsøking..."
+    IDS_ENABLEDEV "A&ktiver enhet"
+    IDS_REINSTALLDRV "Installere driver på nytt"
+    IDS_PROPERTIES "E&genskaper"
+    IDS_UPDATEDRV "O&ppdater driveren..."
+    IDS_REBOOT "Restart &datamaskinen..."
+    IDS_NOTAVAILABLE "Ikke tilgjengelig"
+    IDS_NOTDIGITALLYSIGNED "ikke digital signert"
+    IDS_NODRIVERS " Ingen driver filer trengs eller har blitt lastet for denne enheten."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Denne enheten fungerer som den skal."
+    IDS_DEV_NOT_CONFIGURED "Denne enheten er ikke riktig konfigurert."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS kunne ikke laste driver for denne enheten fordi datamaskinen rapporterer to %1 buss typer."
+    IDS_DEV_DEVLOADER_FAILED2 "%1 enhetslaster(e) for denne enheten kunne ikke laste enhetsdriveren."
+    IDS_DEV_OUT_OF_MEMORY "Driveren for denne enheten kan være dårlig, eller så kan systemet ditt ha for lite minne eller ha for andre resusser."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Denne enheten virker ikke fordi en av driverene kan være dårlig, eller at ditt register kan være dårlig."
+    IDS_DEV_LACKED_ARBITRATOR "Driveren for denne enheter trenger en ressurs som ReactOS ikke vet hvordan skal brukes."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "En annen enhet bruker ressurs som denne enheten trenger å bruke."
+    IDS_DEV_FAILED_FILTER "Driveren for denne enheten trenger å bli installert på nytt."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Denne enheten fungerer ikke som den skal fordi ReactOS kan ikke laste filen %1 som laster driveren for denne enheten."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Denne enheten fungerer ikke som den skal fordi filen %1 som laster driveren for denne enheten er dårlig."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Enhet mislykket: Prøv å bytt driveren for denne enheten. Hvis dette ikke virker, se på din maskinvare dokumentasjon."
+    IDS_DEV_INVALID_DATA "Denne enheten fungerer ikke som den skal fordi BIOS på din datamaskin rapporterer at ressursen for denne enheten er feil."
+    IDS_DEV_INVALID_DATA2 "Denne enheten fungerer ikke som den skal fordi BIOS på enheten rapporterer at ressursen for denne enheten er feil. "
+    IDS_DEV_FAILED_START "Denne enheten er heller ikke valgt, eller vil ikke fungere riktig, eller så har den ikke de driverene som trengs."
+    IDS_DEV_LIAR "ReactOS har stoppet reaksjon mens attempting for å starte denne enheten, og derfor vil den aldri forsøke å starte denne enheten igjen."
+    IDS_DEV_NORMAL_CONFLICT "Denne enheten kan ikke finne noen ledige %1 ressurser for å kunne brukes."
+    IDS_DEV_NOT_VERIFIED "Denne enheten er heller ikke valgt, eller vil ikke fungere riktig, eller så har den ikke alle driverene som trengs."
+    IDS_DEV_NEED_RESTART "Denne enheten vil ikke fungere som den skal før du startet datamaskinen på nytt."
+    IDS_DEV_REENUMERATION "Denne enheten har krasjet på grunn av en ressurs konflikt."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS kunne ikke finne alle ressurser som denne enheten bruker."
+    IDS_DEV_UNKNOWN_RESOURCE "Driver informasjon filen %1 forteller at denne barne enheten, for å bruke en ressurs som denne foreldre enheten ikke har eller kjenne igjen."
+    IDS_DEV_REINSTALL "Driveren for denne enheten trenger å bli installert på nytt."
+    IDS_DEV_REGISTRY "Det kan være noe feil med registeret."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS fjerner denne enheten."
+    IDS_DEV_DISABLED "Denne enheten er ikke startet."
+    IDS_DEV_DISABLED2 "Denne enheten er deaktivert."
+    IDS_DEV_DEVLOADER_NOT_READY "Oppstartlasteren for denne enheten kan ikke laste de nødvendige filene."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Dette skjermkortet fungerer som det skal."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Oppstartlasteren for denne enheten kan ikke laste de nødvendige driverene."
+    IDS_DEV_DEVICE_NOT_THERE "Denne enheten er heller ikke valgt, eller vil ikke fungere riktig, eller så har den ikke alle driverene som trengs."
+    IDS_DEV_MOVED "ReactOS starter prosessen for å setter opp denne enheten."
+    IDS_DEV_TOO_EARLY "ReactOS er i prosessen for å setter opp denne enheten."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS kan ikke spesifisere ressursen for denne enheten."
+    IDS_DEV_FAILED_INSTALL "Driveren for denne enheten er ikke installert."
+    IDS_DEV_HARDWARE_DISABLED "Denne enheten er deaktivert fordi BIOS for enheten gir ikke andre ressurser."
+    IDS_DEV_CANT_SHARE_IRQ "Denne enheten bruker en Interrupt Request (IRQ) ressurs som er i bruk av en annen enhet og kan ikke bli delt.\nDu må endre konflikt innstillingen eller fjerne ekte-modus driver som forårsaker konflikten."
+    IDS_DEV_FAILED_ADD "Denne enheten vil ikke fungere som den skal fordi %1 vil ikke fungere som den skal."
+    IDS_DEV_DISABLED_SERVICE "ReactOS kan ikke installere driveren for denne enheten, fordi den får ikke tilgang til driveren eller nettverks plasseringen som har installering filen."
+    IDS_DEV_TRANSLATION_FAILED "Denne enheten vil ikke svare på grunn av driveren."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS kan ikke oppdage innstillingene for denne enheten. Ta hensyn til dokumentasjon som kommer med denne enheten og bruker ressursen tab for å sette konfigurasjonen."
+    IDS_DEV_BIOS_TABLE "Din datamaskin system firmware følger ikke med nok informasjon til å riktig konfigurere og bruke denne enheten. \nFor å bruke denne enheten, kontakt din datamaskin fabrikant for å få en firmware eller BIOS oppdatering."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Denne enheten trenger en PCI interrupt men den er konfigurert for en ISA interrupt (eller vice versa). \nVennligst bruk datamaskinens's system installering program for å rekonfigurere interrupt for denne enheten."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS kan ikke initialise enhetsdriveren for denne maskinvaren."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS kan ikke laste enhetsdriveren for denne maskinvaren fordi en forrige tilfelle av enhetsdriveren er fremdeles i minnet."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS kan ikke laste enhetsdriveren for denne maskinvaren. Driveren kan være korrupt eller mangler."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS kan ikke få tilgang til denne maskinvaren fordi dens tjeneste nøkkel informasjon i registret mangler eller er uriktig."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS har fullført å laste denne enhetsdriverne for for maskinvare men kan ikke finne maskinvare enheten."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS kan ikke laste enhetsdriveren for denne maskinvaren fordi det er en duplikat enhet som allerede kjører på systemet."
+    IDS_DEV_FAILED_POST_START "ReactOS har stoppet denne enheten fordi det har rapportert problemer."
+    IDS_DEV_HALTED "Et program eller tjeneste har slått av denne maskinvare enheten."
+    IDS_DEV_PHANTOM "Nåværende, denne maskinvare enheten er ikke koblet til datamaskinen."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS kan ikke få tilgang til denne maskinvare enheten fordi operativssystemet er i prosessen for å slås av."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS kan ikke bruke denne maskinvare enheten fordi den har blitt forbredt på sikker fjerning, men har ikke blitt fjernet fra datamaskinen"
+    IDS_DEV_DRIVER_BLOCKED "Programvaren for denne enheten har blitt blokket fra å starte fordi det et kjent for å ha problemer med ReactOS. Kontact maskinvare produsenten for nye drivere."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS kan ikke starte ny maskinvare enhet fordi system filen er for stor (Endre Registet størrelse begrensning)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS var ikke tilgjengelig for å endre innstillinger for denne enheten."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Enheter:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Enhets egenskaper", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Feilsøking...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "E&genskaper", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Generielt"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Enhetstype:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Fabrikant:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Plassering:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Enhetsstatus", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Feilsøking...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Enhets bruk:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Driver"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Driver produsent:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Driver dato:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Driver versjon:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digital signert:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Driver detaljer...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "For å vise detaljer om driver filene.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Driver fil detaljer"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Driver filer:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Produsent:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Filversjon:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Opphavsrett:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digital signert:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Power"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/pl-PL.rc b/reactos/dll/win32/devmgr_new/lang/pl-PL.rc
new file mode 100644 (file)
index 0000000..5fa5dc4
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+ *    Translated by (Sebastian Gasiorek,Wiktor Maryniowski, 2005-12-12)
+ *    xxrogers@users.sourceforge.net
+ *    https://sourceforge.net/projects/reactospl
+ *    Updated by xrogers (13.04.2007)
+ *    Updated by Caemyr - Olaf Siejka (Jan 2008, Jan 2010)
+ *    UTF-8 conversion by Caemyr (May, 2011)
+ *    Updated by Saibamen - Adam Stachowicz (saibamenppl@gmail.com) (November, 2011)
+ */
+
+LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Nazwa"
+    IDS_TYPE "Typ"
+    IDS_MANUFACTURER "Producent: %1"
+    IDS_LOCATION "Lokalizacja: %1"
+    IDS_STATUS "Stan urządzenia: %1"
+    IDS_UNKNOWN "Niedostępne"
+    IDS_LOCATIONSTR "Lokalizacja %1!u! (%2)"
+    IDS_DEVCODE " (Kod %1!u!)"
+    IDS_DEVCODE2 " (Kod %2!u!)"
+    IDS_ENABLEDEVICE "Używaj tego urządzenia (włączone)"
+    IDS_DISABLEDEVICE "Nie używaj tego urządzenia (wyłączone)"
+    IDS_UNKNOWNDEVICE "Nieznane urządzenie"
+    IDS_NODRIVERLOADED "Nie zainstalowano sterownika dla tego urządzenia."
+    IDS_DEVONPARENT "włączone %1"
+    IDS_TROUBLESHOOTDEV "&Konflikty..."
+    IDS_ENABLEDEV "&Włącz urządzenie"
+    IDS_REINSTALLDRV "&Zainstaluj sterownik ponownie"
+    IDS_PROPERTIES "Właściwośc&i"
+    IDS_UPDATEDRV "&Aktualizuj sterownik..."
+    IDS_REBOOT "&Uruchom komputer ponownie..."
+    IDS_NOTAVAILABLE "Niedostępne"
+    IDS_NOTDIGITALLYSIGNED "Niepodpisany cyfrowo"
+    IDS_NODRIVERS "Żadne pliki sterownika nie są potrzebne albo nie zostały załadowane dla tego urządzenia."
+    IDS_RESOURCE_COLUMN "Typ zasobu"
+    IDS_SETTING_COLUMN "Ustawienie"
+    IDS_RESOURCE_MEMORY_RANGE "Zakres pamięci"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "Zakres I/O"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "To urządzenie działa prawidłowo."
+    IDS_DEV_NOT_CONFIGURED "To urządzenie nie jest poprawnie skonfigurowane."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS nie może załadować sterownika dla tego urządzenia, ponieważ system raportuje dwa rodzaje magistrali typu %1."
+    IDS_DEV_DEVLOADER_FAILED2 "System ładowania sprzętu %1 nie mógł załadować sterownika dla tego urządzenia."
+    IDS_DEV_OUT_OF_MEMORY "Sterownik dla tego urządzenia może nie być prawidłowy lub system może nie pracować poprawnie."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Urządzenie nie działa poprawnie, ponieważ jeden ze sterowników nie jest prawidłowy lub jest źle zarejestrowany."
+    IDS_DEV_LACKED_ARBITRATOR "Sterownik urządzenia wymaga zasobów, których ReactOS nie potrafi przydzielić."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Inne urządzenie używa żądanych zasobów."
+    IDS_DEV_FAILED_FILTER "Sterownik dla tego urządzenia powinien być zainstalowany ponownie."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Urządzenie nie działa prawidłowo, ponieważ ReactOS nie mógł załadować pliku %1, który ładuje sterownik dla tego urządzenia."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Urządzenie nie działa prawidłowo, ponieważ plik %1, który ładuje sterownik dla tego urządzenia jest błędny."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Błąd urządzenia: Spróbuj zmienić sterownik tego urządzenia. Jeśli to nie pomoże, poszukaj rozwiązania w dokumentacji sprzętu."
+    IDS_DEV_INVALID_DATA "Urządzenie nie działa prawidłowo, ponieważ BIOS Twojego komputera raportuje, że zasoby dla urządzenia nie są prawidłowe."
+    IDS_DEV_INVALID_DATA2 "Urządzenie nie działa prawidłowo, ponieważ BIOS urządzenia raportuje, że zasoby dla urządzenia nie są prawidłowe. "
+    IDS_DEV_FAILED_START "Urządzenie nie jest obecne, nie działa poprawnie lub nie wszystkie sterowniki urządzenia zostały zainstalowane."
+    IDS_DEV_LIAR "ReactOS został zatrzymany podczs próby uruchomienia urządzenia, dlatego nie będzie próbował uruchamiać tego urządzenia w przyszłości."
+    IDS_DEV_NORMAL_CONFLICT "Urządzenie nie mogło odnaleźć żadnych wolnych zasobów %1."
+    IDS_DEV_NOT_VERIFIED "Urządzenie nie jest obecne, nie działa poprawnie lub nie wszystkie sterowniki urządzenia zostały zainstalowane."
+    IDS_DEV_NEED_RESTART "Urządzenie nie będzie działać prawidłowo dopóki nie uruchomisz ponownie komputera."
+    IDS_DEV_REENUMERATION "To urządzenie powoduje konflikt zasobów."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS nie mógł zidentyfikować wszystkich zasobów, których używa urządzenie."
+    IDS_DEV_UNKNOWN_RESOURCE "Plik informacji sterownika %1 informuje, że urządzenie podrzędne używa zasobów, których nie rozpoznaje urządzenie nadrzędne."
+    IDS_DEV_REINSTALL "Sterownik dla tego urządzenia powinien być zainstalowany ponownie."
+    IDS_DEV_REGISTRY "Wpis może nie być prawidłowy."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS usuwa to urządzenie."
+    IDS_DEV_DISABLED "Urządzenie nie zostało uruchomione."
+    IDS_DEV_DISABLED2 "Urządzenie jest wyłączone."
+    IDS_DEV_DEVLOADER_NOT_READY "Systemy ładowania sprzętu nie mógły załadować wymaganego sterownika."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Karta graficzna działa prawidłowo."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Systemy ładowania sprzętu nie mógły załadować wymaganego sterownika."
+    IDS_DEV_DEVICE_NOT_THERE "Urządzenie nie jest obecne, nie działa poprawnie lub nie wszystkie sterowniki urządzenia zostały zainstalowane."
+    IDS_DEV_MOVED "ReactOS jest w trakcie konfigurowania tego urządzenia."
+    IDS_DEV_TOO_EARLY "ReactOS jest w trakcie konfigurowania tego urządzenia."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS nie potrafił odnaleźć zasobów dla tego urządzenia."
+    IDS_DEV_FAILED_INSTALL "Nie zainstalowano sterownika dla tego urządzenia."
+    IDS_DEV_HARDWARE_DISABLED "Urządzenie jest wyłączone, ponieważ BIOS nie przydzielił żadnych zasobów dla tego urządzenia."
+    IDS_DEV_CANT_SHARE_IRQ "Urządzenie żąda przerwania (IRQ), którego używa inne urządzenia i którego nie można współdzielić. Musisz zmienić ustawienia lub usunąć sterownik powodujący konflikt."
+    IDS_DEV_FAILED_ADD "Urządzenie nie działa prawidłowo, ponieważ %1 również nie działa poprawnie."
+    IDS_DEV_DISABLED_SERVICE "ReactOS nie mógł zainstalować sterownika dla urządzenia, ponieważ nie mógł uzyskać dostępu do lokacji zawartej w pliku instalacyjnym."
+    IDS_DEV_TRANSLATION_FAILED "Sterownik nie jest przeznaczony dla tego urządzenia."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS nie mógł określić ustawień dla tego urządzenia. Poszukaj rozwiązania w dokumentacji urządzenia i użyj ustawień zasobów, aby skonfigurować je ręcznie."
+    IDS_DEV_BIOS_TABLE "Firmware Twojego komputera zawiera zbyt mało informacji, aby skonfigurować i używać tego urządzenia. Aby uruchomić urządzenie, skontaktuj się z producentem w celu uaktualnienia firmware-u lub BIOS-u."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Urządzenie żąda przerwań PCI, chociaż znajduje się w slocie ISA (lub na odwrót). Zmień ustawienia przerwań dla tego urządzenia korzystając z konfiguratora systemu."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS nie mógł uruchomić sterownika dla tego urządzenia."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS nie mógł uruchomić sterownika dla tego urządzenia, ponieważ poprzedni sterownik jest nadal w pamięci."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS nie mógł uruchomić sterownika dla tego urządzenia. Brak sterownika lub sterownik może być uszkodzony."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS nie mógł uzyskać dostępu do sprzętu, ponieważ brakuje klucza w rejestrze lub klucz nie jest zapisany prawidłowo."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS pomyślnie uruchomił sterownik urządzenia, ale nie odnalazł go fizycznie."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS nie mógł uruchomić sterownika dla tego urządzenia, ponieważ identyczne urządzenie pracuje obecnie w systemie."
+    IDS_DEV_FAILED_POST_START "ReactOS przerwał pracę urządzenia, ponieważ zostały zgłoszone problemy."
+    IDS_DEV_HALTED "Program lub usługa przerwała działanie urządzenia."
+    IDS_DEV_PHANTOM "Obecnie urządzenie nie jest podłączone do komputera."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS nie może uzyskać dostępu do urządzenia, ponieważ trwa zamykanie systemu."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS nie może uzyskać dostępu do urządzenia, ponieważ urządzenie to było przygotowane do ""bezpiecznego usunięcia"", ale nie zostało odłączone."
+    IDS_DEV_DRIVER_BLOCKED "Oprogramowanie urządzenia zostało zablokowane przy starcie, ponieważ nie współpracuje poprawnie z systemem ReactOS. Spróbuj zainstalować nowszy sterownik."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS nie może uruchomić nowego urządzenia, ponieważ jądro systemu jest zbyt wielkie (przekracza limit rozmiaru rejestru)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS nie był w stanie zmienić parametrów instalacyjnych tego urządzenia."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Ścieżka urządzenia"
+    IDS_PROP_HARDWAREIDS "Identyfikator urządzenia"
+    IDS_PROP_COMPATIBLEIDS "Zgodne identyfikatory"
+    IDS_PROP_MATCHINGDEVICEID "Użyty identyfikator"
+    IDS_PROP_SERVICE "Usługa"
+    IDS_PROP_ENUMERATOR "Moduł lokalizujący"
+    IDS_PROP_CAPABILITIES "Możliwości"
+    IDS_PROP_DEVNODEFLAGS "Konfiguracja węzła Devnode"
+    IDS_PROP_CONFIGFLAGS "Stan węzła Config"
+    IDS_PROP_CSCONFIGFLAGS "Stan węzła CSCONFIG"
+    IDS_PROP_EJECTIONRELATIONS "Relacje wysuwania"
+    IDS_PROP_REMOVALRELATIONS "Relacje usuwania"
+    IDS_PROP_BUSRELATIONS "Relacje magistrali"
+    IDS_PROP_DEVUPPERFILTERS "Wyższe filtry urządzenia"
+    IDS_PROP_DEVLOWERFILTERS "Niższe filtry urządzenia"
+    IDS_PROP_CLASSUPPERFILTERS "Wyższe filtry klasy"
+    IDS_PROP_CLASSLOWERFILTERS "Niższe filtry klasy"
+    IDS_PROP_CLASSINSTALLER "Instalator klasy"
+    IDS_PROP_CLASSCOINSTALLER "Dodatkowy instalator klasy"
+    IDS_PROP_DEVICECOINSTALLER "Dodatkowy instalator urządzenia"
+    IDS_PROP_FIRMWAREREVISION "Wersja Firmware"
+    IDS_PROP_CURRENTPOWERSTATE "Bieżący stan zasilania"
+    IDS_PROP_POWERCAPABILITIES "Zdolności trybu zasilania"
+    IDS_PROP_POWERSTATEMAPPINGS "Mapowania stanu zasilania"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Urządzenia:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Właściwości urządzenia", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Rozwiązywanie problemów...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "Właściwości", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Ogólne"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Typ urządzenia:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Producent:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Lokalizacja:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Stan urządzenia", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Rozwiązywanie problemów...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Użycie urządzenia:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Sterownik"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Dostawca sterownika:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Data sterownika:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Wersja sterownika:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Podpis cyfrowy:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Szczegóły sterownika...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Wyświetla informacje szczegółowe.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "Akt&ualizuj sterownik...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Aktualizuje oprogramowanie sterownika.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Szczegóły pliku sterownika"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Pliki sterownika:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Dostawca:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Wersja pliku:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Prawa autorskie:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Podpis cyfrowy:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Szczegóły"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Zasoby"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Ustawienia zasobów:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Zasilanie"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/pt-BR.rc b/reactos/dll/win32/devmgr_new/lang/pt-BR.rc
new file mode 100644 (file)
index 0000000..c0ea956
--- /dev/null
@@ -0,0 +1,239 @@
+/* Brazilian Portuguese translation by Marcelo Zamperetti, 2007-07-21 */
+
+LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Nome"
+    IDS_TYPE "Tipo"
+    IDS_MANUFACTURER "Fabricante: %1"
+    IDS_LOCATION "Local: %1"
+    IDS_STATUS "Status do Dispositivo: %1"
+    IDS_UNKNOWN "Desconhecido"
+    IDS_LOCATIONSTR "Local %1!u! (%2)"
+    IDS_DEVCODE " (Código %1!u!)"
+    IDS_DEVCODE2 " (Código %2!u!)"
+    IDS_ENABLEDEVICE "Usar este dispositivo (ativar)"
+    IDS_DISABLEDEVICE "Não usar este dispositivo (desativar)"
+    IDS_UNKNOWNDEVICE "Dispositivo desconhecido"
+    IDS_NODRIVERLOADED "Nenhum driver está instalado para este dispositivo."
+    IDS_DEVONPARENT "em %1"
+    IDS_TROUBLESHOOTDEV "&Solução de problemas..."
+    IDS_ENABLEDEV "&Ativar Dispositivo"
+    IDS_REINSTALLDRV "Re&instalar Driver"
+    IDS_PROPERTIES "P&ropriedades"
+    IDS_UPDATEDRV "A&tualizar Driver..."
+    IDS_REBOOT "Reiniciar o &Computador..."
+    IDS_NOTAVAILABLE "Não disponível"
+    IDS_NOTDIGITALLYSIGNED "Sem assinatura digital"
+    IDS_NODRIVERS "Nenhum arquivo de driver é necessário ou foi carregado para este dispositivo."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Este dispositivo está funcionando corretamente."
+    IDS_DEV_NOT_CONFIGURED "Este dispositivo não está corretamente configurado."
+    IDS_DEV_DEVLOADER_FAILED "O ReactOS não pôde carregar o driver para este dispositivo porque o computador está relatando dois tipos de barramento %1."
+    IDS_DEV_DEVLOADER_FAILED2 "O(s) carregadore(es) do dispositivo %1 não pôde/puderam carregar o driver do dispositivo para este dispositivo."
+    IDS_DEV_OUT_OF_MEMORY "O driver para este dispositivo pode estar danificado, ou seu sistema com pouca memória ou insuficiência de outros recursos."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Este dispositivo não está funcionando corretamente porque um de seus drivers pode estar danificado, ou seu registro pode estar danificado."
+    IDS_DEV_LACKED_ARBITRATOR "O driver para este dispositivo requisitou um recurso que o ReactOS não sabe como manusear."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Outro dispositivo está usando os recursos que este dispositivo necessita."
+    IDS_DEV_FAILED_FILTER "Os drivers para este dispositivo precisam ser reinstalados."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Este dispositivo não está funcionando corretamente porque o ReactOS não pôde carregar o arquivo %1 que carrega os drivers para o dispositivo."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Este dispositivo não está funcionando corretamente porque o arquivo %1 que carrega os drivers para este dispositivo está danificado."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Falha no dispositivo: tente mudar o driver para este dispositivo. Se isto não funcionar, consulte a documentação do seu hardware."
+    IDS_DEV_INVALID_DATA "Este dispositivo não está funcionando corretamente porque a BIOS do seu computador está reportando os recursos para este dispositivo incorretamente."
+    IDS_DEV_INVALID_DATA2 "Este dispositivo não está funcionando corretamente porque a BIOS do dispositivo está reportando os recursos para este dispositivo incorretamente."
+    IDS_DEV_FAILED_START "Este dispositivo não está presente, não está funcionando corretamente ou não tem todos os drivers instalados."
+    IDS_DEV_LIAR "O ReactOS parou de responder enquanto tentava inicializar este dispositivo e em conseqüência não irá mais tentar inicializá-lo."
+    IDS_DEV_NORMAL_CONFLICT "Este dispositivo não pôde encontrar recursos %1 livres para utilizar."
+    IDS_DEV_NOT_VERIFIED "Este dispositivo não está presente, não está funcionando corretamente ou não tem todos os drivers instalados."
+    IDS_DEV_NEED_RESTART "Este dispositivo não pode funcionar corretamente até que o computador seja reiniciado."
+    IDS_DEV_REENUMERATION "Este dispositivo está causando um conflito de recursos."
+    IDS_DEV_PARTIAL_LOG_CONF "O ReactOS não pôde identificar todos os recursos que este dispositivo utiliza."
+    IDS_DEV_UNKNOWN_RESOURCE "O arquivo %1 de informações de driver está indicando que este dispositivo filho utilize um recurso que o dispositivo pai não possui ou reconhece."
+    IDS_DEV_REINSTALL "Os drivers para este dispositivo precisam ser reinstalados."
+    IDS_DEV_REGISTRY "Seu registro pode estar danificado."
+    IDS_DEV_WILL_BE_REMOVED "O ReactOS está removendo este dispositivo."
+    IDS_DEV_DISABLED "Este dispositivo não foi inicializado."
+    IDS_DEV_DISABLED2 "Este dispositivo está desativado."
+    IDS_DEV_DEVLOADER_NOT_READY "Os carregadores para este dispositivo não puderam carregar os drivers necessários."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Este adaptador de vídeo está funcionando corretamente."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Os carregadores para este dispositivo não puderam carregar os drivers necessários."
+    IDS_DEV_DEVICE_NOT_THERE "Este dispositivo não está presente, não está funcionando corretamente ou não tem todos os drivers instalados."
+    IDS_DEV_MOVED "O ReactOS está no processo de configuração deste dispositivo."
+    IDS_DEV_TOO_EARLY "O ReactOS está no processo de configuração deste dispositivo."
+    IDS_DEV_NO_VALID_LOG_CONF "O ReactOS não pode especificar os recursos pra este dispositivo."
+    IDS_DEV_FAILED_INSTALL "Os drivers para este dispositivo não estão instalados."
+    IDS_DEV_HARDWARE_DISABLED "Este dispositivo está desativado porque a BIOS para o dispositivo não lhe deu nenhum recurso."
+    IDS_DEV_CANT_SHARE_IRQ "Este dispositivo está utilizando um recurso de Requisição de Interrupção (IRQ) que está em uso por outro dispositivo e não pode ser compartilhado.\nVocê pode alterar a configuração conflitante ou remover o driver de modo real que está causando o conflito."
+    IDS_DEV_FAILED_ADD "Este dispositivo não está funcionando corretamente porque %1 não está funcionando corretamente."
+    IDS_DEV_DISABLED_SERVICE "O ReactOS não pode instalar os drivers para este dispositivo porque não consegue acessar o drive ou local de rede que possui os arquivos de configuração."
+    IDS_DEV_TRANSLATION_FAILED "Este dispositivo não está respondendo ao seu driver."
+    IDS_DEV_NO_SOFTCONFIG "O ReactOS não pode determinar as configurações para este dispositivo. Consulte a documentação que veio com este dispositivo e utilize a guia Recursos para definir a configuração."
+    IDS_DEV_BIOS_TABLE "O firmware de seu sistema não possui informação suficiente para configurar e utilizar este dispositivo corretamente.\nPara utilizar este dispositivo, contate o fabricante de seu computador para obter uma atualização de firmware ou BIOS."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Este dispositivo está requisitando uma interrupção PCI mas está configurado para uma interrupção ISA (ou vice-versa).\nPor favor, utilize o sistema de configuração do computador para reconfigurar a interrupção para este dispositivo."
+    IDS_DEV_FAILED_DRIVER_ENTRY "O ReactOS não pode inicializar o driver do dispositivo para este hardware."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "O ReactOS não pode carregar o driver do dispositivo para este hardware porque uma instância anterior do driver do dispositivo ainda está na memória."
+    IDS_DEV_DRIVER_FAILED_LOAD "O ReactOS não pode carregar o driver do dispositivo para este hardware. O driver pode estar corrompido ou ausente."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "O ReactOS não pode acessar este hardware porque suas informações sobre a chave do serviço não estão no Registro ou estão registradas incorretamente."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "O ReactOS carregou o driver do dispositivo para este hardware corretamente mas não consegue encontrar o dispositivo de hardware."
+    IDS_DEV_DUPLICATE_DEVICE "O ReactOS não pode carregar o driver do dispositivo para este hardware porque já existe uma duplicata deste dispositivo em execução no sistema."
+    IDS_DEV_FAILED_POST_START "O ReactOS parou este dispositivo porque ele reportou problemas."
+    IDS_DEV_HALTED "Uma aplicação ou serviço desligou este dispositivo de hardware."
+    IDS_DEV_PHANTOM "No momento, este dispositivo de hardware não está conectado ao computador."
+    IDS_DEV_SYSTEM_SHUTDOWN "O ReactOS Não pode obter acesso a este dispositivo de hardware porque o sistema operacional está em processo de desligamento."
+    IDS_DEV_HELD_FOR_EJECT "O ReactOS não pode utilizar este dispositivo de hardware porque este foi preparado para remoção segura mas não foi removido do computador."
+    IDS_DEV_DRIVER_BLOCKED "O software para este dispositivo teve sua inicialização bloqueada pois é conhecido por possuir problemas com o ReactOS. Contate o revendedor do hardware para um novo driver."
+    IDS_DEV_REGISTRY_TOO_LARGE "O ReactOS não pode iniciar os novos dispositivos de hardware porque a seção do sistema é muito grande (excede o limite de tamanho do Registro)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS não pôde alterar as configurações para este dispositivo."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Dispositivos:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Propriedades do dispositivo", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Solução de problemas...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "P&ropriedades", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Geral"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Tipo de dispositivo:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Fabricante:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Local:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Status do dispositivo", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Solução de problemas...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Uso do dispositivo:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Driver"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Fornecedor do driver:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Data do driver:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versão do driver:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Signatário Digital:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Detalhes do driver...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Exibir detalhes sobre os arquivos de driver.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Detalhes sobre os arquivos de driver"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Arquivos de driver:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Fornecedor:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versão do arquivo:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Direitos autorais:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Signatário digital:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Power"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/ro-RO.rc b/reactos/dll/win32/devmgr_new/lang/ro-RO.rc
new file mode 100644 (file)
index 0000000..de380a7
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+ * Translators: Petru Dumitriu (petrimetri at gmail dot com)
+ *              Ștefan Fulea (stefan dot fulea at mail dot md)
+ */
+
+LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Nume"
+    IDS_TYPE "Tip"
+    IDS_MANUFACTURER "Producător: %1"
+    IDS_LOCATION "Locație: %1"
+    IDS_STATUS "Stare dispozitiv: %1"
+    IDS_UNKNOWN "Necunoscut"
+    IDS_LOCATIONSTR "Locație %1!u! (%2)"
+    IDS_DEVCODE " (Cod %1!u!)"
+    IDS_DEVCODE2 " (Cod %2!u!)"
+    IDS_ENABLEDEVICE "Folosește acest dispozitiv (activare)"
+    IDS_DISABLEDEVICE "Nu folosi acest dispozitiv (dezactivare)"
+    IDS_UNKNOWNDEVICE "Dispozitiv necunoscut"
+    IDS_NODRIVERLOADED "Pentru acest dispozitiv nu sunt instalate modúle-pilot."
+    IDS_DEVONPARENT "pe %1"
+    IDS_TROUBLESHOOTDEV "&Depanare…"
+    IDS_ENABLEDEV "A&ctivare"
+    IDS_REINSTALLDRV "Re&instalează modulul-pilot"
+    IDS_PROPERTIES "P&roprietăți"
+    IDS_UPDATEDRV "A&ctualizare modúl-pilot…"
+    IDS_REBOOT "Repornire &calculator…"
+    IDS_NOTAVAILABLE "Indisponibil"
+    IDS_NOTDIGITALLYSIGNED "Nesemnat digital"
+    IDS_NODRIVERS "Fie nu sunt necesare modúle-pilot, fie nu a fost încărcat niciunul."
+    IDS_RESOURCE_COLUMN "Tip de resursă"
+    IDS_SETTING_COLUMN "Configuraţie"
+    IDS_RESOURCE_MEMORY_RANGE "Domeniu de memorie"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "Domeniu I/O"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Acest dispozitiv funcționează corect."
+    IDS_DEV_NOT_CONFIGURED "Acest dispozitiv nu este configurat corect."
+    IDS_DEV_DEVLOADER_FAILED "Nu s-a putut încărca modulul-pilot deoarece calculatorul indică două tipuri de magistrale %1."
+    IDS_DEV_DEVLOADER_FAILED2 "S-a eșuat la încărcarea modulelor-pilot pentru dispozitivul %1."
+    IDS_DEV_OUT_OF_MEMORY "Fie modulul-pilot este defect, fie sistemul are carențe de memorie sau de alte resurse."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Acest dispozitiv nu funcționează corect deoarece fie modulul-pilot nu este corect, fie registrul de sistem este deteriorat."
+    IDS_DEV_LACKED_ARBITRATOR "Modulul-pilot al acestui dispozitiv solicită o resursă necunoscută în actualul sistem de operare."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Resursele necesare pentru acest dispozitiv sunt ocupate de un alt dispozitiv."
+    IDS_DEV_FAILED_FILTER "Modulele-pilot pentru acest dispozitiv necesită reinstalare."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Acest dispozitiv nu funcționează corect deoarece nu se poate porni mecanismul (ce conține fișierul %1), necesar pentru încărcarea modulelor-pilot."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Acest dispozitiv nu funcționează corect deoare fișierul %1 care încarcă modulele-pilot pentru acest dispozitiv, este deteriorat."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Defecțiune dispozitiv: Încercați alte modúle-pilot pentru acest dispozitiv. Dacă problema persistă, consultați documentația din dotare."
+    IDS_DEV_INVALID_DATA "Acest dispozitiv nu funcționează corect, deoarece BIOS din calculator nu raportează corect resursele dispozitivului."
+    IDS_DEV_INVALID_DATA2 "Acest dispozitiv nu funcționează corect, deoarece BIOS din dispozitiv nu raportează corect resursele dispozitivului. "
+    IDS_DEV_FAILED_START "Acest dispozitiv fie nu este prezent, fie nu funcționează corect, fie nu are instalate toate modulele-pilot."
+    IDS_DEV_LIAR "Încercarea de a activa acest dispozitiv a provocat un blocaj în sistem. Prin urmare, nu mai este recomandată reactivarea acestui dispozitiv."
+    IDS_DEV_NORMAL_CONFLICT "Acest dispozitiv nu are la dispoziție resursele %1 necesare pentru a funcționa."
+    IDS_DEV_NOT_VERIFIED "Acest dispozitiv fie nu este prezent, fie nu funcționează corect, fie nu are instalate toate modulele-pilot."
+    IDS_DEV_NEED_RESTART "Funcționarea corectă a acestui dispozitiv necesită repornirea sistemului."
+    IDS_DEV_REENUMERATION "Acest dispoztiv provoacă un conflict de resurse."
+    IDS_DEV_PARTIAL_LOG_CONF "Nu au putut fi identificate toate resursele utilizate de către acest dispozitiv."
+    IDS_DEV_UNKNOWN_RESOURCE "Fișierul de informații %1 cere acestui sub-dispozitiv folosirea unei resurse pe care dispozitivul-parinte nu o are sau nu o recunoaște."
+    IDS_DEV_REINSTALL "Este necesară reinstalarea modulelor-pilot ale acestui dispozitiv."
+    IDS_DEV_REGISTRY "Este posibil ca registrul să fie deteriorat."
+    IDS_DEV_WILL_BE_REMOVED "Acest dispozitiv este pregătit pentru a fi deconectat."
+    IDS_DEV_DISABLED "Acest dispozitiv nu este pornit."
+    IDS_DEV_DISABLED2 "Acest dispozitiv este dezactivat."
+    IDS_DEV_DEVLOADER_NOT_READY "Nu se pot încărca toate modulele-pilot necesare."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Nu se pot încărca toate modulele-pilot necesare."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Nu se pot încărca toate modulele-pilot necesare."
+    IDS_DEV_DEVICE_NOT_THERE "Acest dispozitiv fie nu este prezent, fie nu funcționează corect, fie nu are instalate toate modulele-pilot."
+    IDS_DEV_MOVED "Pentru moment acest dispozitiv încă nu este pe deplin instalat."
+    IDS_DEV_TOO_EARLY "Pentru moment acest dispozitiv încă nu este pe deplin instalat."
+    IDS_DEV_NO_VALID_LOG_CONF "Nu se pot specifica resoursele necesare pentru acest dispozitiv."
+    IDS_DEV_FAILED_INSTALL "Modulele-pilot ale acestui dispozitiv nu sunt instalate."
+    IDS_DEV_HARDWARE_DISABLED "Acest dispozitiv este dezactivat deoarece BIOS nu i-a alocat resursele necesare."
+    IDS_DEV_CANT_SHARE_IRQ "Acest dispozitiv necesită o cerere de întrerupere (IRQ) care este folosită deja de alt dispozitiv și care nu poate fi folosită în comun.\nFie modificați configurația dispozitivelor pentru a rezolva problema gestiunii cererilor de întreruperi, fie eliminați modulul-pilot de mod-real care provoacă acest conflict."
+    IDS_DEV_FAILED_ADD "Acest dispozitiv nu funcționează corect deoarcere %1 nu funcționează corect."
+    IDS_DEV_DISABLED_SERVICE "Nu se pot instala modulele-pilot pentru acest dispozitiv deoarece nu se poate accesa locația de stocare a fișierelor necesare pentru instalare."
+    IDS_DEV_TRANSLATION_FAILED "Acest dispozitiv nu răspunde la comenzile modulului-pilot."
+    IDS_DEV_NO_SOFTCONFIG "Nu se poate determina configurația acestui dispozitiv. Consultați-i documentația din dotare și utilizați compartimentul „Resurse” pentru a-i stabili configurația corectă."
+    IDS_DEV_BIOS_TABLE "Microprogramele din sistemul calculatorului dumneavoastră nu conțin suficiente informații pentru a configura și a putea utiliza acest dispozitiv. \nPentru a utiliza acest dispozitiv, contactați producatorul calculatorului în vederea obținerii de actualizări pentru microprograme sau BIOS."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Acest dispozitiv a solicitat o întrerupere PCI însă este configurat pentru întreruperi ISA (sau viceversa). \nUtilizați programele de configurare din dotare pentru a reconfigura întreruperile pentru acest dispozitiv."
+    IDS_DEV_FAILED_DRIVER_ENTRY "Nu se poate iniția modulul-pilot al acestui dispozitiv."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "Nu se poate încărca modulul-pilot al acestui dispozitiv deoarece acesta deja a fost încărcat în memorie."
+    IDS_DEV_DRIVER_FAILED_LOAD "Nu se poate încărca modulul-pilot al acestui dispozitiv deoarece fie lipsește, fie este deteriorat."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "Nu se poate accesa acest dispozitiv deoarece informația cheii din registru fie lipsește, fie a fost înregistrată incorect."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "Modulul-pilot pentru acest dispozitiv a fost încărcat cu succes, însă dispozitivul nu mai poate fi găsit."
+    IDS_DEV_DUPLICATE_DEVICE "Nu se poate încărca modulul-pilot deoarece în sistem deja exista un dispozitiv în funcțiune de acest fel."
+    IDS_DEV_FAILED_POST_START "Acest dispozitiv a fost oprit deoarece au fost depistate probleme cu el."
+    IDS_DEV_HALTED "O aplicație sau un serviciu a oprit acest dispozitiv."
+    IDS_DEV_PHANTOM "La moment, acest dispozitiv nu este conectat la calculator."
+    IDS_DEV_SYSTEM_SHUTDOWN "Nu se poate accesa dispozitivul deoarece sistemul de operare este în curs de închidere."
+    IDS_DEV_HELD_FOR_EJECT "Nu se poate folosi acest dispozitiv deoarece acesta a fost deja pregătit pentru a fi deconectat."
+    IDS_DEV_DRIVER_BLOCKED "Modulul-pilot al acestui dispozitiv a fost oprit din cauza unor probleme de compatibilitate. Contactați furnizorul dispozitivului pentru o versiune compatibilă."
+    IDS_DEV_REGISTRY_TOO_LARGE "Nu se poate porni acest dispozitiv deoarece secțiunea registrului de sistem este prea mare (depășind limita admisă a dimensiunii totale a registrului)."
+    IDS_DEV_SETPROPERTIES_FAILED "Configurația acestui dispozitiv nu a putut fi modificată."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "identificatorul instanței dispozitivului"
+    IDS_PROP_HARDWAREIDS "identificatori de componentă fizică"
+    IDS_PROP_COMPATIBLEIDS "identificatori compatibili"
+    IDS_PROP_MATCHINGDEVICEID "identificator de concordanță"
+    IDS_PROP_SERVICE "serviciu"
+    IDS_PROP_ENUMERATOR "enumerator"
+    IDS_PROP_CAPABILITIES "capabilități"
+    IDS_PROP_DEVNODEFLAGS "marcatori Devnode"
+    IDS_PROP_CONFIGFLAGS "marcatori Config"
+    IDS_PROP_CSCONFIGFLAGS "marcatori CSConfig"
+    IDS_PROP_EJECTIONRELATIONS "relații de ejecție"
+    IDS_PROP_REMOVALRELATIONS "relații de eliminare"
+    IDS_PROP_BUSRELATIONS "relații de magistrală"
+    IDS_PROP_DEVUPPERFILTERS "filtre superioare de dispozitiv"
+    IDS_PROP_DEVLOWERFILTERS "filtre inferioare de dispozitiv"
+    IDS_PROP_CLASSUPPERFILTERS "filtre superioare de clasă"
+    IDS_PROP_CLASSLOWERFILTERS "filtre inferioare de clasă"
+    IDS_PROP_CLASSINSTALLER "instalatori de clasă"
+    IDS_PROP_CLASSCOINSTALLER "coinstalatori de clasă"
+    IDS_PROP_DEVICECOINSTALLER "coinstalatori de dispozitiv"
+    IDS_PROP_FIRMWAREREVISION "revizie microprogram"
+    IDS_PROP_CURRENTPOWERSTATE "starea curentă de alimentare"
+    IDS_PROP_POWERCAPABILITIES "capabilitățile de alimentare"
+    IDS_PROP_POWERSTATEMAPPINGS "corelația punctelor de alimentare"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "Dispo&zitive:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Proprietăți dispozitiv", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Depanare…", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "P&roprietăți", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Generale"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Tip dispozitiv:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Producător:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Locație:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Stare dispozitiv", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Depanare", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Utilizare dispozitiv:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Modúle-pilot"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Furnizor:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Dată:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versiune:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Semnatar digital:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Detalii…", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Mai multe detalii despre modulele-pilot.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Actualizare…", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Actualizați modulul-pilot pentru dispozitiv.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Detalii modúl-pilot"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Fișiere:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Furnizor:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versiune fișier:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Drept de autor:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Semnatar digital:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "Î&nchide", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Detalii"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resurse"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Configurație de resurse:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Alimentare"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/ru-RU.rc b/reactos/dll/win32/devmgr_new/lang/ru-RU.rc
new file mode 100644 (file)
index 0000000..b32d81f
--- /dev/null
@@ -0,0 +1,239 @@
+/* Russian language resource file by Kudratov Olimjon (olim98@bk.ru) */
+
+LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Имя"
+    IDS_TYPE "Тип"
+    IDS_MANUFACTURER "Изготовитель: %1"
+    IDS_LOCATION "Размещение: %1"
+    IDS_STATUS "Состояние устройства: %1"
+    IDS_UNKNOWN "Неизвестно"
+    IDS_LOCATIONSTR "Размещение %1!u! (%2)"
+    IDS_DEVCODE " (код %1!u!)"
+    IDS_DEVCODE2 " (код %2!u!)"
+    IDS_ENABLEDEVICE "Это устройство используется (включено)"
+    IDS_DISABLEDEVICE "Это устройство не используется (выключено)"
+    IDS_UNKNOWNDEVICE "Неизвестное устройство"
+    IDS_NODRIVERLOADED "Не установлены драйверы для этого устройства."
+    IDS_DEVONPARENT "на %1"
+    IDS_TROUBLESHOOTDEV "&Диагностика..."
+    IDS_ENABLEDEV "В&ключить устройство"
+    IDS_REINSTALLDRV "&Переустановить драйвер"
+    IDS_PROPERTIES "С&войства"
+    IDS_UPDATEDRV "О&бновить драйвер..."
+    IDS_REBOOT "Пер&езагрузить компьютер..."
+    IDS_NOTAVAILABLE "Недоступно"
+    IDS_NOTDIGITALLYSIGNED "Нет цифровой подписи"
+    IDS_NODRIVERS "Файлы драйверов для этого устройства не установлены или не были загружены."
+    IDS_RESOURCE_COLUMN "Тип ресурса"
+    IDS_SETTING_COLUMN "Настройки"
+    IDS_RESOURCE_MEMORY_RANGE "Память"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Устройство работает нормально."
+    IDS_DEV_NOT_CONFIGURED "Это устройство еще не настроено."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS  could not load the driver for this device because the computer is reporting two %1 bus types."
+    IDS_DEV_DEVLOADER_FAILED2 "The %1 device loader(s) for this device could not load the device driver."
+    IDS_DEV_OUT_OF_MEMORY "Драйвер для данного устройства может быть поврежден, или в системе недостаточно памяти или иных ресурсов."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Это устройство работает неправильно. Один из драйверов или реестр системы поврежден."
+    IDS_DEV_LACKED_ARBITRATOR "Драйвер данного устройства требует ресурсов, которые не могут поддерживаться ReactOS."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Конфигурация загрузки для этого устройства конфликтует с другими устройствами."
+    IDS_DEV_FAILED_FILTER "Драйверы для этого устройства должны быть переустановлены."
+    IDS_DEV_DEVLOADER_NOT_FOUND "This device is not working properly because ReactOS cannot load the file %1 that loads the drivers for the device."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "This device is not working properly because the file %1 that loads the drivers for this device is bad."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Device failure: Try changing the driver for this device. If that doesn't work, see your hardware documentation."
+    IDS_DEV_INVALID_DATA "This device is not working properly because the BIOS in your computer is reporting the resources for the device incorrectly."
+    IDS_DEV_INVALID_DATA2 "This device is not working properly because the BIOS in the device is reporting the resources for the device incorrectly. "
+    IDS_DEV_FAILED_START "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_LIAR "ReactOS stopped responding while attempting to start this device, and therefore will never attempt to start this device again."
+    IDS_DEV_NORMAL_CONFLICT "This device cannot find any free %1 resources to use."
+    IDS_DEV_NOT_VERIFIED "Данное устройство является неизвестным, работает некорректно или не имеет установленных драйверов."
+    IDS_DEV_NEED_RESTART "Данное устройство не сможет корректно работать до выполнения перезагрузки."
+    IDS_DEV_REENUMERATION "Данное устройство вызвало конфликт ресурсов."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS не может идентифицировать ресурсы, используемые устройством."
+    IDS_DEV_UNKNOWN_RESOURCE "The driver information file %1 is telling this child device to use a resource that the parent device does not have or recognize."
+    IDS_DEV_REINSTALL "Драйверы этого устройства должны быть переустановлены."
+    IDS_DEV_REGISTRY "Ваш системный реестр поврежден."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS удалит это устройство."
+    IDS_DEV_DISABLED "Это устройство не запущено."
+    IDS_DEV_DISABLED2 "Это устройство отключено."
+    IDS_DEV_DEVLOADER_NOT_READY "Загрузчик этого устройства не может загрузить необходимые драйверы."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Этот адаптер экрана функционирует корректно."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Загрузчик этого устройства не может загрузить необходимые драйверы."
+    IDS_DEV_DEVICE_NOT_THERE "Устройство отсутствует, работает неправильно или для него установлены не все драйверы."
+    IDS_DEV_MOVED "ReactOS настраивает это устройство."
+    IDS_DEV_TOO_EARLY "ReactOS настраивает это устройство."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS не может указать ресурсы для этого устройства."
+    IDS_DEV_FAILED_INSTALL "Драйверы для этого устройства не установлены."
+    IDS_DEV_HARDWARE_DISABLED "This device is disabled because the BIOS for the device did not give it any resources."
+    IDS_DEV_CANT_SHARE_IRQ "This device is using an Interrupt Request (IRQ) resource that is in use by another device and cannot be shared.\nYou must change the conflicting setting or remove the real-mode driver causing the conflict."
+    IDS_DEV_FAILED_ADD "This device is not working properly because %1 is not working properly."
+    IDS_DEV_DISABLED_SERVICE "ReactOS cannot install the drivers for this device because it cannot access the drive or network location that has the setup files on it."
+    IDS_DEV_TRANSLATION_FAILED "This device isn't responding to its driver."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS cannot determine the settings for this device. Consult the documentation that came with this device and use the Resource tab to set the configuration."
+    IDS_DEV_BIOS_TABLE "Your computer's system firmware does not include enough information to properly configure and use this device. \nTo use this device, contact your computer manufacturer to obtain a firmware or BIOS update."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "This device is requesting a PCI interrupt but is configured for an ISA interrupt (or vice versa). \nPlease use the computer's system setup program to reconfigure the interrupt for this device."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS не может инициализировать драйвер устройства для данного оборудования."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS cannot load the device driver for this hardware because a previous instance of the device driver is still in memory."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS cannot load the device driver for this hardware. The driver may be corrupted or missing."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS cannot access this hardware because its service key information in the registry is missing or recorded incorrectly."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS successfully loaded the device driver for this hardware but cannot find the hardware device."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS cannot load the device driver for this hardware because there is a duplicate device already running in the system."
+    IDS_DEV_FAILED_POST_START "ReactOS остановил данное устройство, так как в его работе обнаружились проблемы."
+    IDS_DEV_HALTED "Приложение или служба отключили данное устройство."
+    IDS_DEV_PHANTOM "В настоящее время данное устройство не подключено к компьютеру."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS cannot gain access to this hardware device because the operating system is in the process of shutting down."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS cannot use this hardware device because it has been prepared for safe removal, but it has not been removed from the computer"
+    IDS_DEV_DRIVER_BLOCKED "The software for this device has been blocked from starting because it is known to have problems with ReactOS. Contact the hardware vendor for a new driver."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS cannot start new hardware devices because the system hive is too large (exceeds the Registry Size Limit)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS wasn't able to change the settings of this device."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Код экземпляра устройства"
+    IDS_PROP_HARDWAREIDS "Коды (ID) оборудования"
+    IDS_PROP_COMPATIBLEIDS "Совместимые коды (ID)"
+    IDS_PROP_MATCHINGDEVICEID "Соответствующий код (ID) устройства"
+    IDS_PROP_SERVICE "Служба"
+    IDS_PROP_ENUMERATOR "Перечислитель"
+    IDS_PROP_CAPABILITIES "Характеристики"
+    IDS_PROP_DEVNODEFLAGS "Флаги Devnode"
+    IDS_PROP_CONFIGFLAGS "Флаги Config"
+    IDS_PROP_CSCONFIGFLAGS "Флаги CSConfig"
+    IDS_PROP_EJECTIONRELATIONS "Зависимости извлечения"
+    IDS_PROP_REMOVALRELATIONS "Зависимости удаления"
+    IDS_PROP_BUSRELATIONS "Зависимости шины"
+    IDS_PROP_DEVUPPERFILTERS "Верхние фильтры устройства"
+    IDS_PROP_DEVLOWERFILTERS "Нижние фильтры устройства"
+    IDS_PROP_CLASSUPPERFILTERS "Верхние фильтры класса"
+    IDS_PROP_CLASSLOWERFILTERS "Нижние фильтры класса"
+    IDS_PROP_CLASSINSTALLER "Установщик классов"
+    IDS_PROP_CLASSCOINSTALLER "Соустановщики классов"
+    IDS_PROP_DEVICECOINSTALLER "Соустановщики устройств"
+    IDS_PROP_FIRMWAREREVISION "Микропрограмма"
+    IDS_PROP_CURRENTPOWERSTATE "Текущее состояние электропитания"
+    IDS_PROP_POWERCAPABILITIES "Возможности электропитания"
+    IDS_PROP_POWERSTATEMAPPINGS "Сопоставления энергосбережения"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Устройства:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Свойства устройства", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Диагностика...", IDC_TROUBLESHOOT, 80, 140, 59, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "С&войства", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Общие"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Тип устройства:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Изготовитель:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Размещение:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Состояние устройства", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Диагностика...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Применение устройства:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Драйвер"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Поставщик драйвера:", -1, 17, 39, 80, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Дата разработки:", -1, 17, 53, 80, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Версия драйвера:", -1, 17, 67, 80, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Цифровая подпись:", -1, 17, 81, 80, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Сведения...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Просмотр сведений о файлах драйверов.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Обновить...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Обновление драйверов для устройства.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Сведения о файлах драйверов"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Файлы драйверов:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Поставщик:", -1, 7, 134, 70, 8
+    EDITTEXT IDC_FILEPROVIDER, 81, 134, 140, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Версия файла:", -1, 7, 150, 70, 8
+    EDITTEXT IDC_FILEVERSION, 81, 150, 140, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Авторские права:", -1, 7, 166, 70, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 81, 166, 140, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Цифровая подпись:", -1, 7, 182, 70, 8
+    EDITTEXT IDC_DIGITALSIGNER, 81, 182, 140, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Сведения"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Ресурсы"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Настройки ресурсов:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Питание"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/sk-SK.rc b/reactos/dll/win32/devmgr_new/lang/sk-SK.rc
new file mode 100644 (file)
index 0000000..c7415f1
--- /dev/null
@@ -0,0 +1,242 @@
+/* TRANSLATOR : Mário Kačmár /Mario Kacmar/ aka Kario (kario@szm.sk)
+ * DATE OF TR.: 30-05-2008
+ * LAST CHANGE: 31-05-2010
+ */
+
+LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Názov"
+    IDS_TYPE "Typ"
+    IDS_MANUFACTURER "Výrobca: %1"
+    IDS_LOCATION "Umiestnenie: %1"
+    IDS_STATUS "Stav zariadenia: %1"
+    IDS_UNKNOWN "Neznáme"
+    IDS_LOCATIONSTR "Umiestnenie %1!u! (%2)"
+    IDS_DEVCODE " (Kód %1!u!)"
+    IDS_DEVCODE2 " (Kód %2!u!)"
+    IDS_ENABLEDEVICE "Používať toto zariadenie (povolené)"
+    IDS_DISABLEDEVICE "Nepoužívať toto zariadenie (zakázané)"
+    IDS_UNKNOWNDEVICE "Neznáme zariadenie"
+    IDS_NODRIVERLOADED "Pre toto zariadenie nie sú nainštalované žiadne ovládače."
+    IDS_DEVONPARENT "na %1"
+    IDS_TROUBLESHOOTDEV "&Riešenie problémov..."
+    IDS_ENABLEDEV "E&nable Device"
+    IDS_REINSTALLDRV "Re&install Driver"
+    IDS_PROPERTIES "P&roperties"
+    IDS_UPDATEDRV "&Aktualizovať ovládač..."
+    IDS_REBOOT "Restart &Computer..."
+    IDS_NOTAVAILABLE "Nie je k dispozícii" //Not available
+    IDS_NOTDIGITALLYSIGNED "Digitálne nepodpísaný"
+    IDS_NODRIVERS "No driver files are required or have been loaded for this device."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Toto zariadenie pracuje správne."
+    IDS_DEV_NOT_CONFIGURED "Toto zariadenie nie je správne nastavené."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS  could not load the driver for this device because the computer is reporting two %1 bus types."
+    IDS_DEV_DEVLOADER_FAILED2 "The %1 device loader(s) for this device could not load the device driver."
+    IDS_DEV_OUT_OF_MEMORY "The driver for this device may be bad, or your system may be running low on memory or other resources."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "This device is not working properly because one of its drivers may be bad, or your registry may be bad."
+    IDS_DEV_LACKED_ARBITRATOR "The driver for this device requested a resource that ReactOS does not know how to handle."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Iné zariadenie používa prostriedky, ktoré potrebuje toto zariadenie."
+    IDS_DEV_FAILED_FILTER "The drivers for this device need to be reinstalled."
+    IDS_DEV_DEVLOADER_NOT_FOUND "This device is not working properly because ReactOS cannot load the file %1 that loads the drivers for the device."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "This device is not working properly because the file %1 that loads the drivers for this device is bad."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Device failure: Try changing the driver for this device. If that doesn't work, see your hardware documentation."
+    IDS_DEV_INVALID_DATA "This device is not working properly because the BIOS in your computer is reporting the resources for the device incorrectly."
+    IDS_DEV_INVALID_DATA2 "This device is not working properly because the BIOS in the device is reporting the resources for the device incorrectly. "
+    IDS_DEV_FAILED_START "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_LIAR "ReactOS stopped responding while attempting to start this device, and therefore will never attempt to start this device again."
+    IDS_DEV_NORMAL_CONFLICT "This device cannot find any free %1 resources to use."
+    IDS_DEV_NOT_VERIFIED "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_NEED_RESTART "Toto zariadenie nemože správne pracovať, kým nereštartujete počítač."
+    IDS_DEV_REENUMERATION "This device is causing a resource conflict."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS could not identify all the resources this device uses."
+    IDS_DEV_UNKNOWN_RESOURCE "The driver information file %1 is telling this child device to use a resource that the parent device does not have or recognize."
+    IDS_DEV_REINSTALL "Je potrebné preinštalovať ovládače pre toto zariadenie."
+    IDS_DEV_REGISTRY "Your registry may be bad."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS is removing this device."
+    IDS_DEV_DISABLED "Toto zariadenie nie je spustené."
+    IDS_DEV_DISABLED2 "Toto zariadenie je zakázané."
+    IDS_DEV_DEVLOADER_NOT_READY "The loaders for this device cannot load the required drivers."
+    IDS_DEV_DEVLOADER_NOT_READY2 "This display adapter is functioning correctly."
+    IDS_DEV_DEVLOADER_NOT_READY3 "The loaders for this device cannot load the required drivers."
+    IDS_DEV_DEVICE_NOT_THERE "This device is either not present, not working properly, or does not have all the drivers installed."
+    IDS_DEV_MOVED "ReactOS is in the process of setting up this device."
+    IDS_DEV_TOO_EARLY "ReactOS is in the process of setting up this device."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS can't specify the resources for this device."
+    IDS_DEV_FAILED_INSTALL "The drivers for this device are not installed."
+    IDS_DEV_HARDWARE_DISABLED "This device is disabled because the BIOS for the device did not give it any resources."
+    IDS_DEV_CANT_SHARE_IRQ "This device is using an Interrupt Request (IRQ) resource that is in use by another device and cannot be shared.\nYou must change the conflicting setting or remove the real-mode driver causing the conflict."
+    IDS_DEV_FAILED_ADD "This device is not working properly because %1 is not working properly."
+    IDS_DEV_DISABLED_SERVICE "ReactOS cannot install the drivers for this device because it cannot access the drive or network location that has the setup files on it."
+    IDS_DEV_TRANSLATION_FAILED "This device isn't responding to its driver."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS cannot determine the settings for this device. Consult the documentation that came with this device and use the Resource tab to set the configuration."
+    IDS_DEV_BIOS_TABLE "Your computer's system firmware does not include enough information to properly configure and use this device. \nTo use this device, contact your computer manufacturer to obtain a firmware or BIOS update."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "This device is requesting a PCI interrupt but is configured for an ISA interrupt (or vice versa). \nPlease use the computer's system setup program to reconfigure the interrupt for this device."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS cannot initialize the device driver for this hardware."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS cannot load the device driver for this hardware because a previous instance of the device driver is still in memory."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS cannot load the device driver for this hardware. The driver may be corrupted or missing."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS cannot access this hardware because its service key information in the registry is missing or recorded incorrectly."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS successfully loaded the device driver for this hardware but cannot find the hardware device."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS cannot load the device driver for this hardware because there is a duplicate device already running in the system."
+    IDS_DEV_FAILED_POST_START "Systém ReactOS zastavil toto zariadenie lebo ohlásilo problémy."
+    IDS_DEV_HALTED "Aplikácia alebo služba vypla toto hardvérové zariadenie."
+    IDS_DEV_PHANTOM "Currently, this hardware device is not connected to the computer."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS cannot gain access to this hardware device because the operating system is in the process of shutting down."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS cannot use this hardware device because it has been prepared for safe removal, but it has not been removed from the computer"
+    IDS_DEV_DRIVER_BLOCKED "The software for this device has been blocked from starting because it is known to have problems with ReactOS. Contact the hardware vendor for a new driver."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS cannot start new hardware devices because the system hive is too large (exceeds the Registry Size Limit)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS wasn't able to change the settings of this device."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Device Instance ID"
+    IDS_PROP_HARDWAREIDS "Hardware IDs"
+    IDS_PROP_COMPATIBLEIDS "Compatible IDs"
+    IDS_PROP_MATCHINGDEVICEID "Matching Device ID"
+    IDS_PROP_SERVICE "Service"
+    IDS_PROP_ENUMERATOR "Enumerator"
+    IDS_PROP_CAPABILITIES "Capabilities"
+    IDS_PROP_DEVNODEFLAGS "Devnode Flags"
+    IDS_PROP_CONFIGFLAGS "Config Flags"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig Flags"
+    IDS_PROP_EJECTIONRELATIONS "Ejection Relations"
+    IDS_PROP_REMOVALRELATIONS "Removal Relations"
+    IDS_PROP_BUSRELATIONS "Bus Relations"
+    IDS_PROP_DEVUPPERFILTERS "Device Upper Filters"
+    IDS_PROP_DEVLOWERFILTERS "Device Lower Filters"
+    IDS_PROP_CLASSUPPERFILTERS "Class Upper Filters"
+    IDS_PROP_CLASSLOWERFILTERS "Class Lower Filters"
+    IDS_PROP_CLASSINSTALLER "Class Installers"
+    IDS_PROP_CLASSCOINSTALLER "Class Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Device Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Revision"
+    IDS_PROP_CURRENTPOWERSTATE "Current Power State"
+    IDS_PROP_POWERCAPABILITIES "Power Capabilities"
+    IDS_PROP_POWERSTATEMAPPINGS "Power State Mappings"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Zariadenia:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Vlastnosti zariadenia", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Riešenie problémov...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "Vl&astnosti", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Všeobecné"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Typ zariadenia:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Výrobca:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Umiestnenie:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Stav zariadenia", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Riešenie problémov...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Využitie zariadenia:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Ovládač"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Poskytovateľ ovládača:", -1, 34, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Dátum ovládača:", -1, 34, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Verzia ovládača:", -1, 34, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digitálne podpísal:", -1, 34, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Driver Details...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "To view details about the driver files.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Detaily o súboroch ovládača"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Súbory ovládača:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Poskytovateľ:", -1, 14, 134, 66, 8
+    EDITTEXT IDC_FILEPROVIDER, 80, 134, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Verzia súboru:", -1, 14, 150, 66, 8
+    EDITTEXT IDC_FILEVERSION, 80, 150, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Autorské práva:", -1, 14, 166, 66, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 80, 166, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Digitálne podpísal:", -1, 14, 182, 66, 8
+    EDITTEXT IDC_DIGITALSIGNER, 80, 182, 137, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Detaily"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Power"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/sq-AL.rc b/reactos/dll/win32/devmgr_new/lang/sq-AL.rc
new file mode 100644 (file)
index 0000000..ce3c970
--- /dev/null
@@ -0,0 +1,241 @@
+/* TRANSLATOR : Ardit Dani (Ard1t) (ardit.dani@gmail.com)
+ * DATE OF TRANSLATION:  18-01-2014
+*/
+
+LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Emri"
+    IDS_TYPE "Tipi"
+    IDS_MANUFACTURER "Prodhues: %1"
+    IDS_LOCATION "Vendnodhje: %1"
+    IDS_STATUS "Gjendja Pjesës Elektronike: %1"
+    IDS_UNKNOWN "Panjohur"
+    IDS_LOCATIONSTR "Vendnodhje %1!u! (%2)"
+    IDS_DEVCODE " (Kode %1!u!)"
+    IDS_DEVCODE2 " (Kode %2!u!)"
+    IDS_ENABLEDEVICE "Përdor këtët pjesë (mundëso)"
+    IDS_DISABLEDEVICE "Mos përdor këtë pjesë (gjymto)"
+    IDS_UNKNOWNDEVICE "Pjesë panjohur"
+    IDS_NODRIVERLOADED "Komanduesit e kësaj pajisje nuk kane instaluar."
+    IDS_DEVONPARENT "ndeyur %1"
+    IDS_TROUBLESHOOTDEV "&Rregullo..."
+    IDS_ENABLEDEV "Mundëso Pajisjen"
+    IDS_REINSTALLDRV "Re&instalo Komanduesit"
+    IDS_PROPERTIES "Karakteristikat"
+    IDS_UPDATEDRV "Azhorno Komanduesin..."
+    IDS_REBOOT "Rifillo &Komphuterin..."
+    IDS_NOTAVAILABLE "Jo në dispozicion"
+    IDS_NOTDIGITALLYSIGNED "Nuk është nënshkruar digjitale"
+    IDS_NODRIVERS "Nuk ka dokument komandimi të nevojshme ose të jenë qenë të ngarkuar për këtë pajisje."
+    IDS_RESOURCE_COLUMN "Tipi burimeve"
+    IDS_SETTING_COLUMN "Cilësime"
+    IDS_RESOURCE_MEMORY_RANGE "Shtrirje Memorie"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O shtrirje"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Kjo pajisje është duke punuar si duhet."
+    IDS_DEV_NOT_CONFIGURED "Kjo pajisje nuk është i konfiguruar si duhet."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS nuk mund të ngarkojë komanduesin për këtë pajisje, sepse kompjuteri po raporton dy %1 lloje të busë-ve."
+    IDS_DEV_DEVLOADER_FAILED2 "%1 ngarkuesi i pajisje(s) për këtë pajisje nuk mund të ngarkojë komanduesin e pajisjes."
+    IDS_DEV_OUT_OF_MEMORY "Komanduesi për këtë pajisje mund të jetë i keq, ose sistemi juaj mund të jetë i ulët në kujtesë ose burime të tjera."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Kjo pajisje nuk punon si duhet, sepse një nga drejtuesit e saj mund të jetë i keq, ose regjistri juaj mund të jetë i keq."
+    IDS_DEV_LACKED_ARBITRATOR "Komanduesi për këtë pajisje kërkoi një burim që ReactOS nuk e di se si të trajtojë."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Një tjetër pajisje është duke përdorur nevojat e burimet e kësaj pajisje."
+    IDS_DEV_FAILED_FILTER "Komanduesi për këtë pajisje duhet të re-instaluar."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Kjo pajisje nuk punon si duhet, sepse ReactOS nuk mund të ngarkojë dokumentin %1 që ngarkon komanduesin për pajisjen."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Kjo pajisje nuk punon si duhet, sepse %1 dokumenti komandues që ngarkon komanduesin për këtë pajisje është i keq."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Pajisja Dështoj: Provoni ndryshimin e komanduesit për këtë pajisje. Nëse kjo nuk funksionon, shikoni dokumentacionin tuaj të pajisjes."
+    IDS_DEV_INVALID_DATA "Kjo pajisje nuk punon si duhet, sepse BIOS në kompjuterin tuaj po raporton burimin për pajisjen e gabuar."
+    IDS_DEV_INVALID_DATA2 "Kjo pajisje nuk punon si duhet, sepse BIOS në pajisje po raporton burimin e gabuar për këtë pajisje. "
+    IDS_DEV_FAILED_START "Kjo pajisje është ose nuk është i pranishme, nuk punon si duhet, ose nuk ka të gjithë komanduesat e instaluar."
+    IDS_DEV_LIAR "ReactOS ndaloi se përgjigjuri duke u përpjekur për të filluar këtë pajisje, dhe për këtë arsye nuk do të përpiqet për të filluar këtë pajisje përsëri."
+    IDS_DEV_NORMAL_CONFLICT "Kjo pajisje nuk mund të gjejnë ndonjë burim të lirë %1 për të përdorur si."
+    IDS_DEV_NOT_VERIFIED "Kjo pajisje ose nuk është i pranishme, nuk punon si duhet, ose nuk ka të gjithë komanduesit e instaluar."
+    IDS_DEV_NEED_RESTART "Kjo pajisje nuk mund të punojnë si duhet deri sa ju të rinisni kompjuterin tuaj."
+    IDS_DEV_REENUMERATION "Kjo pajisje është duke shkaktuar një konflikt të burimeve."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS nuk mund të identifikojë të gjitha burimet për këtë pajisje."
+    IDS_DEV_UNKNOWN_RESOURCE "Informacioni komanduesit dokumenteve %1 po i thoëte pajisje fëmijës për të përdorur një burim që pajisja prindi nuk ka ose njeh."
+    IDS_DEV_REINSTALL "Komanduesi për këtë pajisje duhet të re-instaluar."
+    IDS_DEV_REGISTRY "Regjistrit juaj mund të jetë i keq."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS është duke hequr këtë pajisje."
+    IDS_DEV_DISABLED "Kjo pajisje nuk është nisur."
+    IDS_DEV_DISABLED2 "Kjo pajisje është gjymtuar."
+    IDS_DEV_DEVLOADER_NOT_READY "Ngarkuesit për këtë pajisje nuk mund të ngarkojnë komanduesin e kërkuar."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Kjo përshtatës ekrani është duke funksionuar si duhet."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Ngarkuesit për këtë pajisje nuk mund të ngarkojnë komanduesin e kërkuar."
+    IDS_DEV_DEVICE_NOT_THERE "Kjo pajisje ose nuk është e pranishme, nuk punon si duhet, ose nuk ka të gjithë komanduesit e instaluar."
+    IDS_DEV_MOVED "ReactOS është në procesin e krijimit të kësaj pajisje."
+    IDS_DEV_TOO_EARLY "ReactOS është në procesin e krijimit të kësaj pajisje."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS nuk mund të specifikojë burimet për këtë pajisje."
+    IDS_DEV_FAILED_INSTALL "Komanduesit për këtë pajisje nuk janë instaluar."
+    IDS_DEV_HARDWARE_DISABLED "Kjo pajisje është me aftësi të kufizuara, sepse BIOS për pajisjen nuk jep asnjë burimeve."
+    IDS_DEV_CANT_SHARE_IRQ "Kjo pajisje po përdorur një kërkesë interrupt (IRQ) e burimeve që është në përdorim nga një tjetër pajisje dhe nuk mund të ndahet.\nJu duhet të ndryshoni vendosjen konfliktuale ose hiqni menyren-reale e komanduesit që shkakton konfliktin."
+    IDS_DEV_FAILED_ADD "Kjo pajisje nuk punon si duhet për shkak %1 nuk është duke punuar si duhet."
+    IDS_DEV_DISABLED_SERVICE "ReactOS nuk mund të instaloni komanduesin për këtë pajisje, sepse ajo nuk mund të hyje ne driverin apo vendin e rrjetit që ka dokumentat e instalimit në të."
+    IDS_DEV_TRANSLATION_FAILED "Kjo pajisje nuk i përgjigjer komanduesit të saj."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS nuk mund të përcaktojë parametrat për këtë pajisje. Konsultoni dokumentacionin që erdhi me këtë pajisje dhe të përdorin tabelen e Burimeve për të vendosur konfigurimin."
+    IDS_DEV_BIOS_TABLE "Firmware i sistemit kompjuterit tuaj nuk përfshin informacione të mjaftueshme për të konfiguruar siç duhet dhe të përdorë këtë pajisje.\nPër përdorimin e kësaj pajisje, kontaktoni prodhuesin e kompjuterit tuaj për të marrë një firmware apo azhornim BIOS-i."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Kjo pajisje është duke kërkuar një interrupt PCI por është konfiguruar për një interrupt ISA (ose anasjelltas). \nJu lutemi përdorni programin e konfigurimit e sistemit të kompjuterit për të rikonfiguruar interrupt për këtë pajisje."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS nuk mund nisë komanduesin e pajisjes për këtë pjesë elektronike."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS nuk mund të ngarkojë komanduesin e pajisjes për këtë pjesë elektronike, sepse një shembull i mëparshëm i komanduesit të pajisjes është ende në memorie."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS nuk mund të ngarkojë komanduesin e pajisjes për këtë pjesë elektronike. Komanduesi mund të jetë i korruptuar ose mungon."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS nuk mund të hyni në këtë pajisje elektronike, sepse shërbimi i informacionit kyç i saj në regjistër mungon ose është regjistruar gabimisht."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS ka ngarkuar me sukses komanduesin e pajisjes për këtë pjesë elektronike, por nuk mund të gjejë pajisje elektronike."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS nuk mund të ngarkojë komanduesin e pajisjes për këtë pajisje elektronike, sepse nuk është një pajisje e dublikatë duke punuar në sistem."
+    IDS_DEV_FAILED_POST_START "ReactOS ka ndaluar këtë pajisje për shkak se ajo e ka raportuar probleme."
+    IDS_DEV_HALTED "Një program apo shërbim e ka mbyllur këtë pajisje elektronike."
+    IDS_DEV_PHANTOM "Aktualisht, kjo pajisje pajisje nuk është e lidhur tek kompjuteri."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS nuk mund të kenë akses në këtë pajisje elektronike për shkak se sistemi operativ është në proces mbyllje."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS nuk mund të përdorë këtë pajisje elektronike për shkak se ajo është përgatitur për heqje të sigurt, por ajo nuk është hequr nga kompjuteri"
+    IDS_DEV_DRIVER_BLOCKED "Programi për këtë pajisje është bllokuar nga fillimi për shkak se ajo është e njohur që të ketë probleme me ReactOS. Kontaktoni shitësin e pjesës elektronike për komandues të ri."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS nuk mund të fillojë pajisje të reja elektronike për shkak se kosherja e sistemit është shumë e madhe (e kalon Limitin e Masës Registrit."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS nuk ishte në gjendje të ndryshojë parametrat e kësaj pajisje."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Shëbulli Pajisjes ID"
+    IDS_PROP_HARDWAREIDS "Pajisja Elektronike IDs"
+    IDS_PROP_COMPATIBLEIDS "Pajtushmëria IDs"
+    IDS_PROP_MATCHINGDEVICEID "Koincidim Pajisje ID"
+    IDS_PROP_SERVICE "Shërbim"
+    IDS_PROP_ENUMERATOR "Anketues"
+    IDS_PROP_CAPABILITIES "Aftësi"
+    IDS_PROP_DEVNODEFLAGS "Flamuj Devnode"
+    IDS_PROP_CONFIGFLAGS "Flamuj Konfigurues"
+    IDS_PROP_CSCONFIGFLAGS "Flamuj CSConfig"
+    IDS_PROP_EJECTIONRELATIONS "Marrëdhëniet nxjerrje"
+    IDS_PROP_REMOVALRELATIONS "Marrëdhëniet Shkarkimi"
+    IDS_PROP_BUSRELATIONS "Marrëdhëniet Bus"
+    IDS_PROP_DEVUPPERFILTERS "Filtrat e sipërme pajisjes"
+    IDS_PROP_DEVLOWERFILTERS "Filtrat e ulët pajisjes"
+    IDS_PROP_CLASSUPPERFILTERS "Filtrat e sipërme klasës"
+    IDS_PROP_CLASSLOWERFILTERS "Filtrat e ulët klasës"
+    IDS_PROP_CLASSINSTALLER "Klasa Instaluesve"
+    IDS_PROP_CLASSCOINSTALLER "Klasa Coinstallers"
+    IDS_PROP_DEVICECOINSTALLER "Pjesët Coinstallers"
+    IDS_PROP_FIRMWAREREVISION "Firmware Rishikim"
+    IDS_PROP_CURRENTPOWERSTATE "Gjendja Aktuale Energjisë"
+    IDS_PROP_POWERCAPABILITIES "Aftësitë Energjisë"
+    IDS_PROP_POWERSTATEMAPPINGS "Planifikimi Gjëndjes Energjisë"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "Pjesë:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Karakteristikat Pajisjeve", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Diagnostikim...", IDC_TROUBLESHOOT, 80, 140, 60, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "Karakteristika", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Përgjithshëm"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Tipi Pajisjeve:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Prodhuesi:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Vëndndodhja:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Gjëndja Pajisjes", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Diagnostikim...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Përdorimi pajisjes:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Komandues"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Ofruesi komanduesit:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Data Komanduesit:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versioni komanduesit:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Firmë Digjitale:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Detajet komanduesit...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Për të parë detaje në lidhje me dokumentin e komanduesit.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Azhorno Komanduesin...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Azhorno Komanduesin e Pajisje.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Detajet Dokumentit Komanduesit"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Dokumentat Komanduesit:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Furniyues:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Versioni Dokumentit:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Drejta e Autorit:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Firmë Digjitale:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Detaje"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Burime"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Konfigurime Burimesh:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Energji"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/tr-TR.rc b/reactos/dll/win32/devmgr_new/lang/tr-TR.rc
new file mode 100644 (file)
index 0000000..5466d3d
--- /dev/null
@@ -0,0 +1,239 @@
+/* TRANSLATOR: 2014, 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
+
+LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Ad"
+    IDS_TYPE "Tür"
+    IDS_MANUFACTURER "Üretici: %1"
+    IDS_LOCATION "Konum: %1"
+    IDS_STATUS "Aygıt Durumu: %1"
+    IDS_UNKNOWN "Bilinmiyor"
+    IDS_LOCATIONSTR "Konum %1!u! (%2)"
+    IDS_DEVCODE " (Kod %1!u!)"
+    IDS_DEVCODE2 " (Kod %2!u!)"
+    IDS_ENABLEDEVICE "Bu Aygıtı Kullan (Etkinleştir)"
+    IDS_DISABLEDEVICE "Bu Aygıtı Kullanma (Edilginleştir)"
+    IDS_UNKNOWNDEVICE "Bilinmeyen Aygıt"
+    IDS_NODRIVERLOADED "Bu aygıt için kurulmuş sürücü yok."
+    IDS_DEVONPARENT "%1 üzerinde."
+    IDS_TROUBLESHOOTDEV "&Sorun Giderme..."
+    IDS_ENABLEDEV "&Aygıtı Etkinleştir"
+    IDS_REINSTALLDRV "&Sürücüyü Yeniden Kur"
+    IDS_PROPERTIES "&Husûsiyetler"
+    IDS_UPDATEDRV "&Sürücüyü Şimdikileştir..."
+    IDS_REBOOT "&Bilgisayarı Yeniden Başlat..."
+    IDS_NOTAVAILABLE "Yok"
+    IDS_NOTDIGITALLYSIGNED "Sayılık olarak imzâlanmamış."
+    IDS_NODRIVERS "Bu aygıt için gerekli olan veyâ yüklenmiş sürücü kütükleri yok."
+    IDS_RESOURCE_COLUMN "Kaynak Türü"
+    IDS_SETTING_COLUMN "Ayar"
+    IDS_RESOURCE_MEMORY_RANGE "Bellek Erimi"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "G/Ç Erimi"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Bu aygıt düzgün çalışıyor."
+    IDS_DEV_NOT_CONFIGURED "Bu aygıt doğru yapılandırılmamış."
+    IDS_DEV_DEVLOADER_FAILED "Bilgisayar, iki %1 veriyolu türü bildirdiğinden dolayı ReactOS bu aygıt için sürücüyü yükleyemedi."
+    IDS_DEV_DEVLOADER_FAILED2 "Bu aygıt için %1 aygıt yükleyicisi/yükleyicileri aygıt sürücüsünü yükleyemedi."
+    IDS_DEV_OUT_OF_MEMORY "Bu aygıt için sürücü kötü olabilir veyâ dizgeniz, bellekte veyâ başka kaynaklarda yavaş çalışıyor olabilir."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Sürücülerinin kötü olabilmesinden veyâ değer defterinizin bozuk olabilmesinden dolayı bu aygıt düzgün çalışmıyor."
+    IDS_DEV_LACKED_ARBITRATOR "Bu aygıt için sürücü, ReactOS'un ne biçimde yöneteceğini bilmediği bir kaynağı istedi."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Başka bir aygıt, bu aygıtın gereksinim duyduğu kaynakları kullanıyor."
+    IDS_DEV_FAILED_FILTER "Bu aygıtın sürücüleri yeniden kurulmaya gereksinim duyuyor."
+    IDS_DEV_DEVLOADER_NOT_FOUND "ReactOS, bu aygıt için sürücüleri yükleyen %1 kütüğünü yükleyememesinden dolayı bu aygıt düzgün çalışmıyor."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Bu aygıt için sürücüleri yükleyen %1 kütüğünün bozuk olmasından dolayı bu aygıt düzgün çalışmıyor."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Aygıt başarısızlığı: Bu aygıt için yü değiştirmeyi deneyiniz. Eğer çalışmıyorsa donanımınızın belgelerine bakınız."
+    IDS_DEV_INVALID_DATA "Bilgisayarınızdaki BIOS'un bu aygıt için kaynakları yanlış bildirdiğinden dolayı bu aygıt düzgün çalışmıyor."
+    IDS_DEV_INVALID_DATA2 "Aygıttaki BIOS'un bu aygıt için kaynakları yanlış bildirdiğinden dolayı bu aygıt düzgün çalışmıyor."
+    IDS_DEV_FAILED_START "Bu aygıt; ya yok, ya düzgün çalışmıyor, ya da kurulu tüm sürücüleri yok."
+    IDS_DEV_LIAR "ReactOS, bu aygıtı başlatmaya kalkışırken yanıt vermeyi durdurdu, bu yüzden bu aygıtı bir daha başlatmaya kalkışmayacak."
+    IDS_DEV_NORMAL_CONFLICT "Bu aygıt, kullanmak için boş %1 kaynaklarını bulamıyor."
+    IDS_DEV_NOT_VERIFIED "Bu aygıt; ya yok, ya düzgün çalışmıyor, ya da bu aygıtın kurulu tüm sürücüleri yok."
+    IDS_DEV_NEED_RESTART "Bu aygıt, bilgisayarınızı yeniden başlatana dek düzgün çalışamaz."
+    IDS_DEV_REENUMERATION "Bu aygıt, bir kaynak çakışmasına neden oluyor."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS, bu aygıtın kullandığı tüm kaynakları tanılayamadı."
+    IDS_DEV_UNKNOWN_RESOURCE "%1 sürücü bilgi kütüğü, bu alt aygıtın, üst aygıtın iye olmadığı veyâ tanımadığı bir kaynağı kullanması için bildiriyor."
+    IDS_DEV_REINSTALL "Bu aygıt için sürücüler yeniden başlatılmaya gereksinim duyuyor."
+    IDS_DEV_REGISTRY "Değer defteriniz bozuk olabilir."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS bu aygıtı kaldırıyor."
+    IDS_DEV_DISABLED "Bu aygıt başlamamış."
+    IDS_DEV_DISABLED2 "Bu aygıt edilgin."
+    IDS_DEV_DEVLOADER_NOT_READY "Bu aygıt için yükleyiciler gerekli sürücüleri yükleyemiyor."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Bu görüntü bağdaştırıcısı doğru çalışıyor."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Bu aygıt için yükleyiciler gerekli sürücüleri yükleyemiyor."
+    IDS_DEV_DEVICE_NOT_THERE "Bu aygıt; ya yok, ya düzgün çalışmıyor, ya da bu aygıtın kurulu tüm sürücüleri yok."
+    IDS_DEV_MOVED "ReactOS, bu aygıtı kurma işleminde."
+    IDS_DEV_TOO_EARLY "ReactOS, bu aygıtı kurma işleminde."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS, bu aygıt için kaynakları belirleyemez."
+    IDS_DEV_FAILED_INSTALL "Bu aygıt için sürücüler kurulu değil."
+    IDS_DEV_HARDWARE_DISABLED "Bu aygıt için BIOS bu aygıta kaynak vermediğinden dolayı bu aygıt edilgin."
+    IDS_DEV_CANT_SHARE_IRQ "Bu aygıt, başka bir aygıt eliyle kullanımda olan ve paylaşılamayan bir Kesme İsteği (IRQ) kaynağı kullanıyor.\nÇakışan ayârı değiştirmeli ya da çakışmaya neden olan gerçek kip sürücüyü kaldırmalısınız."
+    IDS_DEV_FAILED_ADD "%1 şeyinin düzgün çalışmamasından dolayı bu aygıt düzgün çalışmıyor."
+    IDS_DEV_DISABLED_SERVICE "ReactOS, kurulum kütüklerinin üzerinde bulunduğu, sürücüye ya da ağ konumuna erişememesinden dolayı bu aygıt için sürücüleri kuramıyor."
+    IDS_DEV_TRANSLATION_FAILED "Bu aygıt sürücüsüne yanıt vermiyor."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS, bu aygıt için ayarları belirleyemiyor. Bu aygıtla gelen belgelere bakınız ve yapılandırmayı yapmak için ""Kaynaklar"" sekmesini kullanınız."
+    IDS_DEV_BIOS_TABLE "Bilgisayarınızın dizge bellenimi, bu aygıtı, düzgün olarak, yapılandırmak ve kullanmak için yeterli bilgi içermiyor.\nBu aygıtı kullanmak için, bir bellenim veyâ BIOS güncellemesi elde etmek için bilgisayarınızın üreticisiyle iletişime geçiniz."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Bu aygıt, bir PCI kesmesi istiyor ancak bir ISA kesmesi için yapılandırılmıştır (ya da tersi).\nBu aygıt için kesmeyi yeniden yapılandırmak için lütfen bilgisayarın dizge kurulum izlencesini kullanınız."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS, bu donanım için aygıt sürücüsünü başlatamıyor."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS, bellekte şimdi bile aygıt sürücüsünün bir önceki kopyası olduğundan dolayı bu donanım için aygıt sürücüsünü yükleyemiyor."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS, bu donanım için aygıt sürücüsünü yükleyemiyor. Sürücü bozulmuş ya da eksik olabilir."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS, bu donanımın, değer defterindeki hizmet dizini bilgisinin eksik ya da yanlış saklandığından dolayı bu donanıma erişemiyor."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS, bu donanım için aygıt sürücüsünü başarıyla yükledi ancak donanım aygıtını bulamıyor."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS, dizgede bir kopya aygıtın önceden çalışıyor olmasından dolayı bu donanım için aygıt sürücüsünü yükleyemiyor."
+    IDS_DEV_FAILED_POST_START "ReactOS, bu aygıtı, sorunlar bildirdiğinden dolayı durdurdu."
+    IDS_DEV_HALTED "Bir uygulama ya da bir hizmet bu donanım aygıtını kapattı."
+    IDS_DEV_PHANTOM "Şimdi bu donanım aygıtı bilgisayara bağlı değil."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS, işletim dizgesinin kapatma işleminde olmasından dolayı bu donanım aygıtı için erişim elde edemiyor."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS, bu donanım aygıtının, güvenli kaldırılmaya anıklandığından ancak bilgisayardan kaldırılmadığından dolayı bu donanım aygıtını kullanamıyor."
+    IDS_DEV_DRIVER_BLOCKED "Bu aygıt için yazılım, ReactOS'la sorunları olduğu biliniyor olmasından dolayı başlatılmaktan engellendi. Yeni bir donanım için donanımın satıcısıyla iletişime geçiniz."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS, dizge yığınının, çok büyük olmasından, Değer Defteri Büyüklük Hudûdu'nu aşmasından dolayı yeni donanım aygıtlarını başlatamıyor."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS, bu aygıtın ayarlarını değiştiremedi."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Aygıt Örneği Kimliği"
+    IDS_PROP_HARDWAREIDS "Donanım Kimlikleri"
+    IDS_PROP_COMPATIBLEIDS "Uyumlu Kimlikler"
+    IDS_PROP_MATCHINGDEVICEID "Eşleşen Aygıt Kimliği"
+    IDS_PROP_SERVICE "Hizmet"
+    IDS_PROP_ENUMERATOR "Numaralandırıcı"
+    IDS_PROP_CAPABILITIES "Yetenekler"
+    IDS_PROP_DEVNODEFLAGS "Aygıt Düğümü İmleri"
+    IDS_PROP_CONFIGFLAGS "Yapılandırma İmleri"
+    IDS_PROP_CSCONFIGFLAGS "CSConfig İmleri"
+    IDS_PROP_EJECTIONRELATIONS "Çıkarma İlişkileri"
+    IDS_PROP_REMOVALRELATIONS "Kaldırma İlişkileri"
+    IDS_PROP_BUSRELATIONS "Veriyolu İlişkileri"
+    IDS_PROP_DEVUPPERFILTERS "Üst Aygıt Süzgeçleri"
+    IDS_PROP_DEVLOWERFILTERS "Alt Aygıt Süzgeçleri"
+    IDS_PROP_CLASSUPPERFILTERS "Üst Sınıf Süzgeçleri"
+    IDS_PROP_CLASSLOWERFILTERS "Alt Sınıf Süzgeçleri"
+    IDS_PROP_CLASSINSTALLER "Sınıf Yükleyicileri"
+    IDS_PROP_CLASSCOINSTALLER "Sınıf Yükleme Yardımcıları"
+    IDS_PROP_DEVICECOINSTALLER "Aygıt Yükleme Yardımcıları"
+    IDS_PROP_FIRMWAREREVISION "Bellenim Düzeltmesi"
+    IDS_PROP_CURRENTPOWERSTATE "Şimdiki Güç Durumu"
+    IDS_PROP_POWERCAPABILITIES "Güç Yetenekleri"
+    IDS_PROP_POWERSTATEMAPPINGS "Güç Durumu Eşlemeleri"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Aygıtlar:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Aygıt Husûsiyetleri", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Sorun Giderme...", IDC_TROUBLESHOOT, 80, 140, 60, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "&Husûsiyetler", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Umûmî"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Aygıt Türü:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Üreticisi:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Konumu:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    GROUPBOX "Aygıt Durumu", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+    PUSHBUTTON "&Sorun Giderme...", IDC_DEVPROBLEM, 148, 163, 90, 15
+    LTEXT "&Aygıt Kullanımı:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Sürücü"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Sürücü Sağlayıcısı:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Sürücü Târihi:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Sürücü Sürümü:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Sayılık İmzâlayıcısı:", -1, 37, 81, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    PUSHBUTTON "&Sürücü Ayrıntıları...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+    LTEXT "Sürücü kütükleri üzerine ayrıntıları görmek için.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "S&ürücüyü Şimdikileştir...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Aygıt sürücüsünü şimdikileştir.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Sürücü Kütüğü Ayrıntıları"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Sürücü Kütükleri:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Sağlayıcısı:", -1, 14, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Kütük Sürümü:", -1, 14, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Telif Hakkı:", -1, 14, 166, 50, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Sayılık İmzâlayıcısı:", -1, 14, 182, 50, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "Tamam", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Ayrıntılar"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Kaynaklar"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Kaynak Ayarları:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Güç"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/lang/uk-UA.rc b/reactos/dll/win32/devmgr_new/lang/uk-UA.rc
new file mode 100644 (file)
index 0000000..3548620
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+ * PROJECT:     ReactOS Device Manager Applet
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        dll/win32/devmgr/lang/uk-UA.rc
+ * PURPOSE:     Ukraianian Language File for devmgr
+ * TRANSLATORS: Artem Reznikov, Igor Paliychuk
+ */
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_NAME "Ім'я"
+    IDS_TYPE "Тип"
+    IDS_MANUFACTURER "Виробник: %1"
+    IDS_LOCATION "Розміщення: %1"
+    IDS_STATUS "Стан пристрою: %1"
+    IDS_UNKNOWN "Невідомий"
+    IDS_LOCATIONSTR "Розміщення %1!u! (%2)"
+    IDS_DEVCODE " (Код %1!u!)"
+    IDS_DEVCODE2 " (Код %2!u!)"
+    IDS_ENABLEDEVICE "Цей пристрій використовується (увімкнений)"
+    IDS_DISABLEDEVICE "Цей пристрій не використовується (вимкнений)"
+    IDS_UNKNOWNDEVICE "Невідомий пристрій"
+    IDS_NODRIVERLOADED "Для цього пристрою не встановлені драйвери."
+    IDS_DEVONPARENT "на %1"
+    IDS_TROUBLESHOOTDEV "&Усунення несправностей..."
+    IDS_ENABLEDEV "Вв&імкнути пристрій"
+    IDS_REINSTALLDRV "&Перевстановити драйвер"
+    IDS_PROPERTIES "&Властивості"
+    IDS_UPDATEDRV "&Оновити драйвер..."
+    IDS_REBOOT "Перезавантажити &комп'ютер..."
+    IDS_NOTAVAILABLE "Недоступно"
+    IDS_NOTDIGITALLYSIGNED "Немає цифрового підпису"
+    IDS_NODRIVERS "Файли драйверів для цього пристрою не потрібні або не були завантажені."
+    IDS_RESOURCE_COLUMN "Resource type"
+    IDS_SETTING_COLUMN "Setting"
+    IDS_RESOURCE_MEMORY_RANGE "Memory range"
+    IDS_RESOURCE_INTERRUPT "IRQ"
+    IDS_RESOURCE_DMA "DMA"
+    IDS_RESOURCE_PORT "I/O range"
+END
+
+/* error messages, source: http://www.z123.org/techsupport/medm.htm */
+STRINGTABLE
+BEGIN
+    IDS_DEV_NO_PROBLEM "Цей пристрій працює нормально."
+    IDS_DEV_NOT_CONFIGURED "Цей пристрій не налаштований правильно."
+    IDS_DEV_DEVLOADER_FAILED "ReactOS не може завантажити драйвер для цього пристрою, тому що система повідомляє про два види шин типу %1."
+    IDS_DEV_DEVLOADER_FAILED2 "Система завантаження обладнання %1 не може завантажити драйвер цього пристрою."
+    IDS_DEV_OUT_OF_MEMORY "Драйвер для цього пристрою є несправним або системі бракує пам'яті чи інших ресурсів."
+    IDS_DEV_ENTRY_IS_WRONG_TYPE "Цей пристрій працює неправильно, оскільки один з його драйверів або реєстр є несправними."
+    IDS_DEV_LACKED_ARBITRATOR "Драйвер для цього пристрою вимагає ресурсів, з якими ReactOS не вміє працювати."
+    IDS_DEV_BOOT_CONFIG_CONFLICT "Інший пристрій використовує ресурси, потрібні цьому пристрою."
+    IDS_DEV_FAILED_FILTER "Драйвери цього пристрою треба переустановити."
+    IDS_DEV_DEVLOADER_NOT_FOUND "Цей пристрій працює неправильно, оскільки ReactOS не може завантажити файл %1 , який завантажує драйвери пристрою."
+    IDS_DEV_DEVLOADER_NOT_FOUND2 "Цей пристрій працює неправильно, оскільки файл %1 , який завантажує драйвери пристрою, є несправним."
+    IDS_DEV_DEVLOADER_NOT_FOUND3 "Помилка пристрою: Спробуйте змінити драйвер цього пристрою. Якщо це не допомагає, дивіться документацію пристрою."
+    IDS_DEV_INVALID_DATA "Цей пристрій працює неправильно, оскільки BIOS комп'ютера невірно передає ресурси для пристрою."
+    IDS_DEV_INVALID_DATA2 "Цей пристрій працює неправильно, оскільки BIOS пристрою невірно передає ресурси для пристрою. "
+    IDS_DEV_FAILED_START "Цей пристрій відсутній, працює некоректно або не має всіх встановлених драйверів."
+    IDS_DEV_LIAR "ReactOS не відповідає на запити при спробі запуску цього пристрою, і тому ніколи не буде намагатися запустити цей пристрій знов."
+    IDS_DEV_NORMAL_CONFLICT "Цей пристрій не може знайти вільних %1 ресурсів для їх використання."
+    IDS_DEV_NOT_VERIFIED "Цей пристрій відсутній, працює некоректно або не має всіх встановлених драйверів."
+    IDS_DEV_NEED_RESTART "Цей пристрій не зможе коректно працювати, поки ви не перезавантажите комп'ютер."
+    IDS_DEV_REENUMERATION "Цей пристрій спричинив конфлікт ресурсів."
+    IDS_DEV_PARTIAL_LOG_CONF "ReactOS не може розпізнати всі ресурси, які використовуються пристроєм."
+    IDS_DEV_UNKNOWN_RESOURCE "Інформаційний файл пристрою %1 каже цьому похідному пристрою використати ресурс, якого батьківський пристрій не має чи не розпізнає."
+    IDS_DEV_REINSTALL "Драйвери цього пристрою треба переустановити."
+    IDS_DEV_REGISTRY "Ваш системний реєстр може бути пошкоджений."
+    IDS_DEV_WILL_BE_REMOVED "ReactOS видалить цей пристрій."
+    IDS_DEV_DISABLED "Цей пристрій не запущений."
+    IDS_DEV_DISABLED2 "Цей пристрій відключений."
+    IDS_DEV_DEVLOADER_NOT_READY "Завантажувачі цього пристрою на можуть завантажити необхідні драйвери."
+    IDS_DEV_DEVLOADER_NOT_READY2 "Цей адапртер дисплея функціонує коректно."
+    IDS_DEV_DEVLOADER_NOT_READY3 "Завантажувачі цього пристрою на можуть завантажити необхідні драйвери."
+    IDS_DEV_DEVICE_NOT_THERE "Цей пристрій відсутній, працює некоректно або не має всіх встановлених драйверів."
+    IDS_DEV_MOVED "ReactOS налаштовує цей пристрій."
+    IDS_DEV_TOO_EARLY "ReactOS налаштовує цей пристрій."
+    IDS_DEV_NO_VALID_LOG_CONF "ReactOS не може вказати ресурси для цього пристрою."
+    IDS_DEV_FAILED_INSTALL "Драйвери для цього пристрою не встановлені."
+    IDS_DEV_HARDWARE_DISABLED "Цей пристрій вимкнено, оскільки BIOS не виділив для пристрою ресурсів."
+    IDS_DEV_CANT_SHARE_IRQ "Цей пристрій використувує ресурс Запиту Переривань (IRQ), який використовується іншим пристроєм та не може бути спільним.\nВи повинні змінити конфліктуючі налаштування або видалити драйвер реального режиму, що спричинює конфлікт."
+    IDS_DEV_FAILED_ADD "Цей пристрій працює неправильно, оскільки %1 is not working properly."
+    IDS_DEV_DISABLED_SERVICE "ReactOS не може встановити драйвери для цього пристрою, оскільки не має доступу до диску чи мережного ресурсу, які містять файли установки."
+    IDS_DEV_TRANSLATION_FAILED "Цей пристрій не відповідає його драйверу."
+    IDS_DEV_NO_SOFTCONFIG "ReactOS не може визначити налаштуванн для цього пристрою. Зверніться до документації пристрою, і використовуйте вкладку Ресурси для налаштування конфігурації."
+    IDS_DEV_BIOS_TABLE "Мікропрограма вашого комп'ютера не містить досить інформації для коректних налаштування та використання цього пристрою. \nЩоб використовувати цей пристрій, зверніться до виробника комп'ютера для отримання оновлених мікропрограми чи BIOS."
+    IDS_DEV_IRQ_TRANSLATION_FAILED "Цей пристрій запитує переривання PCI, а він налаштований на переривання ISA (або навпаки). \nВикористайте програму налаштування комп'ютера для зміни параметрів переривань цього пристрою."
+    IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS не може ініціалізувати драйвер пристрою для даного обладнання."
+    IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS не може завантажити драйвер цого пристрою, оскільки попередня версія драйвера пристрою все ще знаходиться в пам'яті."
+    IDS_DEV_DRIVER_FAILED_LOAD "ReactOS не може завантажити драйвер для цого пристрою. Драйвер зіпсований або відсутній."
+    IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS не може отримати доступ до цього пристрою, оскільки дані сервісного ключа реєстру відсутні чи записані невірно."
+    IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS успішно завантажив драйвер цього пристрою але не може знайти сам пристрій."
+    IDS_DEV_DUPLICATE_DEVICE "ReactOS  не може завантажити драйвер для цого пристрою, оскільки в системі вже працює такий же пристрій."
+    IDS_DEV_FAILED_POST_START "ReactOS зупинив цей пристрій, оскільки в його роботі виявилися проблеми."
+    IDS_DEV_HALTED "Додаток або служба відключили цей апаратний пристрій."
+    IDS_DEV_PHANTOM "В даний момент цей пристрій не під'єднаний до комп'ютера."
+    IDS_DEV_SYSTEM_SHUTDOWN "ReactOS не може отримати доступ до цього пристрою, оскільки операційна система завершує свою роботу."
+    IDS_DEV_HELD_FOR_EJECT "ReactOS не може використовувати цей пристрій, оскільки він був підготовлений для безпечнрго видалення, але ще не був видалений з комп'ютера"
+    IDS_DEV_DRIVER_BLOCKED "Запуск програмного забезпечення для цього пристрою був заблокований, оскільки воно має відомі проблеми з ReactOS. Зверніться до постачальника за новим драйвером."
+    IDS_DEV_REGISTRY_TOO_LARGE "ReactOS не може запустити нові пристрої, оскільки системний кущ занадто великий (перевищує допустимий розмір реєстру)."
+    IDS_DEV_SETPROPERTIES_FAILED "ReactOS не зміг змінити параметри цього пристрою."
+END
+
+STRINGTABLE
+BEGIN
+    IDS_PROP_DEVICEID "Код екземпляру пристрою"
+    IDS_PROP_HARDWAREIDS "Коди (ID) обладнання"
+    IDS_PROP_COMPATIBLEIDS "Сумісні коди (ID)"
+    IDS_PROP_MATCHINGDEVICEID "Відповідний код (ID) пристрою"
+    IDS_PROP_SERVICE "Служба"
+    IDS_PROP_ENUMERATOR "Лічильник"
+    IDS_PROP_CAPABILITIES "Можливості"
+    IDS_PROP_DEVNODEFLAGS "Прапорці Devnode"
+    IDS_PROP_CONFIGFLAGS "Прапорці Config"
+    IDS_PROP_CSCONFIGFLAGS "Прапорці CSConfig"
+    IDS_PROP_EJECTIONRELATIONS "Залежності виймання"
+    IDS_PROP_REMOVALRELATIONS "Залежності видалення"
+    IDS_PROP_BUSRELATIONS "Залежності шини"
+    IDS_PROP_DEVUPPERFILTERS "Верхні фільтри пристрою"
+    IDS_PROP_DEVLOWERFILTERS "Нижні фільтри пристрою"
+    IDS_PROP_CLASSUPPERFILTERS "Верхні фільтри класу"
+    IDS_PROP_CLASSLOWERFILTERS "Нижні фільтри класу"
+    IDS_PROP_CLASSINSTALLER "Встановлювачі класів"
+    IDS_PROP_CLASSCOINSTALLER "Співвстановлювачі класів"
+    IDS_PROP_DEVICECOINSTALLER "Співвстановлювачі пристроїв"
+    IDS_PROP_FIRMWAREREVISION "Мікропрограма"
+    IDS_PROP_CURRENTPOWERSTATE "Поточний стан електроживлення"
+    IDS_PROP_POWERCAPABILITIES "Можливості електроживлення"
+    IDS_PROP_POWERSTATEMAPPINGS "Співставлення енергозбереження"
+END
+
+IDD_HARDWARE DIALOGEX 0, 0, 300, 400
+STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT
+FONT 8, "MS Shell Dlg"
+BEGIN
+    LTEXT "&Пристрої:", IDC_DEVICES, 7, 6, 196, 10
+    CONTROL "", IDC_LV_DEVICES, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS |
+            LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 16, 196, 50
+    GROUPBOX "Властивості пристрою", IDC_PROPERTIESGROUP, 7, 76, 196, 105
+    LTEXT "", IDC_MANUFACTURER, 14, 88, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_LOCATION, 14, 100, 183, 10, SS_ENDELLIPSIS
+    LTEXT "", IDC_STATUS, 14, 112, 183, 30
+    PUSHBUTTON "&Усунення несправностей...", IDC_TROUBLESHOOT, 85, 140, 54, 14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP
+    PUSHBUTTON "&Властивості", IDC_PROPERTIES, 146, 140, 50, 14
+END
+
+IDD_DEVICEGENERAL DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Загальні"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+     LTEXT "Тип пристрою:", -1, 37, 39, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+     LTEXT "Виробник:", -1, 37, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+     LTEXT "Розміщення:", -1, 37, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+     GROUPBOX "Стан пристрою", IDC_DEVSTATUSGROUP, 7, 83, 238, 100
+    EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL
+     PUSHBUTTON "&Усунення несправностей...", IDC_DEVPROBLEM, 146, 163, 94, 15
+     LTEXT "&Використання пристрою:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED
+    COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED
+END
+
+IDD_DEVICEDRIVER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Драйвер"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+     LTEXT "Постачальник драйвера:", -1, 4, 39, 85, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+     LTEXT "Дата драйвера:", -1, 4, 53, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+     LTEXT "Версія драйвера:", -1, 4, 67, 60, 8, SS_NOPREFIX
+    EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+     LTEXT "Цифровий підпис:", -1, 4, 81, 65, 8, SS_NOPREFIX
+    EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+     PUSHBUTTON "&Відомості...", IDC_DRIVERDETAILS, 7, 106, 75, 15
+     LTEXT "Перегляд відомостей про файли драйвера.", -1, 91, 110, 154, 17, SS_NOPREFIX
+    PUSHBUTTON "&Update Driver...", IDC_UPDATEDRIVER, 7, 126, 75, 15
+    LTEXT "Update the device driver.", -1, 91, 130, 154, 17, SS_NOPREFIX
+END
+
+IDD_DRIVERDETAILS DIALOGEX 0, 0, 224, 230
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
+CAPTION "Відомості про файли драйвера"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "&Файли драйвера:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80
+    LTEXT "Постачальник:", -1, 4, 134, 50, 8
+    EDITTEXT IDC_FILEPROVIDER, 66, 134, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Версія файлу:", -1, 4, 150, 50, 8
+    EDITTEXT IDC_FILEVERSION, 66, 150, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Авторські права:", -1, 4, 166, 65, 8
+    EDITTEXT IDC_FILECOPYRIGHT, 66, 166, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    LTEXT "Цифровий підпис:", -1, 4, 182, 65, 8
+    EDITTEXT IDC_DIGITALSIGNER, 66, 182, 155, 8, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY
+    DEFPUSHBUTTON "OK", IDOK, 167, 208, 50, 14
+END
+
+IDD_DEVICEDETAILS DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Відомості"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    COMBOBOX IDC_DETAILSPROPNAME, 7, 36, 238, 165, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    CONTROL "", IDC_DETAILSPROPVALUE, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER |
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 58, 238, 155
+END
+
+IDD_DEVICERESOURCES DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Resources"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+    LTEXT "Resource settings:", -1, 7, 36, 204, 8
+    CONTROL "", IDC_DRIVERRESOURCES, "SysListView32", LVS_REPORT | 
+            LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING |
+            LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 238, 80
+END
+
+IDD_DEVICEPOWER DIALOGEX 0, 0, 252, 218
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Живлення"
+FONT 8, "MS Shell Dlg"
+BEGIN
+    ICON "", IDC_DEVICON, 7, 7, 20, 20
+    LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX
+END
diff --git a/reactos/dll/win32/devmgr_new/misc.c b/reactos/dll/win32/devmgr_new/misc.c
new file mode 100644 (file)
index 0000000..1ecc44c
--- /dev/null
@@ -0,0 +1,1147 @@
+/*
+ * ReactOS Device Manager Applet
+ * Copyright (C) 2004 - 2005 ReactOS Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+/*
+ * PROJECT:         ReactOS devmgr.dll
+ * FILE:            lib/devmgr/misc.c
+ * PURPOSE:         ReactOS Device Manager
+ * PROGRAMMER:      Thomas Weidenmueller <w3seek@reactos.com>
+ * UPDATE HISTORY:
+ *      2005/11/24  Created
+ */
+
+#include "precomp.h"
+
+
+HINSTANCE hDllInstance = NULL;
+
+INT
+LengthOfStrResource(IN HINSTANCE hInst,
+                    IN UINT uID)
+{
+    HRSRC hrSrc;
+    HGLOBAL hRes;
+    LPWSTR lpName, lpStr;
+
+    if (hInst == NULL)
+    {
+        return -1;
+    }
+
+    /* There are always blocks of 16 strings */
+    lpName = (LPWSTR)MAKEINTRESOURCE((uID >> 4) + 1);
+
+    /* Find the string table block */
+    if ((hrSrc = FindResourceW(hInst, lpName, (LPWSTR)RT_STRING)) &&
+        (hRes = LoadResource(hInst, hrSrc)) &&
+        (lpStr = LockResource(hRes)))
+    {
+        UINT x;
+
+        /* Find the string we're looking for */
+        uID &= 0xF; /* position in the block, same as % 16 */
+        for (x = 0; x < uID; x++)
+        {
+            lpStr += (*lpStr) + 1;
+        }
+
+        /* Found the string */
+        return (int)(*lpStr);
+    }
+    return -1;
+}
+
+
+static INT
+AllocAndLoadString(OUT LPWSTR *lpTarget,
+                   IN HINSTANCE hInst,
+                   IN UINT uID)
+{
+    INT ln;
+
+    ln = LengthOfStrResource(hInst,
+                             uID);
+    if (ln++ > 0)
+    {
+        (*lpTarget) = (LPWSTR)LocalAlloc(LMEM_FIXED,
+                                         ln * sizeof(WCHAR));
+        if ((*lpTarget) != NULL)
+        {
+            INT Ret;
+            if (!(Ret = LoadStringW(hInst, uID, *lpTarget, ln)))
+            {
+                LocalFree((HLOCAL)(*lpTarget));
+            }
+            return Ret;
+        }
+    }
+    return 0;
+}
+
+
+static INT
+AllocAndLoadStringsCat(OUT LPWSTR *lpTarget,
+                       IN HINSTANCE hInst,
+                       IN UINT *uID,
+                       IN UINT nIDs)
+{
+    INT ln = 0;
+    UINT i;
+
+    for (i = 0;
+         i != nIDs;
+         i++)
+    {
+        ln += LengthOfStrResource(hInst,
+                                  uID[i]);
+    }
+
+    if (ln != 0)
+    {
+        (*lpTarget) = (LPWSTR)LocalAlloc(LMEM_FIXED,
+                                         (ln + 1) * sizeof(WCHAR));
+        if ((*lpTarget) != NULL)
+        {
+            LPWSTR s = *lpTarget;
+            INT Ret = 0;
+
+            for (i = 0;
+                 i != nIDs;
+                 i++)
+            {
+                if (!(Ret = LoadStringW(hInst, uID[i], s, ln)))
+                {
+                    LocalFree((HLOCAL)(*lpTarget));
+                    return 0;
+                }
+
+                s += Ret;
+            }
+
+            return s - *lpTarget;
+        }
+    }
+    return 0;
+}
+
+
+DWORD
+LoadAndFormatString(IN HINSTANCE hInstance,
+                    IN UINT uID,
+                    OUT LPWSTR *lpTarget,
+                    ...)
+{
+    DWORD Ret = 0;
+    LPWSTR lpFormat;
+    va_list lArgs;
+
+    if (AllocAndLoadString(&lpFormat,
+                           hInstance,
+                           uID) != 0)
+    {
+        va_start(lArgs, lpTarget);
+        /* let's use FormatMessage to format it because it has the ability to allocate
+           memory automatically */
+        Ret = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,
+                             lpFormat,
+                             0,
+                             0,
+                             (LPWSTR)lpTarget,
+                             0,
+                             &lArgs);
+        va_end(lArgs);
+
+        LocalFree((HLOCAL)lpFormat);
+    }
+
+    return Ret;
+}
+
+
+DWORD
+LoadAndFormatStringsCat(IN HINSTANCE hInstance,
+                        IN UINT *uID,
+                        IN UINT nIDs,
+                        OUT LPWSTR *lpTarget,
+                        ...)
+{
+    DWORD Ret = 0;
+    LPWSTR lpFormat;
+    va_list lArgs;
+
+    if (AllocAndLoadStringsCat(&lpFormat,
+                               hInstance,
+                               uID,
+                               nIDs) != 0)
+    {
+        va_start(lArgs, lpTarget);
+        /* let's use FormatMessage to format it because it has the ability to allocate
+           memory automatically */
+        Ret = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,
+                             lpFormat,
+                             0,
+                             0,
+                             (LPWSTR)lpTarget,
+                             0,
+                             &lArgs);
+        va_end(lArgs);
+
+        LocalFree((HLOCAL)lpFormat);
+    }
+
+    return Ret;
+}
+
+
+LPARAM
+ListViewGetSelectedItemData(IN HWND hwnd)
+{
+    int Index;
+
+    Index = ListView_GetNextItem(hwnd,
+                                 -1,
+                                 LVNI_SELECTED);
+    if (Index != -1)
+    {
+        LVITEM li;
+
+        li.mask = LVIF_PARAM;
+        li.iItem = Index;
+        li.iSubItem = 0;
+
+        if (ListView_GetItem(hwnd,
+                             &li))
+        {
+            return li.lParam;
+        }
+    }
+
+    return 0;
+}
+
+
+LPWSTR
+ConvertMultiByteToUnicode(IN LPCSTR lpMultiByteStr,
+                          IN UINT uCodePage)
+{
+    LPWSTR lpUnicodeStr;
+    INT nLength;
+
+    nLength = MultiByteToWideChar(uCodePage,
+                                  0,
+                                  lpMultiByteStr,
+                                  -1,
+                                  NULL,
+                                  0);
+    if (nLength == 0)
+        return NULL;
+
+    lpUnicodeStr = HeapAlloc(GetProcessHeap(),
+                             0,
+                             nLength * sizeof(WCHAR));
+    if (lpUnicodeStr == NULL)
+    {
+        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+        return NULL;
+    }
+
+    if (!MultiByteToWideChar(uCodePage,
+                             0,
+                             lpMultiByteStr,
+                             nLength,
+                             lpUnicodeStr,
+                             nLength))
+    {
+        HeapFree(GetProcessHeap(),
+                 0,
+                 lpUnicodeStr);
+        return NULL;
+    }
+
+    return lpUnicodeStr;
+}
+
+
+BOOL
+GetDeviceManufacturerString(IN HDEVINFO DeviceInfoSet,
+                            IN PSP_DEVINFO_DATA DeviceInfoData,
+                            OUT LPWSTR szBuffer,
+                            IN DWORD BufferSize)
+{
+    DWORD RegDataType;
+    BOOL Ret = FALSE;
+
+    if (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+                                          DeviceInfoData,
+                                          SPDRP_MFG,
+                                          &RegDataType,
+                                          (PBYTE)szBuffer,
+                                          BufferSize * sizeof(WCHAR),
+                                          NULL) ||
+        RegDataType != REG_SZ)
+    {
+        szBuffer[0] = L'\0';
+        if (LoadString(hDllInstance,
+                       IDS_UNKNOWN,
+                       szBuffer,
+                       BufferSize))
+        {
+            Ret = TRUE;
+        }
+    }
+    else
+    {
+        /* FIXME - check string for NULL termination! */
+        Ret = TRUE;
+    }
+
+    return Ret;
+}
+
+
+BOOL
+GetDeviceLocationString(IN HDEVINFO DeviceInfoSet,
+                        IN PSP_DEVINFO_DATA DeviceInfoData,
+                        IN DEVINST dnParentDevInst  OPTIONAL,
+                        OUT LPWSTR szBuffer,
+                        IN DWORD BufferSize)
+{
+    DWORD RegDataType;
+    ULONG DataSize;
+    CONFIGRET cRet;
+    LPWSTR szFormatted;
+    HKEY hKey;
+    DWORD dwSize, dwType;
+    BOOL Ret = FALSE;
+
+    DataSize = BufferSize * sizeof(WCHAR);
+    szBuffer[0] = L'\0';
+
+    hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
+                                DeviceInfoData,
+                                DICS_FLAG_GLOBAL,
+                                0,
+                                DIREG_DRV,
+                                KEY_QUERY_VALUE);
+    if (hKey != INVALID_HANDLE_VALUE)
+    {
+        /* query the LocationInformationOverride value */
+        dwSize = BufferSize;
+        if (RegQueryValueEx(hKey,
+                            L"LocationInformationOverride",
+                            NULL,
+                            &dwType,
+                            (LPBYTE)szBuffer,
+                            &dwSize) == ERROR_SUCCESS &&
+            dwType == REG_SZ &&
+            szBuffer[0] != L'\0')
+        {
+            Ret = TRUE;
+        }
+        else
+        {
+            szBuffer[0] = L'\0';
+        }
+
+        RegCloseKey(hKey);
+    }
+
+
+    if (!Ret)
+    {
+        if (dnParentDevInst != 0)
+        {
+            /* query the parent node name */
+            if (CM_Get_DevNode_Registry_Property(dnParentDevInst,
+                                                 CM_DRP_DEVICEDESC,
+                                                 &RegDataType,
+                                                 szBuffer,
+                                                 &DataSize,
+                                                 0) == CR_SUCCESS &&
+                 RegDataType == REG_SZ &&
+                 LoadAndFormatString(hDllInstance,
+                                     IDS_DEVONPARENT,
+                                     &szFormatted,
+                                     szBuffer) != 0)
+            {
+                wcsncpy(szBuffer,
+                        szFormatted,
+                        BufferSize - 1);
+                szBuffer[BufferSize - 1] = L'\0';
+                LocalFree((HLOCAL)szFormatted);
+                Ret = TRUE;
+            }
+        }
+        else if (DeviceInfoData->DevInst != 0)
+        {
+            cRet = CM_Get_DevNode_Registry_Property(DeviceInfoData->DevInst,
+                                                    CM_DRP_LOCATION_INFORMATION,
+                                                    &RegDataType,
+                                                    szBuffer,
+                                                    &DataSize,
+                                                    0);
+            if (cRet == CR_SUCCESS && RegDataType == REG_SZ)
+            {
+                /* FIXME - check string for NULL termination! */
+                Ret = TRUE;
+            }
+
+            if (Ret && szBuffer[0] >= L'0' && szBuffer[0] <= L'9')
+            {
+                /* convert the string to an integer value and create a
+                   formatted string */
+                ULONG ulLocation = (ULONG)wcstoul(szBuffer,
+                                                  NULL,
+                                                  10);
+                if (LoadAndFormatString(hDllInstance,
+                                        IDS_LOCATIONSTR,
+                                        &szFormatted,
+                                        ulLocation,
+                                        szBuffer) != 0)
+                {
+                    wcsncpy(szBuffer,
+                            szFormatted,
+                            BufferSize - 1);
+                    szBuffer[BufferSize - 1] = L'\0';
+                    LocalFree((HLOCAL)szFormatted);
+                }
+                else
+                    Ret = FALSE;
+            }
+        }
+    }
+
+    if (!Ret &&
+        LoadString(hDllInstance,
+                   IDS_UNKNOWN,
+                   szBuffer,
+                   BufferSize))
+    {
+        Ret = TRUE;
+    }
+
+    return Ret;
+}
+
+
+BOOL
+GetDeviceStatusString(IN DEVINST DevInst,
+                      IN HMACHINE hMachine,
+                      OUT LPWSTR szBuffer,
+                      IN DWORD BufferSize)
+{
+    CONFIGRET cr;
+    ULONG Status, ProblemNumber;
+    UINT MessageId = IDS_UNKNOWN;
+    BOOL Ret = FALSE;
+
+    szBuffer[0] = L'\0';
+    cr = CM_Get_DevNode_Status_Ex(&Status,
+                                  &ProblemNumber,
+                                  DevInst,
+                                  0,
+                                  hMachine);
+    if (cr == CR_SUCCESS)
+    {
+        if (Status & DN_HAS_PROBLEM)
+        {
+            UINT uRet;
+
+            uRet = DeviceProblemText(hMachine,
+                                     DevInst,
+                                     ProblemNumber,
+                                     szBuffer,
+                                     (BufferSize != 0 ? BufferSize : BufferSize - 1));
+
+            Ret = (uRet != 0 && uRet < BufferSize);
+        }
+        else
+        {
+            if (!(Status & (DN_DRIVER_LOADED | DN_STARTED)))
+            {
+                MessageId = IDS_NODRIVERLOADED;
+            }
+            else
+            {
+                MessageId = IDS_DEV_NO_PROBLEM;
+            }
+
+            goto GeneralMessage;
+        }
+    }
+    else
+    {
+GeneralMessage:
+        if (LoadString(hDllInstance,
+                        MessageId,
+                        szBuffer,
+                        (int)BufferSize))
+        {
+            Ret = TRUE;
+        }
+    }
+
+    return Ret;
+}
+
+
+BOOL
+GetDriverProviderString(IN HDEVINFO DeviceInfoSet,
+                        IN PSP_DEVINFO_DATA DeviceInfoData,
+                        OUT LPWSTR szBuffer,
+                        IN DWORD BufferSize)
+{
+    HKEY hKey;
+    DWORD dwSize, dwType;
+    BOOL Ret = FALSE;
+
+    szBuffer[0] = L'\0';
+
+    /* get driver provider, date and version */
+    hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
+                                DeviceInfoData,
+                                DICS_FLAG_GLOBAL,
+                                0,
+                                DIREG_DRV,
+                                KEY_QUERY_VALUE);
+    if (hKey != INVALID_HANDLE_VALUE)
+    {
+        /* query the driver provider */
+        dwSize = BufferSize;
+        if (RegQueryValueEx(hKey,
+                            REGSTR_VAL_PROVIDER_NAME,
+                            NULL,
+                            &dwType,
+                            (LPBYTE)szBuffer,
+                            &dwSize) == ERROR_SUCCESS &&
+            dwType == REG_SZ &&
+            szBuffer[0] != L'\0')
+        {
+            Ret = TRUE;
+        }
+        else
+        {
+            szBuffer[0] = L'\0';
+        }
+
+        RegCloseKey(hKey);
+    }
+
+    if (szBuffer[0] == L'\0')
+    {
+        /* unable to query the information */
+        if (LoadString(hDllInstance,
+                       IDS_UNKNOWN,
+                       szBuffer,
+                       BufferSize))
+        {
+            Ret = TRUE;
+        }
+    }
+
+    return Ret;
+}
+
+
+BOOL
+GetDriverVersionString(IN HDEVINFO DeviceInfoSet,
+                       IN PSP_DEVINFO_DATA DeviceInfoData,
+                       OUT LPWSTR szBuffer,
+                       IN DWORD BufferSize)
+{
+    HKEY hKey;
+    DWORD dwSize, dwType;
+    BOOL Ret = FALSE;
+
+    szBuffer[0] = L'\0';
+
+    /* get driver provider, date and version */
+    hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
+                                DeviceInfoData,
+                                DICS_FLAG_GLOBAL,
+                                0,
+                                DIREG_DRV,
+                                KEY_QUERY_VALUE);
+    if (hKey != INVALID_HANDLE_VALUE)
+    {
+        /* query the driver provider */
+        dwSize = BufferSize;
+        if (RegQueryValueEx(hKey,
+                            L"DriverVersion",
+                            NULL,
+                            &dwType,
+                            (LPBYTE)szBuffer,
+                            &dwSize) == ERROR_SUCCESS &&
+            dwType == REG_SZ &&
+            szBuffer[0] != L'\0')
+        {
+            Ret = TRUE;
+        }
+        else
+        {
+            szBuffer[0] = L'\0';
+        }
+
+        RegCloseKey(hKey);
+    }
+
+    if (szBuffer[0] == L'\0')
+    {
+        /* unable to query the information */
+        if (LoadString(hDllInstance,
+                       IDS_NOTAVAILABLE,
+                       szBuffer,
+                       BufferSize))
+        {
+            Ret = TRUE;
+        }
+    }
+
+    return Ret;
+}
+
+BOOL
+GetDriverDateString(IN HDEVINFO DeviceInfoSet,
+                    IN PSP_DEVINFO_DATA DeviceInfoData,
+                    OUT LPWSTR szBuffer,
+                    IN DWORD BufferSize)
+{
+    HKEY hKey;
+    FILETIME DriverDate;
+    SYSTEMTIME SystemTime, LocalTime;
+    DWORD dwSize, dwType;
+    BOOL Ret = FALSE;
+
+    szBuffer[0] = L'\0';
+
+    /* get driver provider, date and version */
+    hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
+                                DeviceInfoData,
+                                DICS_FLAG_GLOBAL,
+                                0,
+                                DIREG_DRV,
+                                KEY_QUERY_VALUE);
+    if (hKey != INVALID_HANDLE_VALUE)
+    {
+        /* query the driver provider */
+        dwSize = sizeof(FILETIME);
+        if (RegQueryValueEx(hKey,
+                            L"DriverDateData",
+                            NULL,
+                            &dwType,
+                            (LPBYTE)&DriverDate,
+                            &dwSize) == ERROR_SUCCESS &&
+            dwType == REG_BINARY &&
+            dwSize == sizeof(FILETIME) &&
+            FileTimeToSystemTime(&DriverDate,
+                                 &SystemTime) &&
+            SystemTimeToTzSpecificLocalTime(NULL,
+                                            &SystemTime,
+                                            &LocalTime) &&
+            GetDateFormat(LOCALE_USER_DEFAULT,
+                          DATE_SHORTDATE,
+                          &LocalTime,
+                          NULL,
+                          szBuffer,
+                          BufferSize) != 0)
+        {
+            Ret = TRUE;
+        }
+
+        RegCloseKey(hKey);
+    }
+
+    if (!Ret)
+    {
+        /* unable to query the information */
+        if (LoadString(hDllInstance,
+                       IDS_NOTAVAILABLE,
+                       szBuffer,
+                       BufferSize))
+        {
+            Ret = TRUE;
+        }
+    }
+
+    return Ret;
+}
+
+
+
+BOOL
+IsDeviceHidden(IN DEVINST DevInst,
+               IN HMACHINE hMachine,
+               OUT BOOL *IsHidden)
+{
+    CONFIGRET cr;
+    ULONG Status, ProblemNumber;
+    BOOL Ret = FALSE;
+
+    cr = CM_Get_DevNode_Status_Ex(&Status,
+                                  &ProblemNumber,
+                                  DevInst,
+                                  0,
+                                  hMachine);
+    if (cr == CR_SUCCESS)
+    {
+        *IsHidden = ((Status & DN_NO_SHOW_IN_DM) != 0);
+        Ret = TRUE;
+    }
+
+    return Ret;
+}
+
+
+BOOL
+CanDisableDevice(IN DEVINST DevInst,
+                 IN HMACHINE hMachine,
+                 OUT BOOL *CanDisable)
+{
+    CONFIGRET cr;
+    ULONG Status, ProblemNumber;
+    BOOL Ret = FALSE;
+
+    cr = CM_Get_DevNode_Status_Ex(&Status,
+                                  &ProblemNumber,
+                                  DevInst,
+                                  0,
+                                  hMachine);
+    if (cr == CR_SUCCESS)
+    {
+        *CanDisable = ((Status & DN_DISABLEABLE) != 0);
+        Ret = TRUE;
+    }
+
+    return Ret;
+}
+
+
+BOOL
+IsDeviceStarted(IN DEVINST DevInst,
+                IN HMACHINE hMachine,
+                OUT BOOL *IsStarted)
+{
+    CONFIGRET cr;
+    ULONG Status, ProblemNumber;
+    BOOL Ret = FALSE;
+
+    cr = CM_Get_DevNode_Status_Ex(&Status,
+                                  &ProblemNumber,
+                                  DevInst,
+                                  0,
+                                  hMachine);
+    if (cr == CR_SUCCESS)
+    {
+        *IsStarted = ((Status & DN_STARTED) != 0);
+        Ret = TRUE;
+    }
+
+    return Ret;
+}
+
+
+BOOL
+IsDriverInstalled(IN DEVINST DevInst,
+                  IN HMACHINE hMachine,
+                  OUT BOOL *Installed)
+{
+    CONFIGRET cr;
+    ULONG Status, ProblemNumber;
+    BOOL Ret = FALSE;
+
+    cr = CM_Get_DevNode_Status_Ex(&Status,
+                                  &ProblemNumber,
+                                  DevInst,
+                                  0,
+                                  hMachine);
+    if (cr == CR_SUCCESS)
+    {
+        *Installed = ((Status & DN_HAS_PROBLEM) != 0 ||
+                      (Status & (DN_DRIVER_LOADED | DN_STARTED)) != 0);
+        Ret = TRUE;
+    }
+
+    return Ret;
+}
+
+
+BOOL
+EnableDevice(IN HDEVINFO DeviceInfoSet,
+             IN PSP_DEVINFO_DATA DevInfoData  OPTIONAL,
+             IN BOOL bEnable,
+             IN DWORD HardwareProfile  OPTIONAL,
+             OUT BOOL *bNeedReboot  OPTIONAL)
+{
+    SP_PROPCHANGE_PARAMS pcp;
+    SP_DEVINSTALL_PARAMS dp;
+    DWORD LastErr;
+    BOOL Ret = FALSE;
+
+    pcp.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
+    pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
+    pcp.HwProfile = HardwareProfile;
+
+    if (bEnable)
+    {
+        /* try to enable the device on the global profile */
+        pcp.StateChange = DICS_ENABLE;
+        pcp.Scope = DICS_FLAG_GLOBAL;
+
+        /* ignore errors */
+        LastErr = GetLastError();
+        if (SetupDiSetClassInstallParams(DeviceInfoSet,
+                                         DevInfoData,
+                                         &pcp.ClassInstallHeader,
+                                         sizeof(SP_PROPCHANGE_PARAMS)))
+        {
+            SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
+                                      DeviceInfoSet,
+                                      DevInfoData);
+        }
+        SetLastError(LastErr);
+    }
+
+    /* try config-specific */
+    pcp.StateChange = (bEnable ? DICS_ENABLE : DICS_DISABLE);
+    pcp.Scope = DICS_FLAG_CONFIGSPECIFIC;
+
+    if (SetupDiSetClassInstallParams(DeviceInfoSet,
+                                     DevInfoData,
+                                     &pcp.ClassInstallHeader,
+                                     sizeof(SP_PROPCHANGE_PARAMS)) &&
+        SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
+                                  DeviceInfoSet,
+                                  DevInfoData))
+    {
+        dp.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
+        if (SetupDiGetDeviceInstallParams(DeviceInfoSet,
+                                          DevInfoData,
+                                          &dp))
+        {
+            if (bNeedReboot != NULL)
+            {
+                *bNeedReboot = ((dp.Flags & (DI_NEEDRESTART | DI_NEEDREBOOT)) != 0);
+            }
+
+            Ret = TRUE;
+        }
+    }
+    return Ret;
+}
+
+
+BOOL
+GetDeviceTypeString(IN PSP_DEVINFO_DATA DeviceInfoData,
+                    OUT LPWSTR szBuffer,
+                    IN DWORD BufferSize)
+{
+    BOOL Ret = FALSE;
+
+    if (!SetupDiGetClassDescription(&DeviceInfoData->ClassGuid,
+                                    szBuffer,
+                                    BufferSize,
+                                    NULL))
+    {
+        szBuffer[0] = L'\0';
+        if (LoadString(hDllInstance,
+                       IDS_UNKNOWN,
+                       szBuffer,
+                       BufferSize))
+        {
+            Ret = TRUE;
+        }
+    }
+    else
+    {
+        /* FIXME - check string for NULL termination! */
+        Ret = TRUE;
+    }
+
+    return Ret;
+}
+
+
+BOOL
+GetDeviceDescriptionString(IN HDEVINFO DeviceInfoSet,
+                           IN PSP_DEVINFO_DATA DeviceInfoData,
+                           OUT LPWSTR szBuffer,
+                           IN DWORD BufferSize)
+{
+    DWORD RegDataType;
+    BOOL Ret = FALSE;
+
+    if ((SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+                                          DeviceInfoData,
+                                          SPDRP_FRIENDLYNAME,
+                                          &RegDataType,
+                                          (PBYTE)szBuffer,
+                                          BufferSize * sizeof(WCHAR),
+                                          NULL) ||
+         SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+                                          DeviceInfoData,
+                                          SPDRP_DEVICEDESC,
+                                          &RegDataType,
+                                          (PBYTE)szBuffer,
+                                          BufferSize * sizeof(WCHAR),
+                                          NULL)) &&
+        RegDataType == REG_SZ)
+    {
+        /* FIXME - check string for NULL termination! */
+        Ret = TRUE;
+    }
+    else
+    {
+        szBuffer[0] = L'\0';
+        if (LoadString(hDllInstance,
+                       IDS_UNKNOWNDEVICE,
+                       szBuffer,
+                       BufferSize))
+        {
+            Ret = TRUE;
+        }
+    }
+
+    return Ret;
+}
+
+
+BOOL
+FindCurrentDriver(IN HDEVINFO DeviceInfoSet,
+                  IN PSP_DEVINFO_DATA DeviceInfoData,
+                  OUT PSP_DRVINFO_DATA DriverInfoData)
+{
+    HKEY hKey = INVALID_HANDLE_VALUE;
+    SP_DEVINSTALL_PARAMS InstallParams = {0};
+    SP_DRVINFO_DETAIL_DATA DriverInfoDetailData = {0};
+    WCHAR InfPath[MAX_PATH];
+    WCHAR InfSection[LINE_LEN];
+    DWORD dwType, dwLength;
+    DWORD i = 0;
+    LONG rc;
+    BOOL Ret = FALSE;
+
+    /* Steps to find the right driver:
+     * 1) Get the device install parameters
+     * 2) Open the driver registry key
+     * 3) Read the .inf file name
+     * 4) Update install params, by setting DI_ENUMSINGLEINF and .inf file name
+     * 5) Build class driver list
+     * 6) Read inf section and inf section extension from registry
+     * 7) Enumerate drivers
+     * 8) Find the one who is in the same section as current driver?
+     */
+
+    /* 1) Get the install params */
+    InstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
+    if (!SetupDiGetDeviceInstallParams(DeviceInfoSet,
+                                       DeviceInfoData,
+                                       &InstallParams))
+    {
+        ERR("SetupDiSetDeviceInstallParams() failed with error 0x%lx\n", GetLastError());
+        goto Cleanup;
+    }
+
+#ifdef DI_FLAGSEX_INSTALLEDDRIVER
+    InstallParams.FlagsEx |= (DI_FLAGSEX_INSTALLEDDRIVER | DI_FLAGSEX_ALLOWEXCLUDEDDRVS);
+    if (SetupDiSetDeviceInstallParams(DeviceInfoSet,
+                                      DeviceInfoData,
+                                      &InstallParams))
+    {
+        if (SetupDiBuildDriverInfoList(DeviceInfoSet,
+                                       DeviceInfoData,
+                                       SPDIT_CLASSDRIVER) &&
+            SetupDiEnumDriverInfo(DeviceInfoSet,
+                                  DeviceInfoData,
+                                  SPDIT_CLASSDRIVER,
+                                  0,
+                                  DriverInfoData))
+        {
+            Ret = TRUE;
+        }
+
+        goto Cleanup;
+    }
+    InstallParams.FlagsEx &= ~(DI_FLAGSEX_INSTALLEDDRIVER | DI_FLAGSEX_ALLOWEXCLUDEDDRVS);
+#endif
+
+    /* 2) Open the driver registry key */
+    hKey = SetupDiOpenDevRegKey(DeviceInfoSet,
+                                DeviceInfoData,
+                                DICS_FLAG_GLOBAL,
+                                0,
+                                DIREG_DRV,
+                                KEY_QUERY_VALUE);
+    if (hKey == INVALID_HANDLE_VALUE)
+    {
+        ERR("SetupDiOpenDevRegKey() failed with error 0x%lx\n", GetLastError());
+        goto Cleanup;
+    }
+
+    /* 3) Read the .inf file name */
+    dwLength = (sizeof(InfPath) / sizeof(InfPath[0])) - 1;
+    rc = RegQueryValueEx(hKey,
+                         REGSTR_VAL_INFPATH,
+                         0,
+                         &dwType,
+                         (LPBYTE)InfPath,
+                         &dwLength);
+    if (rc != ERROR_SUCCESS)
+    {
+        ERR("RegQueryValueEx() failed with error 0x%lx\n", GetLastError());
+        SetLastError(rc);
+        goto Cleanup;
+    }
+    else if (dwType != REG_SZ)
+    {
+        ERR("Expected registry type REG_SZ (%lu), got %lu\n", REG_SZ, dwType);
+        SetLastError(ERROR_GEN_FAILURE);
+        goto Cleanup;
+    }
+    InfPath[(dwLength / sizeof(WCHAR)) - 1] = L'\0';
+
+    /* 4) Update install params, by setting DI_ENUMSINGLEINF and .inf file name */
+    InstallParams.Flags |= DI_ENUMSINGLEINF;
+    InstallParams.FlagsEx |= DI_FLAGSEX_ALLOWEXCLUDEDDRVS;
+    wcscpy(InstallParams.DriverPath, InfPath);
+    if (!SetupDiSetDeviceInstallParams(DeviceInfoSet,
+                                       DeviceInfoData,
+                                       &InstallParams))
+    {
+        ERR("SetupDiSetDeviceInstallParams() failed with error 0x%lx\n", GetLastError());
+        goto Cleanup;
+    }
+
+    /* 5) Build class driver list */
+    if (!SetupDiBuildDriverInfoList(DeviceInfoSet,
+                                    DeviceInfoData,
+                                    SPDIT_CLASSDRIVER))
+    {
+        ERR("SetupDiBuildDriverInfoList() failed with error 0x%lx\n", GetLastError());
+        goto Cleanup;
+    }
+
+    /* 6) Read inf section and from registry */
+    dwLength = (sizeof(InfSection) / sizeof(InfSection[0])) - 1;
+    rc = RegQueryValueEx(hKey,
+                         REGSTR_VAL_INFSECTION,
+                         0,
+                         &dwType,
+                         (LPBYTE)InfSection,
+                         &dwLength);
+    if (rc != ERROR_SUCCESS)
+    {
+        ERR("RegQueryValueEx() failed with error 0x%lx\n", GetLastError());
+        SetLastError(rc);
+        goto Cleanup;
+    }
+    else if (dwType != REG_SZ)
+    {
+        ERR("Expected registry type REG_SZ (%lu), got %lu\n", REG_SZ, dwType);
+        SetLastError(ERROR_GEN_FAILURE);
+        goto Cleanup;
+    }
+    InfPath[(dwLength / sizeof(WCHAR)) - 1] = L'\0';
+
+    /* 7) Enumerate drivers */
+    DriverInfoData->cbSize = sizeof(SP_DRVINFO_DATA);
+    DriverInfoDetailData.cbSize = sizeof(SP_DRVINFO_DETAIL_DATA);
+    while (SetupDiEnumDriverInfo(DeviceInfoSet,
+                                 DeviceInfoData,
+                                 SPDIT_CLASSDRIVER,
+                                 i,
+                                 DriverInfoData))
+    {
+        /* 8) Find the one who is in the same section as current driver */
+        if (!SetupDiGetDriverInfoDetail(DeviceInfoSet,
+                                        DeviceInfoData,
+                                        DriverInfoData,
+                                        &DriverInfoDetailData,
+                                        DriverInfoDetailData.cbSize,
+                                        NULL) &&
+            GetLastError() != ERROR_INSUFFICIENT_BUFFER)
+        {
+            ERR("SetupDiGetDriverInfoDetail() failed with error 0x%lx\n", GetLastError());
+            goto Cleanup;
+        }
+        if (!wcsicmp(DriverInfoDetailData.SectionName,
+                     InfSection) != 0)
+        {
+            /* We have found the right driver */
+            Ret = TRUE;
+            goto Cleanup;
+        }
+
+        i++;
+    }
+    if (GetLastError() != ERROR_NO_MORE_ITEMS)
+    {
+        ERR("SetupDiEnumDriverInfo() failed with error 0x%lx\n", GetLastError());
+        goto Cleanup;
+    }
+
+    SetLastError(ERROR_NO_DRIVER_SELECTED);
+
+Cleanup:
+    if (hKey != INVALID_HANDLE_VALUE)
+        RegCloseKey(hKey);
+    return Ret;
+}
+
+
+HINSTANCE
+LoadAndInitComctl32(VOID)
+{
+    typedef VOID (WINAPI *PINITCOMMONCONTROLS)(VOID);
+    PINITCOMMONCONTROLS pInitCommonControls;
+    HINSTANCE hComCtl32;
+
+    hComCtl32 = LoadLibrary(L"comctl32.dll");
+    if (hComCtl32 != NULL)
+    {
+        /* initialize the common controls */
+        pInitCommonControls = (PINITCOMMONCONTROLS)GetProcAddress(hComCtl32,
+                                                                  "InitCommonControls");
+        if (pInitCommonControls == NULL)
+        {
+            FreeLibrary(hComCtl32);
+            return NULL;
+        }
+
+        pInitCommonControls();
+    }
+
+    return hComCtl32;
+}
+
+
+BOOL
+WINAPI
+DllMain(IN HINSTANCE hinstDLL,
+        IN DWORD dwReason,
+        IN LPVOID lpvReserved)
+{
+    switch (dwReason)
+    {
+        case DLL_PROCESS_ATTACH:
+            DisableThreadLibraryCalls(hinstDLL);
+            hDllInstance = hinstDLL;
+            break;
+    }
+
+    return TRUE;
+}
diff --git a/reactos/dll/win32/devmgr_new/precomp.h b/reactos/dll/win32/devmgr_new/precomp.h
new file mode 100644 (file)
index 0000000..0c6593d
--- /dev/null
@@ -0,0 +1,230 @@
+#ifndef __DEVMGR_H
+#define __DEVMGR_H
+
+#include <stdarg.h>
+#include <stdlib.h> 
+
+#define WIN32_NO_STATUS
+#include <windef.h>
+#include <winbase.h>
+#include <winreg.h>
+#include <winnls.h>
+#include <winuser.h>
+#include <wchar.h>
+#include <regstr.h>
+#include <setupapi.h>
+#include <cfgmgr32.h>
+#include <dll/newdevp.h>
+#include <dll/devmgr/devmgr.h>
+#include <wine/debug.h>
+
+#include "resource.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(devmgr);
+
+extern HINSTANCE hDllInstance;
+
+typedef INT_PTR (WINAPI *PPROPERTYSHEETW)(LPCPROPSHEETHEADERW);
+typedef HPROPSHEETPAGE (WINAPI *PCREATEPROPERTYSHEETPAGEW)(LPCPROPSHEETPAGEW);
+typedef BOOL (WINAPI *PDESTROYPROPERTYSHEETPAGE)(HPROPSHEETPAGE);
+
+typedef struct _DEVADVPROP_INFO
+{
+    HWND hWndGeneralPage;
+    HWND hWndParent;
+    WNDPROC ParentOldWndProc;
+    HICON hDevIcon;
+
+    HDEVINFO DeviceInfoSet;
+    SP_DEVINFO_DATA DeviceInfoData;
+    HDEVINFO CurrentDeviceInfoSet;
+    SP_DEVINFO_DATA CurrentDeviceInfoData;
+    DEVINST ParentDevInst;
+    HMACHINE hMachine;
+    LPCWSTR lpMachineName;
+
+    HINSTANCE hComCtl32;
+    PCREATEPROPERTYSHEETPAGEW pCreatePropertySheetPageW;
+    PDESTROYPROPERTYSHEETPAGE pDestroyPropertySheetPage;
+
+    DWORD PropertySheetType;
+    DWORD nDevPropSheets;
+    HPROPSHEETPAGE *DevPropSheets;
+
+    union
+    {
+        UINT Flags;
+        struct
+        {
+            UINT Extended : 1;
+            UINT FreeDevPropSheets : 1;
+            UINT CanDisable : 1;
+            UINT DeviceStarted : 1;
+            UINT DeviceUsageChanged : 1;
+            UINT CloseDevInst : 1;
+            UINT IsAdmin : 1;
+            UINT DoDefaultDevAction : 1;
+            UINT PageInitialized : 1;
+            UINT ShowRemotePages : 1;
+            UINT HasDriverPage : 1;
+            UINT HasResourcePage : 1;
+            UINT HasPowerPage : 1;
+        };
+    };
+
+    WCHAR szDevName[255];
+    WCHAR szTemp[255];
+    WCHAR szDeviceID[1];
+    /* struct may be dynamically expanded here! */
+} DEVADVPROP_INFO, *PDEVADVPROP_INFO;
+
+
+typedef struct _ENUMDRIVERFILES_CONTEXT
+{
+    HWND hDriversListView;
+    UINT nCount;
+} ENUMDRIVERFILES_CONTEXT, *PENUMDRIVERFILES_CONTEXT;
+
+#define PM_INITIALIZE (WM_APP + 0x101)
+
+
+
+/* HWRESOURCE.C */
+
+INT_PTR
+CALLBACK
+ResourcesProcDriverDlgProc(IN HWND hwndDlg,
+                     IN UINT uMsg,
+                     IN WPARAM wParam,
+                     IN LPARAM lParam);
+
+/* ADVPROP.C */
+
+INT_PTR
+DisplayDeviceAdvancedProperties(IN HWND hWndParent,
+                                IN LPCWSTR lpDeviceID  OPTIONAL,
+                                IN HDEVINFO DeviceInfoSet,
+                                IN PSP_DEVINFO_DATA DeviceInfoData,
+                                IN HINSTANCE hComCtl32,
+                                IN LPCWSTR lpMachineName,
+                                IN DWORD dwFlags);
+
+/* DEVPRBLM.C */
+
+BOOL
+ShowDeviceProblemWizard(IN HWND hWndParent  OPTIONAL,
+                        IN HDEVINFO hDevInfo,
+                        IN PSP_DEVINFO_DATA DevInfoData,
+                        IN HMACHINE hMachine  OPTIONAL);
+
+/* MISC.C */
+
+
+INT
+LengthOfStrResource(IN HINSTANCE hInst,
+                    IN UINT uID);
+
+DWORD
+LoadAndFormatString(IN HINSTANCE hInstance,
+                    IN UINT uID,
+                    OUT LPWSTR *lpTarget,
+                    ...);
+
+DWORD
+LoadAndFormatStringsCat(IN HINSTANCE hInstance,
+                        IN UINT *uID,
+                        IN UINT nIDs,
+                        OUT LPWSTR *lpTarget,
+                        ...);
+
+LPARAM
+ListViewGetSelectedItemData(IN HWND hwnd);
+
+LPWSTR
+ConvertMultiByteToUnicode(IN LPCSTR lpMultiByteStr,
+                          IN UINT uCodePage);
+
+HINSTANCE
+LoadAndInitComctl32(VOID);
+
+BOOL
+GetDeviceManufacturerString(IN HDEVINFO DeviceInfoSet,
+                            IN PSP_DEVINFO_DATA DeviceInfoData,
+                            OUT LPWSTR szBuffer,
+                            IN DWORD BufferSize);
+
+BOOL
+GetDeviceLocationString(IN HDEVINFO DeviceInfoSet,
+                        IN PSP_DEVINFO_DATA DeviceInfoData,
+                        IN DEVINST dnParentDevInst  OPTIONAL,
+                        OUT LPWSTR szBuffer,
+                        IN DWORD BufferSize);
+
+BOOL
+GetDeviceStatusString(IN DEVINST DevInst,
+                      IN HMACHINE hMachine,
+                      OUT LPWSTR szBuffer,
+                      IN DWORD BufferSize);
+
+BOOL
+GetDriverProviderString(IN HDEVINFO DeviceInfoSet,
+                        IN PSP_DEVINFO_DATA DeviceInfoData,
+                        OUT LPWSTR szBuffer,
+                        IN DWORD BufferSize);
+
+BOOL
+GetDriverVersionString(IN HDEVINFO DeviceInfoSet,
+                       IN PSP_DEVINFO_DATA DeviceInfoData,
+                       OUT LPWSTR szBuffer,
+                       IN DWORD BufferSize);
+
+BOOL
+GetDriverDateString(IN HDEVINFO DeviceInfoSet,
+                    IN PSP_DEVINFO_DATA DeviceInfoData,
+                    OUT LPWSTR szBuffer,
+                    IN DWORD BufferSize);
+
+BOOL
+IsDeviceHidden(IN DEVINST DevInst,
+               IN HMACHINE hMachine,
+               OUT BOOL *IsHidden);
+
+BOOL
+IsDriverInstalled(IN DEVINST DevInst,
+                  IN HMACHINE hMachine,
+                  OUT BOOL *Installed);
+
+BOOL
+CanDisableDevice(IN DEVINST DevInst,
+                 IN HMACHINE hMachine,
+                 OUT BOOL *CanDisable);
+
+BOOL
+IsDeviceStarted(IN DEVINST DevInst,
+                IN HMACHINE hMachine,
+                OUT BOOL *IsStarted);
+
+BOOL
+EnableDevice(IN HDEVINFO DeviceInfoSet,
+             IN PSP_DEVINFO_DATA DevInfoData  OPTIONAL,
+             IN BOOL bEnable,
+             IN DWORD HardwareProfile  OPTIONAL,
+             OUT BOOL *bNeedReboot  OPTIONAL);
+
+BOOL
+GetDeviceTypeString(IN PSP_DEVINFO_DATA DeviceInfoData,
+                    OUT LPWSTR szBuffer,
+                    IN DWORD BufferSize);
+
+BOOL
+GetDeviceDescriptionString(IN HDEVINFO DeviceInfoSet,
+                           IN PSP_DEVINFO_DATA DeviceInfoData,
+                           OUT LPWSTR szBuffer,
+                           IN DWORD BufferSize);
+
+BOOL
+FindCurrentDriver(IN HDEVINFO DeviceInfoSet,
+                  IN PSP_DEVINFO_DATA DeviceInfoData,
+                  OUT PSP_DRVINFO_DATA DriverInfoData);
+
+#endif /* __DEVMGR_H */
diff --git a/reactos/dll/win32/devmgr_new/resource.h b/reactos/dll/win32/devmgr_new/resource.h
new file mode 100644 (file)
index 0000000..fcf480d
--- /dev/null
@@ -0,0 +1,156 @@
+#pragma once
+
+#define IDI_DEVMGR 100
+
+#define IDD_HARDWARE        100
+#define IDD_DEVICEGENERAL   101
+#define IDD_DEVICEDRIVER    102
+#define IDD_DEVICERESOURCES 103
+#define IDD_DRIVERDETAILS   104
+#define IDD_DEVICEDETAILS   105
+#define IDD_DEVICEPOWER     106
+
+#define IDC_DEVICON          0x57B
+#define IDC_DEVNAME          0x57C
+#define IDC_DEVTYPE          0x57D
+#define IDC_DEVMANUFACTURER  0x57E
+#define IDC_DEVLOCATION      0x57F
+#define IDC_DEVSTATUSGROUP   0x580
+#define IDC_DEVSTATUS        0x581
+#define IDC_DEVUSAGE         0x582
+#define IDC_DEVICES          0x583
+#define IDC_LV_DEVICES       0x584
+#define IDC_PROPERTIESGROUP  0x585
+#define IDC_MANUFACTURER     0x587
+#define IDC_LOCATION         0x588
+#define IDC_STATUS           0x586
+#define IDC_TROUBLESHOOT     0x589
+#define IDC_PROPERTIES       0x58A
+#define IDC_DEVUSAGELABEL    0x58B
+#define IDC_DEVPROBLEM       0x58C
+#define IDC_DRVPROVIDER      0x58D
+#define IDC_DRVDATE          0x58E
+#define IDC_DRVVERSION       0x58F
+#define IDC_DIGITALSIGNER    0x590
+#define IDC_DRIVERDETAILS    0x591
+#define IDC_DRIVERFILES      0x592
+#define IDC_FILEPROVIDER     0x593
+#define IDC_FILEVERSION      0x594
+#define IDC_FILECOPYRIGHT    0x595
+#define IDC_DETAILSPROPNAME  0x596
+#define IDC_DETAILSPROPVALUE 0x597
+#define IDC_UPDATEDRIVER     0x598
+#define IDC_DRIVERRESOURCES  0x599
+
+#define IDS_NAME                  0x100
+#define IDS_TYPE                  0x101
+#define IDS_MANUFACTURER          0x102
+#define IDS_LOCATION              0x103
+#define IDS_STATUS                0x104
+#define IDS_UNKNOWN               0x105
+#define IDS_LOCATIONSTR           0x106
+#define IDS_DEVCODE               0x107
+#define IDS_DEVCODE2              0x108
+#define IDS_ENABLEDEVICE          0x109
+#define IDS_DISABLEDEVICE         0x10A
+#define IDS_UNKNOWNDEVICE         0x10B
+#define IDS_NODRIVERLOADED        0x10C
+#define IDS_DEVONPARENT           0x10D
+#define IDS_TROUBLESHOOTDEV       0x10E
+#define IDS_ENABLEDEV             0x10F
+#define IDS_PROPERTIES            0x110
+#define IDS_UPDATEDRV             0x111
+#define IDS_REINSTALLDRV          0x112
+#define IDS_REBOOT                0x113
+#define IDS_NOTAVAILABLE          0x114
+#define IDS_NOTDIGITALLYSIGNED    0x115
+#define IDS_NODRIVERS             0x116
+#define IDS_RESOURCE_COLUMN       0x117
+#define IDS_SETTING_COLUMN        0x118
+#define IDS_RESOURCE_MEMORY_RANGE 0x119
+#define IDS_RESOURCE_INTERRUPT    0x11A
+#define IDS_RESOURCE_DMA          0x11B
+#define IDS_RESOURCE_PORT         0x11C
+
+#define IDS_DEV_NO_PROBLEM                 0x200
+#define IDS_DEV_NOT_CONFIGURED             0x201
+#define IDS_DEV_DEVLOADER_FAILED           0x202
+#define IDS_DEV_DEVLOADER_FAILED2          0x203
+#define IDS_DEV_OUT_OF_MEMORY              0x204
+#define IDS_DEV_ENTRY_IS_WRONG_TYPE        0x205
+#define IDS_DEV_LACKED_ARBITRATOR          0x206
+#define IDS_DEV_BOOT_CONFIG_CONFLICT       0x207
+#define IDS_DEV_FAILED_FILTER              0x208
+#define IDS_DEV_DEVLOADER_NOT_FOUND        0x209
+#define IDS_DEV_DEVLOADER_NOT_FOUND2       0x20A
+#define IDS_DEV_DEVLOADER_NOT_FOUND3       0x20B
+#define IDS_DEV_INVALID_DATA               0x20C
+#define IDS_DEV_INVALID_DATA2              0x20D
+#define IDS_DEV_FAILED_START               0x20E
+#define IDS_DEV_LIAR                       0x20F
+#define IDS_DEV_NORMAL_CONFLICT            0x210
+#define IDS_DEV_NOT_VERIFIED               0x211
+#define IDS_DEV_NEED_RESTART               0x212
+#define IDS_DEV_REENUMERATION              0x213
+#define IDS_DEV_PARTIAL_LOG_CONF           0x214
+#define IDS_DEV_UNKNOWN_RESOURCE           0x215
+#define IDS_DEV_REINSTALL                  0x216
+#define IDS_DEV_REGISTRY                   0x217
+#define IDS_DEV_WILL_BE_REMOVED            0x218
+#define IDS_DEV_DISABLED                   0x219
+#define IDS_DEV_DISABLED2                  0x21A
+#define IDS_DEV_DEVLOADER_NOT_READY        0x21B
+#define IDS_DEV_DEVLOADER_NOT_READY2       0x21C
+#define IDS_DEV_DEVLOADER_NOT_READY3       0x21D
+#define IDS_DEV_DEVICE_NOT_THERE           0x21E
+#define IDS_DEV_MOVED                      0x21F
+#define IDS_DEV_TOO_EARLY                  0x220
+#define IDS_DEV_NO_VALID_LOG_CONF          0x221
+#define IDS_DEV_FAILED_INSTALL             0x222
+#define IDS_DEV_HARDWARE_DISABLED          0x223
+#define IDS_DEV_CANT_SHARE_IRQ             0x224
+#define IDS_DEV_FAILED_ADD                 0x225
+#define IDS_DEV_DISABLED_SERVICE           0x226
+#define IDS_DEV_TRANSLATION_FAILED         0x227
+#define IDS_DEV_NO_SOFTCONFIG              0x228
+#define IDS_DEV_BIOS_TABLE                 0x229
+#define IDS_DEV_IRQ_TRANSLATION_FAILED     0x22A
+#define IDS_DEV_FAILED_DRIVER_ENTRY        0x22B
+#define IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD 0x22C
+#define IDS_DEV_DRIVER_FAILED_LOAD         0x22D
+#define IDS_DEV_DRIVER_SERVICE_KEY_INVALID 0x22E
+#define IDS_DEV_LEGACY_SERVICE_NO_DEVICES  0x22F
+#define IDS_DEV_DUPLICATE_DEVICE           0x230
+#define IDS_DEV_FAILED_POST_START          0x231
+#define IDS_DEV_HALTED                     0x232
+#define IDS_DEV_PHANTOM                    0x233
+#define IDS_DEV_SYSTEM_SHUTDOWN            0x234
+#define IDS_DEV_HELD_FOR_EJECT             0x235
+#define IDS_DEV_DRIVER_BLOCKED             0x236
+#define IDS_DEV_REGISTRY_TOO_LARGE         0x237
+#define IDS_DEV_SETPROPERTIES_FAILED       0x238
+
+#define IDS_PROP_DEVICEID           0x300
+#define IDS_PROP_HARDWAREIDS        0x301
+#define IDS_PROP_COMPATIBLEIDS      0x302
+#define IDS_PROP_MATCHINGDEVICEID   0x303
+#define IDS_PROP_SERVICE            0x304
+#define IDS_PROP_ENUMERATOR         0x305
+#define IDS_PROP_CAPABILITIES       0x306
+#define IDS_PROP_DEVNODEFLAGS       0x307
+#define IDS_PROP_CONFIGFLAGS        0x308
+#define IDS_PROP_CSCONFIGFLAGS      0x309
+#define IDS_PROP_EJECTIONRELATIONS  0x30A
+#define IDS_PROP_REMOVALRELATIONS   0x30B
+#define IDS_PROP_BUSRELATIONS       0x30C
+#define IDS_PROP_DEVUPPERFILTERS    0x30D
+#define IDS_PROP_DEVLOWERFILTERS    0x30E
+#define IDS_PROP_CLASSUPPERFILTERS  0x30F
+#define IDS_PROP_CLASSLOWERFILTERS  0x310
+#define IDS_PROP_CLASSINSTALLER     0x311
+#define IDS_PROP_CLASSCOINSTALLER   0x312
+#define IDS_PROP_DEVICECOINSTALLER  0x313
+#define IDS_PROP_FIRMWAREREVISION   0x314
+#define IDS_PROP_CURRENTPOWERSTATE  0x315
+#define IDS_PROP_POWERCAPABILITIES  0x316
+#define IDS_PROP_POWERSTATEMAPPINGS 0x317
diff --git a/reactos/dll/win32/devmgr_new/resources/devmgr.ico b/reactos/dll/win32/devmgr_new/resources/devmgr.ico
new file mode 100644 (file)
index 0000000..beb28a6
Binary files /dev/null and b/reactos/dll/win32/devmgr_new/resources/devmgr.ico differ
diff --git a/reactos/dll/win32/devmgr_new/stubs.c b/reactos/dll/win32/devmgr_new/stubs.c
new file mode 100644 (file)
index 0000000..7594f85
--- /dev/null
@@ -0,0 +1,257 @@
+/*
+ *
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS devmgr.dll
+ * FILE:            lib/devmgr/stubs.c
+ * PURPOSE:         devmgr.dll stubs
+ * PROGRAMMER:      Thomas Weidenmueller (w3seek@users.sourceforge.net)
+ * NOTES:           If you implement a function, remove it from this file
+ *
+ *                  Some helpful resources:
+ *                    http://support.microsoft.com/default.aspx?scid=kb;%5BLN%5D;815320
+ *                    http://www.jsiinc.com/SUBO/tip7400/rh7482.htm
+ *                    http://www.jsiinc.com/SUBM/tip6400/rh6490.htm
+ *
+ * UPDATE HISTORY:
+ *      04-04-2004  Created
+ */
+
+#include "precomp.h"
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceManager_ExecuteA
+ *
+ * DESCRIPTION
+ *   Starts the Device Manager
+ *
+ * ARGUMENTS
+ *   hWndParent:   Handle to the parent window
+ *   hInst:        Handle to the application instance
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   nCmdShow:      Specifies how the window should be shown
+ *
+ * RETURN VALUE
+ *   TRUE:  if no errors occured
+ *   FALSE: if the device manager could not be executed
+ *
+ * REVISIONS
+ *
+ * NOTE
+ *   - Win runs the device manager in a separate process, so hWndParent is somehow
+ *     obsolete.
+ *
+ * @unimplemented
+ */
+BOOL
+WINAPI
+DeviceManager_ExecuteA(HWND hWndParent,
+                       HINSTANCE hInst,
+                       LPCSTR lpMachineName,
+                       int nCmdShow)
+{
+    UNIMPLEMENTED;
+    return FALSE;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceManager_ExecuteW
+ *
+ * DESCRIPTION
+ *   Starts the Device Manager
+ *
+ * ARGUMENTS
+ *   hWndParent:   Handle to the parent window
+ *   hInst:        Handle to the application instance
+ *   lpMachineName: Machine Name, NULL is the local machine
+ *   nCmdShow:      Specifies how the window should be shown
+ *
+ * RETURN VALUE
+ *   TRUE:  if no errors occured
+ *   FALSE: if the device manager could not be executed
+ *
+ * REVISIONS
+ *
+ * NOTE
+ *   - Win runs the device manager in a separate process, so hWndParent is somehow
+ *     obsolete.
+ *
+ * @unimplemented
+ */
+BOOL
+WINAPI
+DeviceManager_ExecuteW(HWND hWndParent,
+                       HINSTANCE hInst,
+                       LPCWSTR lpMachineName,
+                       int nCmdShow)
+{
+    UNIMPLEMENTED;
+    return FALSE;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceProblemWizard_RunDLLA
+ *
+ * DESCRIPTION
+ *   Calls the device problem wizard
+ *
+ * ARGUMENTS
+ *   hWndParent:  Handle to the parent window
+ *   hInst:       Handle to the application instance
+ *   lpDeviceCmd: A command that includes the DeviceID of the properties to be shown,
+ *                also see NOTEs
+ *   nCmdShow:    Specifies how the window should be shown
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ * NOTE
+ *   - Win XP exports this function as DeviceProblenWizard_RunDLLA, apparently it's
+ *     a typo so we additionally export an alias function
+ *   - lpDeviceCmd is a string in the form of "/MachineName MACHINE /DeviceID DEVICEPATH"
+ *     (/MachineName is optional). This function only parses this string and eventually
+ *     calls DeviceProperties().
+ *
+ * @unimplemented
+ */
+VOID
+WINAPI
+DeviceProblemWizard_RunDLLA(HWND hWndParent,
+                            HINSTANCE hInst,
+                            LPCSTR lpDeviceCmd,
+                            int nCmdShow)
+{
+    UNIMPLEMENTED;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceProblemWizard_RunDLLW
+ *
+ * DESCRIPTION
+ *   Calls the device problem wizard
+ *
+ * ARGUMENTS
+ *   hWndParent:  Handle to the parent window
+ *   hInst:       Handle to the application instance
+ *   lpDeviceCmd: A command that includes the DeviceID of the properties to be shown,
+ *                also see NOTEs
+ *   nCmdShow:    Specifies how the window should be shown
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ * NOTE
+ *   - Win XP exports this function as DeviceProblenWizard_RunDLLA, apparently it's
+ *     a typo so we additionally export an alias function
+ *   - lpDeviceCmd is a string in the form of "/MachineName MACHINE /DeviceID DEVICEPATH"
+ *     (/MachineName is optional). This function only parses this string and eventually
+ *     calls DeviceProperties().
+ *
+ * @unimplemented
+ */
+VOID
+WINAPI
+DeviceProblemWizard_RunDLLW(HWND hWndParent,
+                            HINSTANCE hInst,
+                            LPCWSTR lpDeviceCmd,
+                            int nCmdShow)
+{
+    UNIMPLEMENTED;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceManagerPrintA
+ *
+ * DESCRIPTION
+ *   Calls the device problem wizard
+ *
+ * ARGUMENTS
+ *   lpMachineName:  Machine Name, NULL is the local machine
+ *   lpPrinter:      Filename of the printer where it should be printed on
+ *   nPrintMode:     Specifies what kind of information is to be printed
+ *                     DEV_PRINT_ABSTRACT: Prints an abstract of system information, the parameters
+ *                                         uNumberOfGuids, Guids are ignored
+ *                     DEV_PRINT_SELECTED: Prints information about the devices listed in Guids
+ *                     DEV_PRINT_ALL:      Prints an abstract of system information and all
+ *                                         system devices
+ *   uNumberOfGuids: Numbers of guids in the Guids array, this parameter is ignored unless
+ *                   nPrintMode is DEV_PRINT_SELECTED
+ *   lpGuids:        Array of device guids, this parameter is ignored unless
+ *                   nPrintMode is DEV_PRINT_SELECTED
+ *
+ * RETURN VALUE
+ *   TRUE:  if no errors occured
+ *   FALSE: if errors occured
+ *
+ * REVISIONS
+ *
+ * NOTE
+ *
+ * @unimplemented
+ */
+BOOL
+WINAPI
+DeviceManagerPrintA(LPCSTR lpMachineName,
+                    LPCSTR lpPrinter,
+                    int nPrintMode,
+                    UINT uNumberOfGuids,
+                    LPGUID lpGuids)
+{
+    UNIMPLEMENTED;
+    return FALSE;
+}
+
+
+/***************************************************************************
+ * NAME                                                         EXPORTED
+ *      DeviceManagerPrintW
+ *
+ * DESCRIPTION
+ *   Calls the device problem wizard
+ *
+ * ARGUMENTS
+ *   lpMachineName:  Machine Name, NULL is the local machine
+ *   lpPrinter:      Filename of the printer where it should be printed on
+ *   nPrintMode:     Specifies what kind of information is to be printed
+ *                     DEV_PRINT_ABSTRACT: Prints an abstract of system information, the parameters
+ *                                         uNumberOfGuids, Guids are ignored
+ *                     DEV_PRINT_SELECTED: Prints information about the devices listed in Guids
+ *                     DEV_PRINT_ALL:      Prints an abstract of system information and all
+ *                                         system devices
+ *   uNumberOfGuids: Numbers of guids in the Guids array, this parameter is ignored unless
+ *                   nPrintMode is DEV_PRINT_SELECTED
+ *   lpGuids:        Array of device guids, this parameter is ignored unless
+ *                   nPrintMode is DEV_PRINT_SELECTED
+ *
+ * RETURN VALUE
+ *   TRUE:  if no errors occured
+ *   FALSE: if errors occured
+ *
+ * REVISIONS
+ *
+ * NOTE
+ *
+ * @unimplemented
+ */
+BOOL
+WINAPI
+DeviceManagerPrintW(LPCWSTR lpMachineName,
+                    LPCWSTR lpPrinter,
+                    int nPrintMode,
+                    UINT uNumberOfGuids,
+                    LPGUID lpGuids)
+{
+    UNIMPLEMENTED;
+    return FALSE;
+}