[CMAKE]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 16 Nov 2010 13:43:39 +0000 (13:43 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 16 Nov 2010 13:43:39 +0000 (13:43 +0000)
Sync trunk (rr49606)

svn path=/branches/cmake-bringup/; revision=49607

324 files changed:
base/applications/calc/lang/sk-SK.rc
base/applications/network/ipconfig/ipconfig.c
base/applications/network/tracert/tracert.c
base/applications/rapps/CMakeLists.txt
base/applications/rapps/rapps/7zip.txt
base/applications/rapps/rapps/abyss.txt
base/applications/rapps/rapps/comctl32ocx.txt
base/applications/rapps/rapps/dosblaster.txt
base/applications/rapps/rapps/fap.txt
base/applications/rapps/rapps/firefox36.txt
base/applications/rapps/rapps/go-oo.txt
base/applications/rapps/rapps/kdewin.txt
base/applications/rapps/rapps/mirandaim.txt
base/applications/rapps/rapps/mirc.txt
base/applications/rapps/rapps/mono2.txt
base/applications/rapps/rapps/mpc.txt
base/applications/rapps/rapps/net11.txt
base/applications/rapps/rapps/net20.txt
base/applications/rapps/rapps/net20sp2.txt
base/applications/rapps/rapps/python.txt
base/applications/rapps/rapps/remood.txt
base/applications/rapps/rapps/scite.txt
base/applications/rapps/rapps/seamonkey.txt
base/applications/rapps/rapps/steam.txt
base/applications/rapps/rapps/superfinder.txt
base/applications/rapps/rapps/tahoma.txt
base/applications/rapps/rapps/thunderbird.txt
base/applications/rapps/rapps/ultravnc.txt
base/applications/rapps/rapps/utorrent.txt
base/applications/rapps/rapps/vlc.txt
base/applications/regedit/CMakeLists.txt
base/applications/regedit/childwnd.c
base/applications/regedit/edit.c
base/applications/regedit/error.c [new file with mode: 0644]
base/applications/regedit/framewnd.c
base/applications/regedit/lang/bg-BG.rc
base/applications/regedit/lang/cs-CZ.rc
base/applications/regedit/lang/de-DE.rc
base/applications/regedit/lang/el-GR.rc
base/applications/regedit/lang/en-US.rc
base/applications/regedit/lang/es-ES.rc
base/applications/regedit/lang/fr-FR.rc
base/applications/regedit/lang/hu-HU.rc
base/applications/regedit/lang/id-ID.rc
base/applications/regedit/lang/it-IT.rc
base/applications/regedit/lang/ja-JP.rc
base/applications/regedit/lang/ko-KR.rc
base/applications/regedit/lang/nl-NL.rc
base/applications/regedit/lang/no-NO.rc
base/applications/regedit/lang/pl-PL.rc
base/applications/regedit/lang/pt-BR.rc
base/applications/regedit/lang/pt-PT.rc
base/applications/regedit/lang/ru-RU.rc
base/applications/regedit/lang/sk-SK.rc
base/applications/regedit/lang/sl-SI.rc
base/applications/regedit/lang/sv-SE.rc
base/applications/regedit/lang/th-TH.rc
base/applications/regedit/lang/uk-UA.rc
base/applications/regedit/lang/zh-CN.rc
base/applications/regedit/listview.c
base/applications/regedit/main.h
base/applications/regedit/resource.h
base/applications/regedit/treeview.c
base/applications/taskmgr/lang/ru-RU.rc
base/setup/usetup/lang/sk-SK.h
base/shell/cmd/lang/sk-SK.rc
base/system/format/format.c
base/system/format/lang/sk-SK.rc
boot/freeldr/freeldr/debug.c
dll/directx/ksuser/ksuser.c
dll/ntdll/ldr/utils.c
dll/win32/advapi32/sec/lsa.c
dll/win32/kernel32/except/except.c
dll/win32/netcfgx/tcpipconf_notify.c
dll/win32/setupapi/cfgmgr.c
dll/win32/shell32/drive.c
dll/win32/shlwapi/CMakeLists.txt
dll/win32/user32/windows/hook.c
dll/win32/wdmaud.drv/legacy.c
dll/win32/wdmaud.drv/mmixer.c
dll/win32/wdmaud.drv/wdmaud.c
drivers/ksfilter/ks/irp.c
drivers/ksfilter/ks/misc.c
drivers/ksfilter/ks/topology.c
drivers/storage/class/disk/disk.c
drivers/wdm/audio/backpln/portcls/guids.cpp
drivers/wdm/audio/backpln/portcls/interfaces.hpp
drivers/wdm/audio/backpln/portcls/interrupt.cpp
drivers/wdm/audio/backpln/portcls/irpstream.cpp
drivers/wdm/audio/backpln/portcls/miniport_dmus.cpp
drivers/wdm/audio/backpln/portcls/pin_dmus.cpp
drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp
drivers/wdm/audio/backpln/portcls/pin_wavepci.cpp
drivers/wdm/audio/backpln/portcls/pin_wavert.cpp
drivers/wdm/audio/backpln/portcls/port_topology.cpp
drivers/wdm/audio/backpln/portcls/port_wavecyclic.cpp
drivers/wdm/audio/backpln/portcls/port_wavepci.cpp
drivers/wdm/audio/backpln/portcls/private.hpp
drivers/wdm/audio/legacy/wdmaud/control.c
drivers/wdm/audio/legacy/wdmaud/interface.h
drivers/wdm/audio/legacy/wdmaud/mmixer.c
drivers/wdm/audio/legacy/wdmaud/wdmaud.h
drivers/wdm/audio/sysaudio/pin.c
hal/halx86/generic/cmos.c
hal/halx86/generic/dma.c
hal/halx86/generic/halinit.c
hal/halx86/generic/legacy/bus/libpcidata.a [new file with mode: 0644]
hal/halx86/generic/legacy/bus/pcibus.c
hal/halx86/generic/legacy/bus/pcidata.c
hal/halx86/generic/legacy/bussupp.c
hal/halx86/generic/legacy/halpcat.c
hal/halx86/generic/memory.c
hal/halx86/generic/misc.c
hal/halx86/generic/timer.c
hal/halx86/generic/usage.c
hal/halx86/include/halp.h
include/ddk/dmusicks.h
include/ddk/dmusprop.h [new file with mode: 0644]
include/ddk/portcls.h
include/ndk/inline_ntcurrentteb.h [new file with mode: 0644]
include/ndk/psfuncs.h
include/psdk/ks.h
include/psdk/ksmedia.h
include/psdk/ntsecapi.h
include/psdk/winnt.h
include/reactos/libs/sound/mmebuddy.h
include/reactos/win32k/callback.h
lib/drivers/sound/mmebuddy/capabilities.c
lib/drivers/sound/mmebuddy/midi/midMessage.c
lib/drivers/sound/mmebuddy/midi/modMessage.c
lib/drivers/sound/mmebuddy/mixer/mxdMessage.c
lib/drivers/sound/mmebuddy/mmewrap.c
lib/drivers/sound/mmebuddy/wave/widMessage.c
lib/drivers/sound/mmebuddy/wave/wodMessage.c
lib/drivers/sound/mmixer/CMakeLists.txt
lib/drivers/sound/mmixer/controls.c
lib/drivers/sound/mmixer/midi.c [new file with mode: 0644]
lib/drivers/sound/mmixer/mixer.c
lib/drivers/sound/mmixer/mmixer.h
lib/drivers/sound/mmixer/priv.h
lib/drivers/sound/mmixer/sup.c
lib/drivers/sound/mmixer/topology.c
lib/drivers/sound/mmixer/wave.c
lib/rtl/sprintf.c
lib/rtl/swprintf.c
lib/sdk/crt/CMakeLists.txt
lib/sdk/crt/conio/cprintf.c
lib/sdk/crt/mbstring/mbstrlen.c
lib/sdk/crt/misc/crtmain.c [deleted file]
lib/sdk/crt/printf/_cprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/_snprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/_snwprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/_vcprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/_vsnprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/_vsnwprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/fprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/fwprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/printf.c [new file with mode: 0644]
lib/sdk/crt/printf/sprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/streamout.c [new file with mode: 0644]
lib/sdk/crt/printf/swprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/vfprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/vfwprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/vprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/vsprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/vswprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/vwprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/wprintf.c [new file with mode: 0644]
lib/sdk/crt/printf/wstreamout.c [new file with mode: 0644]
lib/sdk/crt/stdio/file.c
lib/sdk/crt/stdio/lnx_sprintf.c
lib/sdk/crt/stdio/lock_file.c [new file with mode: 0644]
lib/sdk/crt/string/wcs.c
ntoskrnl/cache/cachesub.c [new file with mode: 0644]
ntoskrnl/cache/copysup.c [new file with mode: 0644]
ntoskrnl/cache/fssup.c [new file with mode: 0644]
ntoskrnl/cache/lazyrite.c [new file with mode: 0644]
ntoskrnl/cache/logsup.c [new file with mode: 0644]
ntoskrnl/cache/mdlsup.c [new file with mode: 0644]
ntoskrnl/cache/newcc.h [new file with mode: 0644]
ntoskrnl/cache/pinsup.c [new file with mode: 0644]
ntoskrnl/cache/section/data.c [new file with mode: 0644]
ntoskrnl/cache/section/fault.c [new file with mode: 0644]
ntoskrnl/cache/section/io.c [new file with mode: 0644]
ntoskrnl/cache/section/newmm.h [new file with mode: 0644]
ntoskrnl/cache/section/reqtools.c [new file with mode: 0644]
ntoskrnl/cache/section/sptab.c [new file with mode: 0644]
ntoskrnl/cache/section/swapout.c [new file with mode: 0644]
ntoskrnl/cc/cacheman.c
ntoskrnl/cc/copy.c
ntoskrnl/cc/view.c
ntoskrnl/config/cmalloc.c
ntoskrnl/config/cmboot.c
ntoskrnl/config/cmconfig.c
ntoskrnl/config/cmcontrl.c
ntoskrnl/config/cmdata.c
ntoskrnl/config/cmdelay.c
ntoskrnl/config/cmhook.c
ntoskrnl/config/cmkcbncb.c
ntoskrnl/config/cmse.c
ntoskrnl/config/cmsysini.c
ntoskrnl/ex/handle.c
ntoskrnl/ex/hdlsterm.c
ntoskrnl/ex/init.c
ntoskrnl/ex/lookas.c
ntoskrnl/ex/pushlock.c
ntoskrnl/ex/xipdisp.c
ntoskrnl/fsrtl/faulttol.c
ntoskrnl/fsrtl/fsrtlpc.c
ntoskrnl/inbv/inbv.c
ntoskrnl/include/internal/i386/mm.h
ntoskrnl/include/internal/ke.h
ntoskrnl/include/internal/mm.h
ntoskrnl/include/internal/ps.h
ntoskrnl/io/iomgr/arcname.c
ntoskrnl/io/iomgr/driver.c
ntoskrnl/io/iomgr/ramdisk.c
ntoskrnl/io/iomgr/rawfs.c
ntoskrnl/io/pnpmgr/pnpinit.c
ntoskrnl/io/pnpmgr/pnpmgr.c
ntoskrnl/kd/kdinit.c
ntoskrnl/kd/kdio.c
ntoskrnl/kd/kdmain.c
ntoskrnl/kd64/kdinit.c
ntoskrnl/kdbg/kdb.c
ntoskrnl/ke/config.c
ntoskrnl/ke/dpc.c
ntoskrnl/ke/freeldr.c
ntoskrnl/ke/i386/cpu.c
ntoskrnl/ke/i386/ctxswitch.S
ntoskrnl/ke/i386/kiinit.c
ntoskrnl/ke/i386/mtrr.c
ntoskrnl/ke/i386/patpge.c
ntoskrnl/ke/i386/thrdini.c
ntoskrnl/ke/krnlinit.c
ntoskrnl/ke/thrdschd.c
ntoskrnl/ke/wait.c
ntoskrnl/lpc/port.c
ntoskrnl/mm/ARM3/contmem.c
ntoskrnl/mm/ARM3/expool.c
ntoskrnl/mm/ARM3/i386/init.c
ntoskrnl/mm/ARM3/largepag.c
ntoskrnl/mm/ARM3/mdlsup.c
ntoskrnl/mm/ARM3/miarm.h
ntoskrnl/mm/ARM3/mminit.c
ntoskrnl/mm/ARM3/pagfault.c
ntoskrnl/mm/ARM3/pfnlist.c
ntoskrnl/mm/ARM3/pool.c
ntoskrnl/mm/ARM3/procsup.c
ntoskrnl/mm/ARM3/section.c
ntoskrnl/mm/ARM3/sysldr.c
ntoskrnl/mm/ARM3/syspte.c
ntoskrnl/mm/ARM3/virtual.c
ntoskrnl/mm/ARM3/zeropage.c
ntoskrnl/mm/anonmem.c
ntoskrnl/mm/freelist.c
ntoskrnl/mm/i386/page.c
ntoskrnl/mm/marea.c
ntoskrnl/mm/mmfault.c
ntoskrnl/mm/mminit.c
ntoskrnl/mm/pagefile.c
ntoskrnl/mm/rmap.c
ntoskrnl/mm/section.c
ntoskrnl/ntoskrnl_i386.lnk
ntoskrnl/ob/obname.c
ntoskrnl/ob/obsdcach.c
ntoskrnl/po/poshtdwn.c
ntoskrnl/po/power.c
ntoskrnl/ps/job.c
ntoskrnl/ps/kill.c
ntoskrnl/ps/process.c
ntoskrnl/ps/psmgr.c
ntoskrnl/ps/quota.c
ntoskrnl/se/semgr.c
ntoskrnl/vdm/vdmmain.c
subsystems/win32/win32k/eng/bitblt.c
subsystems/win32/win32k/eng/device.c
subsystems/win32/win32k/eng/ldevobj.c
subsystems/win32/win32k/eng/pdevobj.c
subsystems/win32/win32k/eng/xlate.c
subsystems/win32/win32k/include/accelerator.h
subsystems/win32/win32k/include/dc.h
subsystems/win32/win32k/include/desktop.h
subsystems/win32/win32k/include/device.h
subsystems/win32/win32k/include/gdiobj.h
subsystems/win32/win32k/include/guicheck.h
subsystems/win32/win32k/include/hotkey.h
subsystems/win32/win32k/include/input.h
subsystems/win32/win32k/include/inteng.h
subsystems/win32/win32k/include/ldevobj.h
subsystems/win32/win32k/include/menu.h
subsystems/win32/win32k/include/monitor.h
subsystems/win32/win32k/include/msgqueue.h
subsystems/win32/win32k/include/ntuser.h
subsystems/win32/win32k/include/palette.h
subsystems/win32/win32k/include/pdevobj.h
subsystems/win32/win32k/include/timer.h
subsystems/win32/win32k/include/win32kp.h
subsystems/win32/win32k/include/window.h
subsystems/win32/win32k/include/winsta.h
subsystems/win32/win32k/include/xlateobj.h
subsystems/win32/win32k/main/dllmain.c
subsystems/win32/win32k/ntuser/accelerator.c
subsystems/win32/win32k/ntuser/callback.c
subsystems/win32/win32k/ntuser/cursoricon.c
subsystems/win32/win32k/ntuser/desktop.c
subsystems/win32/win32k/ntuser/display.c
subsystems/win32/win32k/ntuser/event.c
subsystems/win32/win32k/ntuser/guicheck.c
subsystems/win32/win32k/ntuser/hook.c
subsystems/win32/win32k/ntuser/hotkey.c
subsystems/win32/win32k/ntuser/input.c
subsystems/win32/win32k/ntuser/keyboard.c
subsystems/win32/win32k/ntuser/menu.c
subsystems/win32/win32k/ntuser/message.c
subsystems/win32/win32k/ntuser/monitor.c
subsystems/win32/win32k/ntuser/msgqueue.c
subsystems/win32/win32k/ntuser/ntuser.c
subsystems/win32/win32k/ntuser/timer.c
subsystems/win32/win32k/ntuser/window.c
subsystems/win32/win32k/ntuser/winsta.c
subsystems/win32/win32k/objects/dclife.c
subsystems/win32/win32k/objects/gdiobj.c
subsystems/win32/win32k/objects/palette.c

index 2bf46e6..41f9ca7 100644 (file)
@@ -1,6 +1,6 @@
 /* TRANSLATOR :  Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
  * DATE OF TR.:  30-01-2008
- * LAST CHANGE:  31-05-2010
+ * LAST CHANGE:  17-09-2010
  * ---------------------------------------
  * TODO:
  * pridanie navigaèných znaèiek "&" ?
@@ -545,9 +545,9 @@ END
 STRINGTABLE DISCARDABLE
 BEGIN
     IDS_ENERGY_15_C_CALORIES        "15 °C calories"
-    IDS_ENERGY_BTUS                 "British Thermal Units"
+    IDS_ENERGY_BTUS                 "Britské termálne jednotky"
     IDS_ENERGY_ERGS                 "Ergs"
-    IDS_ENERGY_EVS                  "Electron-Volts"
+    IDS_ENERGY_EVS                  "Elektron-Volty"
     IDS_ENERGY_FOOT_POUNDS          "Foot-Pounds"
     IDS_ENERGY_IT_CALORIES          "International Table calories"
     IDS_ENERGY_IT_KILOCALORIES      "International Table kilocalories"
@@ -593,7 +593,7 @@ BEGIN
     IDS_LENGTH_MILLIMETERS          "Milimetre"
     IDS_LENGTH_NAUTICAL_MILES       "Námorné míle"
     IDS_LENGTH_NIEU                 "Nieu"
-    IDS_LENGTH_PARSECS              "Parsecy"
+    IDS_LENGTH_PARSECS              "Parseky"
     IDS_LENGTH_PICAS                "Picas"
     IDS_LENGTH_RI_JAPAN             "Ri (Japonsko)"
     IDS_LENGTH_RI_KOREA             "Ri (Kórea)"
@@ -626,10 +626,10 @@ STRINGTABLE DISCARDABLE
 BEGIN
     IDS_PRESSURE_ATMOSPHERES        "Atmosféry"
     IDS_PRESSURE_BARS               "Bary"
-    IDS_PRESSURE_HECTOPASCALS       "Hektopascals"
-    IDS_PRESSURE_KILOPASCALS        "Kilopascals"
-    IDS_PRESSURE_MM_OF_MERCURY      "Millimeters of mercury"
-    IDS_PRESSURE_PASCALS            "Pascals"
+    IDS_PRESSURE_HECTOPASCALS       "Hektopascaly"
+    IDS_PRESSURE_KILOPASCALS        "Kilopascaly"
+    IDS_PRESSURE_MM_OF_MERCURY      "Milimetre ortuti"
+    IDS_PRESSURE_PASCALS            "Pascaly"
     IDS_PRESSURE_PSI                "Libry na \9atvorcový palec"
 END
 
index 3d9de7d..2657614 100644 (file)
 HINSTANCE hInstance;
 HANDLE ProcessHeap;
 
+int LoadStringAndOem(HINSTANCE hInst,
+               UINT uID,
+               LPTSTR szNode,
+               int Siz
+)      
+{
+  TCHAR szTmp[25];
+  int res = LoadString(hInst, uID, szTmp, sizeof(szTmp)); 
+  CharToOem(szTmp, szNode);
+  return(res);
+}
 
 LPTSTR GetNodeTypeName(UINT NodeType)
 {
@@ -33,27 +44,27 @@ LPTSTR GetNodeTypeName(UINT NodeType)
     switch (NodeType)
     {
         case 1:
-            if (!LoadString(hInstance, IDS_BCAST, szNode, sizeof(szNode)))
+            if (!LoadStringAndOem(hInstance, IDS_BCAST, szNode,  sizeof(szNode)))
                 return NULL;
             break;
 
         case 2:
-            if (!LoadString(hInstance, IDS_P2P, szNode, sizeof(szNode)))
+            if (!LoadStringAndOem(hInstance, IDS_P2P, szNode,  sizeof(szNode)))
                 return NULL;
             break;
 
         case 4:
-            if (!LoadString(hInstance, IDS_MIXED, szNode,  sizeof(szNode)))
+            if (!LoadStringAndOem(hInstance, IDS_MIXED, szNode,  sizeof(szNode)))
                 return NULL;
             break;
 
         case 8:
-            if (!LoadString(hInstance, IDS_HYBRID, szNode,  sizeof(szNode)))
+            if (!LoadStringAndOem(hInstance, IDS_HYBRID, szNode,  sizeof(szNode)))
                 return NULL;
             break;
 
         default :
-            if (!LoadString(hInstance, IDS_UNKNOWN, szNode,  sizeof(szNode)))
+            if (!LoadStringAndOem(hInstance, IDS_UNKNOWN, szNode,  sizeof(szNode)))
                 return NULL;
             break;
     }
@@ -69,42 +80,42 @@ LPTSTR GetInterfaceTypeName(UINT InterfaceType)
     switch (InterfaceType)
     {
         case MIB_IF_TYPE_OTHER:
-            if (!LoadString(hInstance, IDS_OTHER, szIntType, sizeof(szIntType)))
+            if (!LoadStringAndOem(hInstance, IDS_OTHER, szIntType, sizeof(szIntType)))
                 return NULL;
             break;
 
         case MIB_IF_TYPE_ETHERNET:
-            if (!LoadString(hInstance, IDS_ETH, szIntType, sizeof(szIntType)))
+            if (!LoadStringAndOem(hInstance, IDS_ETH, szIntType, sizeof(szIntType)))
                 return NULL;
             break;
 
         case MIB_IF_TYPE_TOKENRING:
-            if (!LoadString(hInstance, IDS_TOKEN, szIntType, sizeof(szIntType)))
+            if (!LoadStringAndOem(hInstance, IDS_TOKEN, szIntType, sizeof(szIntType)))
                 return NULL;
             break;
 
         case MIB_IF_TYPE_FDDI:
-            if (!LoadString(hInstance, IDS_FDDI, szIntType, sizeof(szIntType)))
+            if (!LoadStringAndOem(hInstance, IDS_FDDI, szIntType, sizeof(szIntType)))
                 return NULL;
             break;
 
         case MIB_IF_TYPE_PPP:
-            if (!LoadString(hInstance, IDS_PPP, szIntType, sizeof(szIntType)))
+            if (!LoadStringAndOem(hInstance, IDS_PPP, szIntType, sizeof(szIntType)))
                 return NULL;
             break;
 
         case MIB_IF_TYPE_LOOPBACK:
-            if (!LoadString(hInstance, IDS_LOOP, szIntType, sizeof(szIntType)))
+            if (!LoadStringAndOem(hInstance, IDS_LOOP, szIntType, sizeof(szIntType)))
                 return NULL;
             break;
 
         case MIB_IF_TYPE_SLIP:
-            if (!LoadString(hInstance, IDS_SLIP, szIntType, sizeof(szIntType)))
+            if (!LoadStringAndOem(hInstance, IDS_SLIP, szIntType, sizeof(szIntType)))
                 return NULL;
             break;
 
         default:
-            if (!LoadString(hInstance, IDS_UNKNOWN, szIntType, sizeof(szIntType)))
+            if (!LoadStringAndOem(hInstance, IDS_UNKNOWN, szIntType, sizeof(szIntType)))
                 return NULL;
             break;
     }
@@ -153,6 +164,7 @@ LPTSTR GetConnectionType(LPTSTR lpClass)
 {
     HKEY hKey = NULL;
     LPTSTR ConType = NULL;
+    LPTSTR ConTypeTmp = NULL;
     TCHAR Path[256];
     LPTSTR PrePath  = _T("SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\");
     LPTSTR PostPath = _T("\\Connection");
@@ -180,24 +192,34 @@ LPTSTR GetConnectionType(LPTSTR lpClass)
                            NULL,
                            &dwDataSize) == ERROR_SUCCESS)
         {
+            ConTypeTmp = (LPTSTR)HeapAlloc(ProcessHeap,
+                                        0,
+                                        dwDataSize);
+
             ConType = (LPTSTR)HeapAlloc(ProcessHeap,
                                         0,
                                         dwDataSize);
-            if (ConType)
+            if (ConType && ConTypeTmp)
             {
                 if(RegQueryValueEx(hKey,
                                    _T("Name"),
                                    NULL,
                                    &dwType,
-                                   (PBYTE)ConType,
+                                   (PBYTE)ConTypeTmp,
                                    &dwDataSize) != ERROR_SUCCESS)
                 {
                     HeapFree(ProcessHeap,
                              0,
                              ConType);
 
+                    HeapFree(ProcessHeap,
+                             0,
+                             ConTypeTmp);
+
                     ConType = NULL;
                 }
+
+                if (ConType) CharToOem(ConTypeTmp, ConType);
             }
         }
     }
@@ -674,7 +696,7 @@ VOID Usage(VOID)
             if (lpUsage == NULL)
                 return;
 
-            if (LoadString(hInstance,
+            if (LoadStringAndOem(hInstance,
                            IDS_USAGE,
                            lpUsage,
                            Size))
index 4ec2508..e3c1048 100644 (file)
@@ -422,7 +422,7 @@ AllocateBuffers(PAPPINFO pInfo)
 
     pInfo->RecvPacket = (PIPv4_HEADER)HeapAlloc(GetProcessHeap(),
                                                 0,
-                                                sizeof(IPv4_HEADER) + PACKET_SIZE);
+                                                MAX_PING_PACKET_SIZE);
     if (!pInfo->RecvPacket)
     {
         HeapFree(GetProcessHeap(),
index 0b87bcf..2efcded 100644 (file)
@@ -1,3 +1,6 @@
+
+set_unicode()
+
 list(APPEND SOURCE
     aboutdlg.c
     available.c
@@ -61,4 +64,4 @@ ENDMACRO (MACRO_ADD_MESSAGE_HEADERS)
 
 MACRO_ADD_MESSAGE_HEADERS(rappsmsg.mc)
 
-add_cab_target(rapps 1)
\ No newline at end of file
+add_cab_target(rapps 1)
index 93cdb8a..fb070f7 100644 (file)
@@ -17,5 +17,8 @@ Description = Tool zum Erstellen und Öffnen von 7zip, zip, tar, rar und andrern
 [Section.040a]
 Description = Utilidad para crear y abrir 7zip, zip, tar, rar y otros archivos comprimidos.
 
+[Section.0415]
+Description = Narzędzie do tworzenia i otwierania plików typu 7zip, zip, tar, i innych plików archiwizacyjnych.
+
 [Section.0422]
 Description = Утиліта для створення та відкриття 7zip, zip, tar, rar та інших архівних файлів.
index 49d505c..8959327 100644 (file)
@@ -14,5 +14,10 @@ CDPath = none
 [Section.0407]
 Description = Abyss Web Server ermöglicht es Webseiten auf Ihrem Computer zu hosten. Er unterstützt sichere SSL/TLS Verbindungen (HTTPS) sowie eine Vielfalt an Web Technologien. Er kann ebenfalls PHP, Perl, Python, ASP, ASP.NET, und Ruby on Rails Web Anwendungen ausführen, welche von Datenbanken, wie MySQL, SQLite, MS SQL Server, MS Access, oder Oracle unterstützt werden können.
 
+[Section.0415]
+Description = Abyss Web Server pozwala Ci na stworzenie serwera WWW na własnym komputerze. Ten program obsługuje zabezpieczone połączenia typu SSL/TLS (HTTPS) i wiele technologii Sieci.
+Może także uruchamiać zaawansowane aplikacje internetowe takie jak PHP, Perl, Python, ASP, ASP.NET, i Ruby on Rails.
+Mogą one zostać oparte o MySQL, SQLite, MS SQL Server, MS Access, lub Oracle.
+
 [Section.0422]
 Description = Abyss Web Server дозволить вам утримувати веб-сайти на вашому комп'ютері. Від підтримує безпечні SSL/TLS з'єднання (HTTPS) та великий ряд веб-технологій. Він також запускає PHP, Perl, Python, ASP, ASP.NET, та Ruby on Rails веб-додатки, які можуть підтримуватись такими базами даних, як MySQL, SQLite, MS SQL Server, MS Access, чи Oracle.
index a678a33..392e8fa 100644 (file)
@@ -21,7 +21,7 @@ Description = X es necesario para varias aplicaciones.
 
 [Section.0415]
 Licence = Nieznana
-Description = X jest używana przez część aplikacji.
+Description = Microsoft Visual Basic 6.0 Common Controls jest używany przez część aplikacji.
 
 [Section.0422]
 Licence = Невідома
index 3974dda..a499b7a 100644 (file)
@@ -17,5 +17,8 @@ Description = DosBlaster ist eine Shell Extension, die es ermöglicht jede DOS A
 [Section.040a]
 Description = DosBlaster en una extensión Shell que permite abrir cualquier ejecutable DOS en DOSBox desde el botón derecho del ratón. Esta versión contiene DOSBox 0.70, pero puede ser actualizado facilmente instalando una nueva versión de DOSBox en la carpeta de DosBlaster.
 
+[Section.0415]
+Description = DosBlaster to rozszerzenie powłoki, które umożliwia otwarcie każdego DOS-owego pliku wykonywalnego w DOSBox za pomocą prawego klawisza myszki. Ta wersja zawiera DosBox 0.70, ale można go łatwo zaktualizować, instalując nowszą wersje DOSBox do folderów DosBlaster.
+
 [Section.0422]
 Description = DosBlaster це розширення оболонки, яке дозволяє запустити будь-який виконавчий файл DOS в DOSBox через правий клік. Ця версія містить DOSBox 0.70, але може бути оновлена встановленням новішої версії DOSBox в теки DosBlaster.
index 6bbac0e..56a42cb 100644 (file)
@@ -14,5 +14,8 @@ CDPath = none
 [Section.0407]
 Description = Kleiner und einfacher Mediaplayer.
 
+[Section.0415]
+Description = Prosty i lekki odtwarzacz audio.
+
 [Section.0422]
 Description = Простий та маленький програвач аудіо файлів.
index 92b7a75..31b72a5 100644 (file)
@@ -2,47 +2,47 @@
 
 [Section]
 Name = Mozilla Firefox 3.6
-Version = 3.6.11
+Version = 3.6.12
 Licence = MPL/GPL/LGPL
 Description = The most popular and one of the best free Web Browsers out there.
 Size = 8.1M
 Category = 5
 URLSite = http://www.mozilla.com/en-US/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/en-US/Firefox%20Setup%203.6.11.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/en-US/Firefox%20Setup%203.6.12.exe
 CDPath = none
 
 [Section.0407]
 Description = Der populärste und einer der besten freien Webbrowser.
 Size = 8.0M
 URLSite = http://www.mozilla-europe.org/de/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/de/Firefox%20Setup%203.6.11.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/de/Firefox%20Setup%203.6.12.exe
 
 [Section.040a]
 Description = El más popular y uno de los mejores navegadores web gratuitos que hay.
 Size = 8.0M
 URLSite = http://www.mozilla-europe.org/es/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/es-ES/Firefox%20Setup%203.6.11.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/es-ES/Firefox%20Setup%203.6.12.exe
 
 [Section.0414]
 Description = Mest populære og best også gratis nettleserene der ute.
 Size = 8.0M
 URLSite = http://www.mozilla-europe.org/no/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/nb-NO/Firefox%20Setup%203.6.11.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/nb-NO/Firefox%20Setup%203.6.12.exe
 
 [Section.0415]
 Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych.
 Size = 8.8M
 URLSite = http://www.mozilla-europe.org/pl/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/pl/Firefox%20Setup%203.6.11.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/pl/Firefox%20Setup%203.6.12.exe
 
 [Section.0419]
 Description = Один из самых популярных и лучших бесплатных браузеров.
 Size = 8.4M
 URLSite = http://www.mozilla-europe.org/ru/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/ru/Firefox%20Setup%203.6.11.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/ru/Firefox%20Setup%203.6.12.exe
 
 [Section.0422]
 Description = Найпопулярніший та один з кращих безплатних веб-браузерів.
 Size = 8.4M
 URLSite = http://www.mozilla-europe.org/uk/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/uk/Firefox%20Setup%203.6.11.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/uk/Firefox%20Setup%203.6.12.exe
index e32599e..39dbe60 100644 (file)
@@ -18,7 +18,7 @@ Description = Open Source Office Suite, basierend auf Open Office, aber viel bes
 Description = La suite de ofimática de código abierto.
 
 [Section.0415]
-Description = Otwarty pakiet biurowy.
+Description = Otwarty pakiet biurowy, bazujący na Open Office, ale znacznie lepszy.
 
 [Section.0422]
 Description = Відкритий офісний пакет.
index f0bd4ec..4c47525 100644 (file)
@@ -14,5 +14,8 @@ CDPath = none
 [Section.0407]
 Description = KDE für Windows.
 
+[Section.0415]
+Description = KDE dla Windows.
+
 [Section.0422]
 Description = KDE для Windows.
index 8cc6b8e..0073737 100644 (file)
@@ -2,13 +2,13 @@
 
 [Section]
 Name = Miranda IM
-Version = 0.9.8
+Version = 0.9.10
 Licence = GPL
 Description = Open source multiprotocol instant messaging application - May not work completely.
 Size = 3.0MB
 Category = 5
 URLSite = http://www.miranda-im.org/
-URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.8-unicode.exe
+URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.10-unicode.exe
 CDPath = none
 
 [Section.0407]
index 83a74f3..1f7220a 100644 (file)
@@ -2,13 +2,13 @@
 
 [Section]
 Name = mIRC
-Version = 7.14
+Version = 7.15
 Licence = Shareware
 Description = The most popular client for the Internet Relay Chat (IRC).
 Size = 2.0M
 Category = 5
 URLSite = http://www.mirc.com/
-URLDownload = http://download.mirc.com/mirc714.exe
+URLDownload = http://download.mirc.com/mirc715.exe
 CDPath = none
 
 [Section.0407]
index 6de2539..c766941 100644 (file)
@@ -2,14 +2,17 @@
 
 [Section]
 Name = Mono .net Development Framework
-Version = 2.6.7
+Version = 2.8
 Licence = Unknown
 Description = Open Source .net Framework.
-Size = 72MB
+Size = 78MB
 Category = 14
 URLSite = http://www.mono-project.com/Main_Page
-URLDownload = http://ftp.novell.com/pub/mono/archive/2.6.7/windows-installer/2/mono-2.6.7-gtksharp-2.12.10-win32-2.exe
+URLDownload = http://ftp.novell.com/pub/mono/archive/2.8/windows-installer/9/mono-2.8-gtksharp-2.12.10-win32-9.exe
 CDPath = none
 
+[Section.0415]
+Description = Pakiet Mono .net Framework dla Programistów.
+
 [Section.0422]
 Description = Відкритий .net Фреймворк.
index cf59628..d89fb38 100644 (file)
@@ -20,5 +20,8 @@ Description = Reproductor multimedia.
 [Section.0419]
 Description = Мультимедийный проигрыватель.
 
+[Section.0415]
+Description = Odtwarzacz multimediów.
+
 [Section.0422]
 Description = Мультимедійний програвач.
index f6d4ca6..15966d9 100644 (file)
@@ -10,3 +10,6 @@ Category = 14
 URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3
 URLDownload = http://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe
 CDPath = none
+
+[Section.0415]
+Description = Microsoft .NET Framework Wersja 1.1 - Pakiet Dystrybucyjny.
index cb83683..a29ed10 100644 (file)
@@ -10,3 +10,6 @@ Category = 14
 URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5
 URLDownload = http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe
 CDPath = none
+
+[Section.0415]
+Description = Microsoft .NET Framework Wersja 2.0 - Pakiet Dystrybucyjny.
index 65c9885..1901bfe 100644 (file)
@@ -10,3 +10,6 @@ Category = 14
 URLSite = http://www.microsoft.com/downloads/details.aspx?familyid=5B2C0358-915B-4EB5-9B1D-10E506DA9D0F
 URLDownload = http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe
 CDPath = none
+
+[Section.0415]
+Description = Microsoft .NET Framework Wersja 2.0 Service Pack 2.
\ No newline at end of file
index 4664d47..4c77199 100644 (file)
@@ -14,5 +14,9 @@ CDPath = none
 [Section.0407]
 Description = Eine sehr mächtige, dynamische Programmiersprache.
 
+
+[Section.0415]
+Description = Potęży i dynamiczny język programowania.
+
 [Section.0422]
 Description = Дуже потужна динамічна мова програмування.
index 7ee5f97..dd58417 100644 (file)
@@ -14,5 +14,8 @@ CDPath = none
 [Section.0407]
 Description = ReMooD ist ein Port des Doom Legacy Sources. Es versucht das klassische Legacy Erfahrung zusammen mit neuen Features und mehr Stabilität zu bieten. Unterstützt werden Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x und höher; und Linux (x86 und x86_64).
 
+[Section.0415]
+Description = ¯ród³owy port Doom. Jego celem jest zapewnienie rozrywki znanej z klasycznej wersji z nowymi funkcjami, i lepsz¹ stabilno\9cci¹. Obs³uguje Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x i wy¿sze; i Linux (x86 i x86_64).
+
 [Section.0422]
 Description = ReMooD э Портом вихідних кодів Doom Legacy. Його метою є додати нові можливості та стабільність до досвіду класичного Legacy. Він підтримує Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x та новіші; а також Linux (x86 та x86_64).
index 6fe68ef..bdb5688 100644 (file)
@@ -2,13 +2,13 @@
 
 [Section]
 Name = SciTE
-Version = 2.21
+Version = 2.22
 Licence = Freeware
 Description = SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs.
 Size = 0.6M
 Category = 7
 URLSite = http://www.scintilla.org/
-URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.21/Sc221.exe
+URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.22/Sc222.exe
 CDPath = none
 
 [Section.0407]
@@ -17,5 +17,8 @@ Description = SciTE ist ein SCIntilla basierter Text Editor. Ursprünglich wurde
 [Section.040a]
 Description = Editor de texto basado en SCIntilla. Originalmente creado para demostrar Scintilla, a crecido para ser un gran editor con capacidad para crear y ejecutar programas.
 
+[Section.0415]
+Description = SciTE to edytor tekstu bazowany na SCIntilla. Oryginalnie stworzony aby pokazać Scintille, stał sie ogólnie przydatnym edytorem z infrastrukturą potrzebną do tworzenia i uruchamiania programów.
+
 [Section.0422]
 Description = Текстовий редактор на основі SCIntilla. Був зібраний як презентація Scintilla, але виріс до редактора загального користування з засобами збирання та запуску програм.
index 4544d24..ae5b913 100644 (file)
@@ -2,31 +2,31 @@
 
 [Section]
 Name = Mozilla SeaMonkey
-Version = 2.0.9
+Version = 2.0.10
 Licence = MPL/GPL/LGPL
 Description = Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need.
 Size = 10.1MB
 Category = 5
 URLSite = http://www.seamonkey-project.org/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/en-US/SeaMonkey%20Setup%202.0.9.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/en-US/SeaMonkey%20Setup%202.0.10.exe
 CDPath = none
 
 [Section.0407]
 Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen.
 Size = 10.0MB
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/de/SeaMonkey%20Setup%202.0.9.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/de/SeaMonkey%20Setup%202.0.10.exe
 
 [Section.040a]
 Description = La suite de Mozilla está viva. Es el primero y único navegador web, gestor de correo, lector de noticias, Chat y editor HTML que necesitarás.
 Size = 10.0MB
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/es-ES/SeaMonkey%20Setup%202.0.9.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/es-ES/SeaMonkey%20Setup%202.0.10.exe
 
 [Section.0415]
 Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz.
 Size = 10.8MB
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/pl/SeaMonkey%20Setup%202.0.9.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/pl/SeaMonkey%20Setup%202.0.10.exe
 
 [Section.0419]
 Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор.
 Size = 10.4MB
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/ru/SeaMonkey%20Setup%202.0.9.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/ru/SeaMonkey%20Setup%202.0.10.exe
index 3caccc4..9d4a0af 100644 (file)
@@ -14,5 +14,8 @@ CDPath = none
 [Section.0407]
 Description = Die STEAM Spieleplattform, die von viele Spielen verwendet wird.
 
+[Section.0415]
+Description = STEAM - platforma, którą używa obecnie wiele gier.
+
 [Section.0422]
 Description = Ігрова платформа, що використовується багатьма іграми.
index 02b5560..9098b11 100644 (file)
@@ -13,3 +13,6 @@ CDPath = none
 
 [Section.0407]
 Description = Eine schnelle und effektive Suchanwendung.
+
+[Section.0415]
+Description = Szybka i bogata w opcje aplikacja szukająca.
index b5c87a0..c5e57fd 100644 (file)
@@ -15,6 +15,9 @@ CDPath = none
 Licence = Unbekannt
 Description = Tahoma Font pack, der von einigen Anwendungen benötigt wird (Steam).
 
+[Section.0415]
+Description = Pakiet Czcionki Tahoma wymagany przez niektóre programy (np. Steam).
+
 [Section.0422]
 Licence = Невідома
 Description = Пакет шрифтів Tahoma, що необхідні деяким програмам (Steam).
index 0d3fa6e..2e120b0 100644 (file)
@@ -2,41 +2,41 @@
 
 [Section]
 Name = Mozilla Thunderbird
-Version = 3.1.5
+Version = 3.1.6
 Licence = MPL/GPL/LGPL
 Description = The most popular and one of the best free Mail Clients out there.
 Size = 9.0M
 Category = 5
 URLSite = http://www.mozilla-europe.org/en/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/en-US/Thunderbird%20Setup%203.1.5.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/en-US/Thunderbird%20Setup%203.1.6.exe
 CDPath = none
 
 [Section.0407]
 Description = Der populärste und einer der besten freien Mail-Clients.
 Size = 8.8M
 URLSite = http://www.mozilla-europe.org/de/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/de/Thunderbird%20Setup%203.1.5.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/de/Thunderbird%20Setup%203.1.6.exe
 
 [Section.040a]
 Description = El más popular y uno de los mejores clientes mail que hay.
 Size = 8.8M
 URLSite = http://www.mozilla-europe.org/es/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/es-ES/Thunderbird%20Setup%203.1.5.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/es-ES/Thunderbird%20Setup%203.1.6.exe
 
 [Section.0415]
 Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty.
 Size = 9.7M
 URLSite = http://www.mozilla-europe.org/pl/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/pl/Thunderbird%20Setup%203.1.5.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/pl/Thunderbird%20Setup%203.1.6.exe
 
 [Section.0419]
 Description = Один из самых популярных и лучших бесплатных почтовых клиентов.
 Size = 9.2M
 URLSite = http://www.mozilla-europe.org/ru/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/ru/Thunderbird%20Setup%203.1.5.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/ru/Thunderbird%20Setup%203.1.6.exe
 
 [Section.0422]
 Description = Найпопулярніший та один з кращих поштових клієнтів.
 Size = 9.2M
 URLSite = http://www.mozillamessaging.com/uk/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/uk/Thunderbird%20Setup%203.1.5.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/uk/Thunderbird%20Setup%203.1.6.exe
index f00b143..89ab674 100644 (file)
@@ -2,17 +2,20 @@
 
 [Section]
 Name = UltraVNC
-Version = 1.0.8.2
+Version = 1.0.9.1
 Licence = GPL
 Description = Open-source VNC client/server.
-Size = 1.9MB
+Size = 2.0MB
 Category = 5
 URLSite = http://www.uvnc.com/
-URLDownload = http://support1.uvnc.com/download/1082/UltraVNC_1.0.8.2_Setup.exe
+URLDownload = http://support1.uvnc.com/download/109/UltraVNC_1.0.9.1_Setup.exe
 CDPath = none
 
 [Section.040a]
 Description = Cliente/Servidor VNC de código abierto.
 
+[Section.0415]
+Description = Otwarty klient/serwer VNC.
+
 [Section.0422]
 Description = Відкритий VNC клієнт/сервер.
index cb05f9b..86fa5ae 100644 (file)
@@ -2,13 +2,13 @@
 
 [Section]
 Name = µTorrent
-Version = 2.0.4
+Version = 2.2
 Licence = Freeware for non-commercial uses
 Description = Small and fast BitTorrent Client.
-Size = 320K
+Size = 385K
 Category = 5
 URLSite = http://www.utorrent.com/
-URLDownload = http://download.utorrent.com/2.0.4/utorrent.exe
+URLDownload = http://download.utorrent.com/2.2/utorrent.exe
 CDPath = none
 
 
index 8a362fa..76c8c74 100644 (file)
@@ -2,13 +2,13 @@
 
 [Section]
 Name = VLC media player
-Version = 1.1.4
+Version = 1.1.5
 Licence = GPL
 Description = A media player.
-Size = 18.7MB
+Size = 19.1MB
 Category = 1
 URLSite = http://www.videolan.org/vlc/
-URLDownload = http://ignum.dl.sourceforge.net/project/vlc/1.1.4/win32/vlc-1.1.4-win32.exe
+URLDownload = http://ignum.dl.sourceforge.net/project/vlc/1.1.5/win32/vlc-1.1.5-win32.exe
 CDPath = none
 
 [Section.0407]
@@ -20,5 +20,8 @@ Description = Reproductor multimedia.
 [Section.0419]
 Description = Мультимедийный проигрыватель.
 
+[Section.0415]
+Description = Odtwarzacz multimediów.
+
 [Section.0422]
 Description = Мультимедійний програвач.
index a79251c..40adac9 100644 (file)
@@ -8,6 +8,7 @@ list(APPEND SOURCE
     about.c
     childwnd.c
     edit.c
+    error.c
     find.c
     framewnd.c
     hexedit.c
@@ -31,4 +32,4 @@ add_importlibs(regedit user32 gdi32 advapi32 ole32 shell32 comctl32 comdlg32 shl
 
 #add_subdirectory(clb)
 
-add_cab_target(regedit 4)
\ No newline at end of file
+add_cab_target(regedit 4)
index 6675e21..56ab005 100644 (file)
@@ -67,19 +67,21 @@ static void draw_splitbar(HWND hWnd, int x)
 
 static void ResizeWnd(ChildWnd* pChildWnd, int cx, int cy)
 {
-    HDWP hdwp = BeginDeferWindowPos(2);
-    RECT rt, rs;
-
+    HDWP hdwp = BeginDeferWindowPos(3);
+    RECT rt, rs, rb;
+    const int tHeight = 18;
     SetRect(&rt, 0, 0, cx, cy);
     cy = 0;
     if (hStatusBar != NULL) {
         GetWindowRect(hStatusBar, &rs);
-        cy = rs.bottom - rs.top + 8;
+        cy = rs.bottom - rs.top;
     }
+    GetWindowRect(pChildWnd->hAddressBtnWnd, &rb);
     cx = pChildWnd->nSplitPos + SPLIT_WIDTH/2;
-       DeferWindowPos(hdwp, pChildWnd->hAddressBarWnd, 0, rt.left, rt.top, rt.right-rt.left, 23, SWP_NOZORDER|SWP_NOACTIVATE);
-    DeferWindowPos(hdwp, pChildWnd->hTreeWnd, 0, rt.left, rt.top + 25, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
-    DeferWindowPos(hdwp, pChildWnd->hListWnd, 0, rt.left+cx  , rt.top + 25, rt.right-cx, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
+    DeferWindowPos(hdwp, pChildWnd->hAddressBarWnd, 0, rt.left, rt.top, rt.right-rt.left - tHeight-2, tHeight, SWP_NOZORDER|SWP_NOACTIVATE);
+    DeferWindowPos(hdwp, pChildWnd->hAddressBtnWnd, 0, rt.right - tHeight, rt.top, tHeight, tHeight, SWP_NOZORDER|SWP_NOACTIVATE);
+    DeferWindowPos(hdwp, pChildWnd->hTreeWnd, 0, rt.left, rt.top + tHeight+2, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
+    DeferWindowPos(hdwp, pChildWnd->hListWnd, 0, rt.left+cx, rt.top + tHeight+2, rt.right-cx, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
     EndDeferWindowPos(hdwp);
 }
 
@@ -259,7 +261,7 @@ static void SuggestKeys(HKEY hRootKey, LPCTSTR pszKeyPath, LPTSTR pszSuggestions
                /* Check CLSID key */
                if (RegOpenKey(hRootKey, pszKeyPath, &hSubKey) == ERROR_SUCCESS)
                {
-                       if (QueryStringValue(hSubKey, TEXT("CLSID"), NULL, szBuffer, 
+                       if (QueryStringValue(hSubKey, TEXT("CLSID"), NULL, szBuffer,
                                             COUNT_OF(szBuffer)) == ERROR_SUCCESS)
                        {
                                lstrcpyn(pszSuggestions, TEXT("HKCR\\CLSID\\"), (int) iSuggestionsLength);
@@ -324,29 +326,35 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
         /* load "My Computer" string */
         LoadString(hInst, IDS_MY_COMPUTER, buffer, sizeof(buffer)/sizeof(TCHAR));
 
-           g_pChildWnd = pChildWnd = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ChildWnd));
+        g_pChildWnd = pChildWnd = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ChildWnd));
 
         if (!pChildWnd) return 0;
         _tcsncpy(pChildWnd->szPath, buffer, MAX_PATH);
         pChildWnd->nSplitPos = 250;
         pChildWnd->hWnd = hWnd;
-               pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP,
+        pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP,
                                                                                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                                                                                hWnd, (HMENU)0, hInst, 0);
+        pChildWnd->hAddressBtnWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Button"), _T("»"), WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP | BS_DEFPUSHBUTTON,
+                                        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+                                        hWnd, (HMENU)0, hInst, 0);
                pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW);
         pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, pChildWnd->szPath*/);
         SetFocus(pChildWnd->hTreeWnd);
 
-        /* set the address bar font */
-        if (pChildWnd->hAddressBarWnd)
+        /* set the address bar and button font */
+        if ((pChildWnd->hAddressBarWnd) && (pChildWnd->hAddressBtnWnd))
         {
             hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
             SendMessage(pChildWnd->hAddressBarWnd,
                         WM_SETFONT,
                         (WPARAM)hFont,
                         0);
+            SendMessage(pChildWnd->hAddressBtnWnd,
+                        WM_SETFONT,
+                        (WPARAM)hFont,
+                        0);
         }
-
                /* Subclass the AddressBar */
                oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
         SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc);
@@ -354,7 +362,10 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
                break;
     }
     case WM_COMMAND:
-        if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
+        if(HIWORD(wParam) == BN_CLICKED){
+            PostMessage(pChildWnd->hAddressBarWnd, WM_KEYUP, VK_RETURN, 0);
+        }
+        else if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
             goto def;
         }
         break;
@@ -477,10 +488,28 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
                        rootName = get_root_key_name(hRootKey);
                        fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
                        if (fullPath) {
-                           _stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
+                           /* set (correct) the address bar text */
+                if(keyPath[0] != '\0')
+                    _stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
+                else
+                    fullPath = _tcscpy(fullPath, rootName);
                            SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
                                SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
-                           HeapFree(GetProcessHeap(), 0, fullPath);
+                HeapFree(GetProcessHeap(), 0, fullPath);
+                /* disable hive manipulation items temporarily (enable only if necessary) */
+                EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_GRAYED);
+                EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_GRAYED);
+                               /* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
+                               if (!(_tcsicmp(rootName, TEXT("HKEY_LOCAL_MACHINE")) &&
+                      _tcsicmp(rootName, TEXT("HKEY_USERS"))))
+                {
+                    // enable the unload menu item if at the root
+                    // otherwise enable the load menu item if there is no slash in keyPath (ie. immediate child selected)
+                                   if(keyPath[0] == '\0')
+                        EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_ENABLED);
+                                   else if(!_tcschr(keyPath, _T('\\')))
+                        EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_ENABLED);
+                               }
 
                            {
                                HKEY hKey;
index 9812b9b..85a5bd8 100644 (file)
@@ -59,19 +59,10 @@ void error(HWND hwnd, INT resId, ...)
 
 static void error_code_messagebox(HWND hwnd, DWORD error_code)
 {
-    LPTSTR lpMsgBuf;
-    DWORD status;
     TCHAR title[256];
-    static const TCHAR fallback[] = TEXT("Error displaying error message.\n");
     if (!LoadString(hInst, IDS_ERROR, title, COUNT_OF(title)))
         lstrcpy(title, TEXT("Error"));
-    status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
-                           NULL, error_code, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
-    if (!status)
-        lpMsgBuf = (LPTSTR)fallback;
-    MessageBox(hwnd, lpMsgBuf, title, MB_OK | MB_ICONERROR);
-    if (lpMsgBuf != fallback)
-        LocalFree(lpMsgBuf);
+    ErrorMessageBox(hwnd, title, error_code);
 }
 
 void warning(HWND hwnd, INT resId, ...)
diff --git a/base/applications/regedit/error.c b/base/applications/regedit/error.c
new file mode 100644 (file)
index 0000000..aaadf1a
--- /dev/null
@@ -0,0 +1,14 @@
+#include <regedit.h>
+void ErrorMessageBox(HWND hWnd, LPCTSTR title, DWORD code)
+{
+    LPTSTR lpMsgBuf;
+    DWORD status;
+    static const TCHAR fallback[] = TEXT("Error displaying error message.\n");
+    status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+                           NULL, code, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
+    if (!status)
+        lpMsgBuf = (LPTSTR)fallback;
+    MessageBox(hWnd, lpMsgBuf, title, MB_OK | MB_ICONERROR);
+    if (lpMsgBuf != fallback)
+        LocalFree(lpMsgBuf);
+}
index 4e465e6..aa3a649 100644 (file)
@@ -282,6 +282,105 @@ static BOOL InitOpenFileName(HWND hWnd, OPENFILENAME* pofn)
     return TRUE;
 }
 
+static INT_PTR CALLBACK LoadHive_KeyNameInHookProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+    static LPTSTR sKey = NULL;
+    static INT sLength = 0;
+    switch(uMsg)
+    {
+     case WM_INITDIALOG:
+        sKey = (LPTSTR)lParam;
+        sLength = 128; /* FIXME: Ugly hack! */
+     case WM_COMMAND:
+        switch(LOWORD(wParam))
+        {
+         case IDOK:
+            if(GetDlgItemText(hWndDlg, IDC_EDIT_KEY, sKey, sLength))
+                return EndDialog(hWndDlg, -1);
+            else
+                return EndDialog(hWndDlg, 0);
+         case IDCANCEL:
+            return EndDialog(hWndDlg, 0);
+        }
+        break;
+    }
+    return FALSE;
+}
+
+static BOOL LoadHive(HWND hWnd)
+{
+    OPENFILENAME ofn;
+    TCHAR Caption[128];
+    LPCTSTR pszKeyPath;
+    TCHAR xPath[128];
+    HKEY hRootKey;
+    TCHAR Filter[1024];
+    FILTERPAIR filter;
+    /* get the item key to load the hive in */
+    pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
+    /* initialize the "open file" dialog */
+    InitOpenFileName(hWnd, &ofn);
+    /* build the "All Files" filter up */
+    filter.DisplayID = IDS_FLT_ALLFILES;
+    filter.FilterID = IDS_FLT_ALLFILES_FLT;
+    BuildFilterStrings(Filter, &filter, sizeof(filter));
+    ofn.lpstrFilter = Filter;
+    /* load and set the caption and flags for dialog */
+    LoadString(hInst, IDS_LOAD_HIVE, Caption, COUNT_OF(Caption));
+    ofn.lpstrTitle = Caption;
+    ofn.Flags |= OFN_ENABLESIZING;
+    /*    ofn.lCustData = ;*/
+    /* now load the hive */
+    if (GetOpenFileName(&ofn))
+    {
+        if(DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_LOADHIVE), hWnd, &LoadHive_KeyNameInHookProc, (LPARAM)xPath))
+        {
+            LONG regLoadResult = RegLoadKey(hRootKey, xPath, ofn.lpstrFile);
+            if(regLoadResult == ERROR_SUCCESS)
+            {
+                /* refresh tree and list views */
+                RefreshTreeView(g_pChildWnd->hTreeWnd);
+                pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
+                RefreshListView(g_pChildWnd->hListWnd, hRootKey, pszKeyPath);
+            }
+            else
+            {
+                ErrorMessageBox(hWnd, Caption, regLoadResult);
+                return FALSE;
+            }
+        }
+    } else {
+        CheckCommDlgError(hWnd);
+    }
+    return TRUE;
+}
+
+static BOOL UnloadHive(HWND hWnd)
+{
+    TCHAR Caption[128];
+    LPCTSTR pszKeyPath;
+    HKEY hRootKey;
+    /* get the item key to unload */
+    pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
+    /* load and set the caption and flags for dialog */
+    LoadString(hInst, IDS_UNLOAD_HIVE, Caption, COUNT_OF(Caption));
+    /* now unload the hive */
+    LONG regUnloadResult = RegUnLoadKey(hRootKey, pszKeyPath);
+    if(regUnloadResult == ERROR_SUCCESS)
+    {
+        /* refresh tree and list views */
+        RefreshTreeView(g_pChildWnd->hTreeWnd);
+        pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
+        RefreshListView(g_pChildWnd->hListWnd, hRootKey, pszKeyPath);
+    }
+    else
+    {
+        ErrorMessageBox(hWnd, Caption, regUnloadResult);
+        return FALSE;
+    }
+    return TRUE;
+}
+
 static BOOL ImportRegistryFile(HWND hWnd)
 {
     OPENFILENAME ofn;
@@ -316,7 +415,6 @@ static BOOL ImportRegistryFile(HWND hWnd)
     return TRUE;
 }
 
-
 static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
 {
     HWND hwndExportAll;
@@ -397,7 +495,7 @@ BOOL ExportRegistryFile(HWND hWnd)
     if (GetSaveFileName(&ofn)) {
         BOOL result;
         DWORD format;
+
         if (ofn.nFilterIndex == 1)
             format = REG_FORMAT_5;
         else
@@ -758,6 +856,12 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
     UNREFERENCED_PARAMETER(message);
 
     switch (LOWORD(wParam)) {
+    case ID_REGISTRY_LOADHIVE:
+        LoadHive(hWnd);
+        return TRUE;
+    case ID_REGISTRY_UNLOADHIVE:
+        UnloadHive(hWnd);
+        return TRUE;
     case ID_REGISTRY_IMPORTREGISTRYFILE:
         ImportRegistryFile(hWnd);
         return TRUE;
index 7ecabed..da8521b 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -276,6 +286,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Âíàñÿ ñëîâåñåí ôàéë â ðåãèñòúðà"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Èçíàñÿ öåëèÿ ðåãèñòúð èëè ÷àñòè îò íåãî â ñëîâåñåí ôàéë"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Ñâúðçâà ñå ñ ðåãèñòúðà íà äàëå÷åí êîìïþòúð"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -332,6 +346,8 @@ BEGIN
     IDS_MY_COMPUTER         "Ìîÿò êîìïþòúð"
     IDS_IMPORT_REG_FILE     "Âíîñ íà ðåãèñòúðåí ôàéë"
     IDS_EXPORT_REG_FILE     "Èçíîñ íà ðåãèñòúðåí ôàéë"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(ñàìîñòîÿòåëíà ñòîéíîñò íà äâîéíà äóìà)"
 END
 
index c1d12db..9226c8e 100644 (file)
@@ -175,6 +175,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -274,6 +284,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importuje textový soubor do registru"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exportuje v\9aechny èásti registru do textového souboru"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Pøipojí se ke vzdálenému registru jiného poèítaèe"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -330,6 +344,8 @@ BEGIN
     IDS_MY_COMPUTER         "Tento poèítaè"
     IDS_IMPORT_REG_FILE     "Importovat soubor registru"
     IDS_EXPORT_REG_FILE     "Exportovat do souboru registru"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(Neplatná hodnota DWORD)"
 END
 
index 4cf8657..8d6f251 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -276,6 +286,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importiert eine Textddatei in die Registry"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exportiert Teile oder die ganze Registry in eine Textdatei"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Verbindet zu einer Registry eines Fremdcomputers"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -332,6 +346,8 @@ BEGIN
     IDS_MY_COMPUTER         "Arbeitsplatz"
     IDS_IMPORT_REG_FILE     "Registry importieren"
     IDS_EXPORT_REG_FILE     "Registry exportieren"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(ungültiger DWORD-Wert)"
 END
 
index 281ed2d..44ca2d9 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -276,6 +286,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "ÅéóÜãåé Ýíá áñ÷åßï êåéìÝíïõ óôç registry"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "ÅîÜãùç üëç Þ Ýíá êïììÜôé ôçò registry óå Ýíá áñ÷åßï êåéìÝíïõ"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "ÓõíäÝååôáé óôç registry åíüò áðïìáêñõóìÝíïõ õðïëïãéóôÞ"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -332,6 +346,8 @@ BEGIN
     IDS_MY_COMPUTER         "Ï ÕðïëïãéóôÞò Ìïõ"
     IDS_IMPORT_REG_FILE     "ÅéóáãùãÞ Áñ÷åßïõ Registry"
     IDS_EXPORT_REG_FILE     "ÅîáãùãÞ Áñ÷åßïõ Registry"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(ìç Ýãêõñç DWORD ôéìÞ)"
 END
 
index e5a94cb..fb81f16 100644 (file)
@@ -274,6 +274,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exports all or part of the registry to a text file"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Connects to a remote computer's registry"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -330,6 +334,8 @@ BEGIN
     IDS_MY_COMPUTER         "My Computer"
     IDS_IMPORT_REG_FILE     "Import Registry File"
     IDS_EXPORT_REG_FILE     "Export Registry File"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(invalid DWORD value)"
 END
 
@@ -392,6 +398,20 @@ BEGIN
    EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12
 END
 
+//
+// Dialog resources
+//
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
+
 IDD_ADDFAVORITES DIALOGEX DISCARDABLE  0, 0, 186, 46
 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Add to Favorites"
index b128846..0e1dc4c 100644 (file)
@@ -180,6 +180,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -279,6 +289,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importa un archivo de texto al registro"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exporta todo o parte del registro a un archivo de texto"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Se conecta al registro de un ordenador remoto"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -335,6 +349,8 @@ BEGIN
     IDS_MY_COMPUTER         "Mi PC"
     IDS_IMPORT_REG_FILE     "Importa Fichero de Registro"
     IDS_EXPORT_REG_FILE     "Exporta Fichero de Registro"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(valor DWORD invalido)"
 END
 
index c5042da..56e31bc 100644 (file)
@@ -180,6 +180,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -279,6 +289,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importe un fichier texte dans les registres"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exporte tout ou une partie des registres dans un fichier texte"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Connecte aux registres d'un ordinateur distant"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -335,6 +349,8 @@ BEGIN
     IDS_MY_COMPUTER         "Mon ordinateur"
     IDS_IMPORT_REG_FILE     "Importer un fichier registre"
     IDS_EXPORT_REG_FILE     "Exporter un fichier registre"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(valeur mot double invalide)"
 END
 
index 42faef3..7efa45d 100644 (file)
@@ -178,6 +178,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -277,6 +287,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exports all or part of the registry to a text file"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Connects to a remote computer's registry"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -333,6 +347,8 @@ BEGIN
     IDS_MY_COMPUTER         "My Computer"
     IDS_IMPORT_REG_FILE     "Import Registry File"
     IDS_EXPORT_REG_FILE     "Export Registry File"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(invalid DWORD value)"
 END
 
index 059abec..4d85714 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -276,6 +286,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Mengimpor file teks ke dalam registri"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Mengekspor semua atau sebagian registri le file teks"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Menyambung ke registri komputer remote"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -332,6 +346,8 @@ BEGIN
     IDS_MY_COMPUTER         "My Computer"
     IDS_IMPORT_REG_FILE     "Impor File Registri"
     IDS_EXPORT_REG_FILE     "Ekspor File Registri"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(nilai DWORD tidak benar)"
 END
 
index 53c6856..8f81f05 100644 (file)
@@ -180,6 +180,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -281,6 +291,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importa un file di testo nel Registro"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Esporta tutto o parte del Registro in un file di testo"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Si connette al Registro di un computer remoto"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -337,6 +351,8 @@ BEGIN
     IDS_MY_COMPUTER         "Il mio Computer"
     IDS_IMPORT_REG_FILE     "Importa file di Registro"
     IDS_EXPORT_REG_FILE     "Esporta file di Registro"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(valore DWORD non valido)"
 END
 
index 8b1816b..66a0967 100644 (file)
@@ -175,6 +175,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -274,6 +284,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "\83e\83L\83X\83\83t\83@\83C\83\8b\82ð\83\8c\83W\83X\83g\83\8a\82É\83C\83\93\83|\81[\83g\82µ\82Ü\82·\81B"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "\83\8c\83W\83X\83g\83\8a\82Ì\88ê\95\94\82Ü\82½\82Í\91S\91Ì\82ð\83e\83L\83X\83\83t\83@\83C\83\8b\82É\83G\83N\83X\83|\81[\83g\82µ\82Ü\82·\81B"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "\83\8a\83\82\81[\83\83R\83\93\83s\83\85\81[\83^\82Ì\83\8c\83W\83X\83g\83\8a\82É\90Ú\91±\82µ\82Ü\82·\81B"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -330,6 +344,8 @@ BEGIN
     IDS_MY_COMPUTER         "\83}\83\83R\83\93\83s\83\85\81[\83^"
     IDS_IMPORT_REG_FILE     "\83\8c\83W\83X\83g\83\8a \83t\83@\83C\83\8b\82Ì\83C\83\93\83|\81[\83g"
     IDS_EXPORT_REG_FILE     "\83\8c\83W\83X\83g\83\8a \83t\83@\83C\83\8b\82Ì\83G\83N\83X\83|\81[\83g"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(\96³\8cø\82È DWORD \92l)"
 END
 
index 01777d0..b205797 100644 (file)
@@ -162,6 +162,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -261,6 +271,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "ÅؽºÆ® ÆÄÀÏÀ» ·¹Áö½ºÆ®¸®·Î ºÒ·¯ ¿É´Ï´Ù"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "ÅؽºÆ® ÆÄÀϷΠ·¹Áö½ºÆ®¸®ÀÇ Àüü³ª ÀϺθ¦ ³»º¸³À´Ï´Ù"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "¿ø°Ý ÄÄÇ»ÅÍÀÇ ·¹Áö½ºÆ®¸®·Î Á¢¼ÓÇÕ´Ï´Ù"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -317,6 +331,8 @@ BEGIN
     IDS_MY_COMPUTER         "³» ÄÄÇ»ÅÍ"
     IDS_IMPORT_REG_FILE     "·¹Áö½ºÆ®¸® ÆÄÀÏ ºÒ·¯¿À±â"
     IDS_EXPORT_REG_FILE     "·¹Áö½ºÆ®¸® ÆÄÀÏ ³»º¸³»±â"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(À߸øµÈ DWORD°ª)"
 END
 
index be86610..2bc0979 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -276,6 +286,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Een tekstbestand in het register importeren"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Het register of een gedeelte ervan naar een tekstbestand exporteren"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Een verbinding maken met het register van een externe computer"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -332,6 +346,8 @@ BEGIN
     IDS_MY_COMPUTER         "My Computer"
     IDS_IMPORT_REG_FILE     "Import Registry File"
     IDS_EXPORT_REG_FILE     "Export Registry File"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(invalid DWORD value)"
 END
 
index b052432..60d0d1a 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | 
@@ -276,6 +286,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importerer en tekstfil inn i Registret"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Eksporterer hele eller deler av Registret til en tekstfil"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Kobler til Registret på en annen datamaskin"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -332,6 +346,8 @@ BEGIN
     IDS_MY_COMPUTER         "Min datamaskin"
     IDS_IMPORT_REG_FILE     "Importer registerfil"
     IDS_EXPORT_REG_FILE     "Eksporter registerfil"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(ugyldig DWORD-verdi)"
 END
 
index 198125c..4f864f3 100644 (file)
@@ -182,6 +182,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -281,6 +291,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importuje plik do rejestru"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Eksportuje ca³o\9cæ lub czê\9cæ rejestru do pliku"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Po³¹czenie z rejestrem zdalnego komputera"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -337,6 +351,8 @@ BEGIN
     IDS_MY_COMPUTER         "Mój komputer"
     IDS_IMPORT_REG_FILE     "Importuj plik rejestru"
     IDS_EXPORT_REG_FILE     "Eksportuj plik rejestru"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(niew³a\9cciwa warto\9cæ DWORD)"
 END
 
index 4cd2199..7abc3c2 100644 (file)
@@ -178,6 +178,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -277,6 +287,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importa um arquivo de texto para o registro"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exporta todo ou parte do Registro para um arquivo texto"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Conecta-se ao Registro de um computador remoto"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -333,6 +347,8 @@ BEGIN
     IDS_MY_COMPUTER         "Meu computador"
     IDS_IMPORT_REG_FILE     "Importar arquivo do Registro"
     IDS_EXPORT_REG_FILE     "Exportar arquivo do Registro"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(valor DWORD inválido)"
 END
 
index 15fee2f..52b15fd 100644 (file)
@@ -277,6 +277,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importa um arquivo texto para o registro."
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exporta todo ou parte do registro para um arquivo texto."
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Conecta a um registro em um computador remoto."
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -333,6 +337,8 @@ BEGIN
     IDS_MY_COMPUTER         "My Computer"
     IDS_IMPORT_REG_FILE     "Import Registry File"
     IDS_EXPORT_REG_FILE     "Export Registry File"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(invalid DWORD value)"
 END
 
@@ -384,6 +390,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EXPORTRANGE DIALOGEX DISCARDABLE  50, 50, 370, 50
 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
index 6289280..f8e7466 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
@@ -275,6 +285,8 @@ BEGIN
     ID_EDIT_NEW_DWORDVALUE                "Äîáàâëÿåò íîâîå DWORD-çíà÷åíèå"
     ID_REGISTRY_IMPORTREGISTRYFILE        "Èìïîðòèðóåò òåêñòîâîé ôàéë â ðååñòð"
     ID_REGISTRY_EXPORTREGISTRYFILE        "Ýêñïîðòèðóåò âåñü ðååñòð èëè åãî ÷àñòü â òåêñòîâîé ôàéë"
+    ID_REGISTRY_LOADHIVE                  "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE                "Unloads a hive from the registry"
 
     ID_REGISTRY_CONNECTNETWORKREGISTRY    "Ïîäêëþ÷àåòñÿ ê ðååñòðó óäàë¸ííîãî êîìïüþòåðà"
 
@@ -332,6 +344,8 @@ BEGIN
     IDS_MY_COMPUTER         "Ìîé êîìïüþòåð"
     IDS_IMPORT_REG_FILE     "Èìïîðòèðîâàíèå ôàéëà ðååñòðà"
     IDS_EXPORT_REG_FILE     "Ýêñïîðòèðîâàíèå ôàéëà ðååñòðà"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(íåïðàâèëüíîå çíà÷åíèå DWORD)"
 END
 
index f5437e9..b6cb475 100644 (file)
@@ -162,6 +162,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -261,6 +271,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exports all or part of the registry to a text file"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Connects to a remote computer's registry"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -317,6 +331,8 @@ BEGIN
     IDS_MY_COMPUTER         "Tento poèítaè"
     IDS_IMPORT_REG_FILE     "Import Registry File"
     IDS_EXPORT_REG_FILE     "Export Registry File"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(neplatná DWORD hodnota)"
 END
 
index d5c5804..0be7a42 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -276,6 +286,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "V register uvozi datoteko z besedilom"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Registrsko datoteko ali njen del izvozi v besedilno datoteko"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Vzpostavi povezavo z registrom oddaljenega raèunalnika"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -332,6 +346,8 @@ BEGIN
     IDS_MY_COMPUTER         "My Computer"
     IDS_IMPORT_REG_FILE     "Import Registry File"
     IDS_EXPORT_REG_FILE     "Export Registry File"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(invalid DWORD value)"
 END
 
index ee1515d..70832d3 100644 (file)
@@ -175,6 +175,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -274,6 +284,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Importerar en textfil till registret"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exporterar hela eller en del av registret till en textfil"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Ansluter till en annan dators register"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -330,6 +344,8 @@ BEGIN
     IDS_MY_COMPUTER         "Den här datorn"
     IDS_IMPORT_REG_FILE     "Importera registerfil"
     IDS_EXPORT_REG_FILE     "Exportera registerfil"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(felaktigt DWORD-värde)"
 END
 
index c7bb7fd..51aa5da 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -276,6 +286,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Exports all or part of the registry to a text file"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Connects to a remote computer's registry"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -332,6 +346,8 @@ BEGIN
     IDS_MY_COMPUTER         "My Computer"
     IDS_IMPORT_REG_FILE     "Import Registry File"
     IDS_EXPORT_REG_FILE     "Export Registry File"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(invalid DWORD value)"
 END
 
index 5fd1fa5..6f98e38 100644 (file)
@@ -178,6 +178,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -277,6 +287,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "²ìïîðòóº òåêñòîâèé ôàéë äî ðåºñòðó"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "Åêñïîðòóº âåñü ðåºñòð àáî éîãî ÷àñòèíó â òåêñòîâèé ôàéë"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "ϳäêëþ÷àºòüñÿ äî ðåºñòðó â³ääàëåíîãî êîìï'þòåðà"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -333,6 +347,8 @@ BEGIN
     IDS_MY_COMPUTER         "̳é êîìï'þòåð"
     IDS_IMPORT_REG_FILE     "²ìïîðòóâàòè ôàéë ðåºñòðó"
     IDS_EXPORT_REG_FILE     "Åêñïîðòóâàòè ôàéë ðåºñòðó"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(Íåïðàâèëüíå çíà÷åííÿ DWORD)"
 END
 
index 0d20667..8e09846 100644 (file)
@@ -177,6 +177,16 @@ END
 /*
  * Dialog
  */
+IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Load Hive"
+FONT 8, "Ms Shell Dlg"
+{
+    LTEXT           "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+    EDITTEXT        IDC_EDIT_KEY, 23, 2, 167, 13
+    DEFPUSHBUTTON   "OK", IDOK, 140, 17, 50, 14
+    PUSHBUTTON      "Cancel", IDCANCEL, 89, 17, 50, 14
+}
 
 IDD_EDIT_STRING DIALOGEX  32, 24, 252, 84
 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@@ -276,6 +286,10 @@ BEGIN
     ID_REGISTRY_IMPORTREGISTRYFILE "½«Îļþµ¼Èëµ½×¢²á±íÖС£"
     ID_REGISTRY_EXPORTREGISTRYFILE
                             "½«×¢²á±íÈ«²¿»ò²¿·Öµ¼³öµ½ÎļþÖС£"
+    ID_REGISTRY_LOADHIVE
+                            "Loads a hive file into the registry"
+    ID_REGISTRY_UNLOADHIVE
+                            "Unloads a hive from the registry"
     ID_REGISTRY_CONNECTNETWORKREGISTRY
                             "Á¬½Óµ½Ô¶³Ì¼ÆËã»úµÄ×¢²á±í¡£"
     ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@@ -332,6 +346,8 @@ BEGIN
     IDS_MY_COMPUTER         "My Computer"
     IDS_IMPORT_REG_FILE     "µ¼Èë×¢²á±íÎļþ"
     IDS_EXPORT_REG_FILE     "µ¼³ö×¢²á±íÎļþ"
+    IDS_LOAD_HIVE           "Load Hive"
+    IDS_UNLOAD_HIVE         "Unload Hive"
     IDS_INVALID_DWORD       "(²»ÕýÈ·µÄ DWORD Öµ)"
 END
 
index d7eac59..fcf9f52 100644 (file)
@@ -556,18 +556,12 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
         /*                } */
         /*                dwValSize = max_val_size; */
         while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) {
-            /* Remove unwanted path from key name */
-            TCHAR *pLastBl = _tcsrchr(ValName, TEXT('\\'));
-            if (pLastBl != NULL)
-                ++pLastBl;
-            else
-                pLastBl = ValName;
             /* Add a terminating 0 character. Usually this is only necessary for strings. */
             ValBuf[dwValSize] = 0;
 #ifdef UNICODE
             ValBuf[dwValSize + 1] = 0;
 #endif
-            AddEntryToList(hwndLV, pLastBl, dwValType, ValBuf, dwValSize, -1, TRUE);
+            AddEntryToList(hwndLV, ValName, dwValType, ValBuf, dwValSize, -1, TRUE);
             dwValNameLen = max_val_name_len;
             dwValSize = max_val_size;
             dwValType = 0L;
index 4b837d9..c822049 100644 (file)
@@ -58,6 +58,7 @@ typedef struct {
     HWND    hTreeWnd;
     HWND    hListWnd;
        HWND    hAddressBarWnd;
+       HWND    hAddressBtnWnd;
     int     nFocusPanel;      /* 0: left  1: right */
     int            nSplitPos;
     WINDOWPLACEMENT pos;
@@ -88,6 +89,9 @@ extern void ShowAboutBox(HWND hWnd);
 /* childwnd.c */
 extern LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);
 
+/* error.c */
+extern void ErrorMessageBox(HWND hWnd, LPCTSTR title, DWORD code);
+
 /* find.c */
 extern void FindDialog(HWND hWnd);
 extern BOOL FindNext(HWND hWnd);
index 2190e0e..771d743 100644 (file)
 #define IDS_ERR_RENVAL_CAPTION         32856
 #define IDS_ERR_RENVAL_TOEMPTY         32857
 #define IDS_BAD_KEY                     32858
+#define IDS_LOAD_HIVE           32859
+#define IDS_UNLOAD_HIVE         32860
 
-#define ID_EDIT_NEW_MULTISTRINGVALUE           32860
-#define ID_EDIT_NEW_EXPANDABLESTRINGVALUE      32861
+#define ID_EDIT_NEW_MULTISTRINGVALUE           32861
+#define ID_EDIT_NEW_EXPANDABLESTRINGVALUE      32862
 
 #define ID_SWITCH_PANELS                32871
 #define ID_EDIT_PERMISSIONS            32872
 #define IDC_EXPORT_BRANCH       2009
 #define IDC_EXPORT_BRANCH_TEXT  2010
 
+#define IDD_LOADHIVE                           2500
+#define IDC_EDIT_KEY                           2501
 
 #define IDC_FAVORITENAME                2011
 #define IDC_FAVORITESLIST               2012
index cd59203..5e0727f 100644 (file)
@@ -633,7 +633,7 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
        TVITEM tvi;
 
     /* Total no-good hack */
-    if (!_tcsncmp(keyPath, _T("My Computer\\"), 12))
+    if (!_tcsnicmp(keyPath, _T("My Computer\\"), 12))
         keyPath += 12;
 
        hRoot = TreeView_GetRoot(hwndTV);
@@ -647,17 +647,17 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
                /* Special case for root to expand root key abbreviations */
                if (hItem == hRoot)
                {
-                       if (!_tcscmp(szPathPart, TEXT("HKCR")))
+                       if (!_tcsicmp(szPathPart, TEXT("HKCR")))
                                _tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
-                       else if (!_tcscmp(szPathPart, TEXT("HKCU")))
+                       else if (!_tcsicmp(szPathPart, TEXT("HKCU")))
                                _tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
-                       else if (!_tcscmp(szPathPart, TEXT("HKLM")))
+                       else if (!_tcsicmp(szPathPart, TEXT("HKLM")))
                                _tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
-                       else if (!_tcscmp(szPathPart, TEXT("HKU")))
+                       else if (!_tcsicmp(szPathPart, TEXT("HKU")))
                                _tcscpy(szPathPart, TEXT("HKEY_USERS"));
-                       else if (!_tcscmp(szPathPart, TEXT("HKCC")))
+                       else if (!_tcsicmp(szPathPart, TEXT("HKCC")))
                                _tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
-                       else if (!_tcscmp(szPathPart, TEXT("HKDD")))
+                       else if (!_tcsicmp(szPathPart, TEXT("HKDD")))
                                _tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
                }
 
@@ -672,7 +672,7 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
 
                        (void)TreeView_GetItem(hwndTV, &tvi);
 
-                       if (!_tcscmp(szBuffer, szPathPart))
+                       if (!_tcsicmp(szBuffer, szPathPart))
                                break;
                }
 
index b632ad5..97d9215 100644 (file)
@@ -641,10 +641,10 @@ BEGIN
     IDS_MSG_UNABLEDEBUGPROCESS    "Îòëàäêà ïðîöåññà íåâîçìîæíà"
     IDS_MSG_WARNINGDEBUG          "ÂÍÈÌÀÍÈÅ: Îòëàäêà ýòîãî ïðîöåññà ìîæåò çàêîí÷èòüñÿ ïîòåðåé äàííûõ.\nÂû óâåðåíû, ÷òî ìîæíî ïðîäîëæàòü?"
     IDS_MSG_TASKMGRWARNING        "Îøèáêà Ìåíåäæåðà çàäà÷"
-    IDS_MSG_WARNINGTERMINATING    "ÂÍÈÌÀÍÈÅ: Çàâåðøåíèå ïðîöåññà ìîæåò ïîâëå÷ íåóñòîé÷èâóþ ðàáîòó ñèñòåìû è ïîòåðþ äàííûõ\nÑîõðàíèòå âàæíûå äàííûå ïåðåä ïðîäîëæåíèåì.\nÏðîäîëæèòü çàâåðøåíèå ïðîöåññà?"
+    IDS_MSG_WARNINGTERMINATING    "ÂÍÈÌÀÍÈÅ: Çàâåðøåíèå ïðîöåññà ìîæåò ïîâëå÷ü íåóñòîé÷èâóþ ðàáîòó ñèñòåìû è ïîòåðþ äàííûõ\nÑîõðàíèòå âàæíûå äàííûå ïåðåä ïðîäîëæåíèåì.\nÏðîäîëæèòü çàâåðøåíèå ïðîöåññà?"
     IDS_MSG_UNABLETERMINATEPRO    "Íå óäàëîñü çàâåðøèòü ïðîöåññ"
     IDS_MSG_UNABLECHANGEPRIORITY  "Íå óäàëîñü èçìåíèòü ïðèîðèòåò"
-    IDS_MSG_WARNINGCHANGEPRIORITY "ÂÍÈÌÀÍÈÅ: Èçìåíåíèå ïðèîðèòåòà ìîæåò ïîâëå÷ íåóñòîé÷èâóþ ðàáîòó è ïîòåðþ äàííûõ.\nÂû óâåðåíû, ÷òî ìîæíî ïðîäîëæàòü?"
+    IDS_MSG_WARNINGCHANGEPRIORITY "ÂÍÈÌÀÍÈÅ: Èçìåíåíèå ïðèîðèòåòà ìîæåò ïîâëå÷ü íåóñòîé÷èâóþ ðàáîòó è ïîòåðþ äàííûõ.\nÂû óâåðåíû, ÷òî ìîæíî ïðîäîëæàòü?"
     IDS_MSG_TRAYICONCPUUSAGE      "Çàãðóçêà ÖÏ: %d%%"
     IDS_STATUS_MEMUSAGE           "Âûäåëåíèå ïàìÿòè: %dK / %dK"
     IDS_STATUS_CPUUSAGE           "Çàãðóçêà ÖÏ: %3d%%"
index 73117a4..6c35e8d 100644 (file)
@@ -1,7 +1,7 @@
 /* TRANSLATOR:  M rio Ka\9fm r /Mario Kacmar/ aka Kario (kario@szm.sk)
  * DATE OF TR:  22-01-2008
  * Encoding  :  Latin II (852)
- * LastChange:  31-05-2010
+ * LastChange:  05-09-2010
  */
 
 #pragma once
@@ -993,13 +993,13 @@ static MUI_ENTRY skSKBootLoaderEntries[] =
     {
         8,
         12,
-        "Install bootloader on the harddisk (MBR and VBR).",
+        "Nainçtalova\9c zav dza\9f syst\82mu na pevnì disk (MBR a VBR).",
         TEXT_STYLE_NORMAL
     },
     {
         8,
         13,
-        "Install bootloader on the harddisk (VBR only).",
+        "Nainçtalova\9c zav dza\9f syst\82mu na pevnì disk (iba VBR).",
         TEXT_STYLE_NORMAL
     },
     {
index f436e5c..cec75b0 100644 (file)
@@ -1,9 +1,9 @@
 /* Slovak translation for CMD
  * TRANSLATOR:  Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
  * DATE OF TR:  21-03-2009
- * LastChange:  21-06-2009
+ * LastChange:  10-08-2010
  * _________________________________________________________________
- * NOTE      :  this file is not really translated (only scrap yet)
+ * NOTE      :  this file is not fully translated
  */
 
 LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@@ -118,7 +118,7 @@ dec  hex  name       dec  hex  name\n\
 6    6    Yellow     14   E    Bright Yellow\n\
 7    7    White      15   F    Bright White\n"
 
-STRING_COPY_HELP1,  "Overwrite %s (Yes/No/All)? "
+STRING_COPY_HELP1,  "Prepísa\9d %s (Yes/No/All)? "
 
 STRING_COPY_HELP2, "Skopíruje jeden alebo viac súborov na iné umiestnenie.\n\n\
 COPY [/V][/Y|/-Y][/A|/B] source [/A|/B]\n\
@@ -141,7 +141,7 @@ STRING_DATE_HELP2, "\nZadajte nov
 
 STRING_DATE_HELP3, "\nZadajte nový dátum (rrrr%cmm%cdd): "
 
-STRING_DATE_HELP4, "Displays or sets the date.\n\n\
+STRING_DATE_HELP4, "Zobrazí alebo nastaví dátum.\n\n\
 DATE [/T][date]\n\n\
   /T    display only\n\n\
 Type DATE without parameters to display the current date setting and\n\
@@ -469,7 +469,7 @@ STRING_TITLE_HELP, "Sets the window title for the command prompt window.\n\n\
 TITLE [string]\n\n\
 string       Specifies the title for the command prompt window.\n"
 
-STRING_TIME_HELP1, "Displays or sets the system time.\n\n\
+STRING_TIME_HELP1, "Zobrazí alebo nastaví systémový èas.\n\n\
 TIME [/T][time]\n\n\
   /T    display only\n\n\
 Type TIME with no parameters to display the current time setting and a prompt\n\
@@ -547,18 +547,18 @@ STRING_WINDOW_HELP1, "change console window aspect\n\n\
 WINDOW [/POS[=]left,top,width,heigth]\n\
               [MIN|MAX|RESTORE] ['title']\n\n\
 /POS          specify window placement and dimensions\n\
-MIN           minimize the window\n\
-MAX           maximize the window\n\
-RESTORE       restore the window"
+MIN           minimalizova\9d okno\n\
+MAX           maximalizujte okno\n\
+RESTORE       obnovi\9d okno"
 
 STRING_WINDOW_HELP2, "change console window aspect\n\n\
 ACTIVATE 'window' [/POS[=]left,top,width,heigth]\n\
               [MIN|MAX|RESTORE] ['title']\n\n\
 window        tile of window on which perform actions\n\
 /POS          specify window placement and dimensions\n\
-MIN           minimize the window\n\
-MAX           maximize the window\n\
-RESTORE       restore the window\n\
+MIN           minimalizova\9d okno\n\
+MAX           maximalizujte okno\n\
+RESTORE       obnovi\9d okno\n\
 title         new title\n"
 
 
@@ -576,7 +576,7 @@ CLS      Vyma
 CMD      Starts a new instance of the ReactOS command interpreter.\n\
 COLOR    Sets the default console foreground and background colors.\n\
 COPY     Skopíruje jeden alebo viac súborov na iné umiestnenie.\n\
-DATE     Displays or sets the date.\n\
+DATE     Zobrazí alebo nastaví dátum.\n\
 DELETE   Deletes one or more files.\n\
 DIR      Displays a list of files and subdirectories in a directory.\n\
 ECHO     Displays messages, or turns command echoing on or off.\n\
@@ -590,8 +590,8 @@ HELP     Provides Help information for ReactOS commands.\n\
 HISTORY  List all commands which has been used\n\
 IF       Performs conditional processing in batch programs.\n\
 LABEL    Creates, changes, or deletes the volume label of a disk.\n\
-MD       Creates a directory.\n\
-MKDIR    Creates a directory.\n\
+MD       Vytvorí adresár.\n\
+MKDIR    Vytvorí adresár.\n\
 MKLINK   Creates a filesystem link object.\n\
 MOVE     Moves one or more files from one directory to another\n\
          directory.\n\
@@ -603,8 +603,8 @@ PROMPT   Changes the command prompt.\n\
 PUSHD    Saves the current directory then changes it.\n\
 RD       Removes a directory.\n\
 REM      Records comments (remarks) in batch files.\n\
-REN      Renames a file or files.\n\
-RENAME   Renames a file or files.\n\
+REN      Premenuje súbor alebo súbory.\n\
+RENAME   Premenuje súbor alebo súbory.\n\
 REPLACE  Replaces files.\n\
 RMDIR    Removes a directory.\n\
 SCREEN   Move cursor and optionally print text.\n\
@@ -612,7 +612,7 @@ SET      Displays, sets, or removes ReactOS environment variables.\n\
 SHIFT    Shifts the position of replaceable parameters in batch files.\n"
 STRING_HELP2, "START    Starts a separate window to run a specified program or command.\n\
          Executes command.\n\
-TIME     Displays or sets the system time.\n\
+TIME     Zobrazí alebo nastaví systémový èas.\n\
 TIMER    Allow the use of ten stopwatches.\n\
 TITLE    Sets the window title for a CMD.EXE session.\n\
 TYPE     Displays the contents of a text file.\n\
@@ -651,9 +651,9 @@ STRING_COPY_ERROR3,          "Error writing destination!\n"
 STRING_COPY_ERROR4,          "Chyba: Zatia¾ neimplementované!\n" //Not implemented yet
 STRING_DATE_ERROR,           "Neplatný dátum."
 STRING_DEL_ERROR5,           "The file %s will be deleted! "
-STRING_DEL_ERROR6,           "Are you sure (Y/N)?"
+STRING_DEL_ERROR6,           "Ste si istý (Y/N)?"
 STRING_DEL_ERROR7,           "Deleting: %s\n"
-STRING_ERROR_ERROR1,         "Unknown error! Error code: 0x%lx\n"
+STRING_ERROR_ERROR1,         "Neznáma chyba! Kód chyby: 0x%lx\n"
 STRING_ERROR_ERROR2,         "Syntax error"
 STRING_FOR_ERROR1,           "'in' missing in for statement."
 STRING_FOR_ERROR2,           "no brackets found."
@@ -675,47 +675,47 @@ STRING_TIME_ERROR1,          "Neplatn
 
 STRING_TYPE_ERROR1,          "Invalid option '/%s'\n"
 
-STRING_WINDOW_ERROR1,        "window not found"
+STRING_WINDOW_ERROR1,        "okno sa nena\9alo"
 
 
 STRING_ERROR_PARAMETERF_ERROR,     "Parameter format not correct - %c\n"
-STRING_ERROR_INVALID_SWITCH,       "Invalid switch - /%c\n"
+STRING_ERROR_INVALID_SWITCH,       "Neplatný prepínaè - /%c\n"
 STRING_ERROR_TOO_MANY_PARAMETERS,  "Príli\9a ve¾a parametrov - %s\n"
-STRING_ERROR_PATH_NOT_FOUND,       "Path not found\n"
-STRING_ERROR_FILE_NOT_FOUND,       "File not found\n"
+STRING_ERROR_PATH_NOT_FOUND,       "Cesta sa nena\9ala\n"
+STRING_ERROR_FILE_NOT_FOUND,       "Súbor sa nena\9aiel\n"
 STRING_ERROR_REQ_PARAM_MISSING,    "Required parameter missing\n"
 STRING_ERROR_INVALID_DRIVE,        "Invalid drive specification\n"
 STRING_ERROR_INVALID_PARAM_FORMAT, "Invalid parameter format - %s\n"
-STRING_ERROR_BADCOMMAND,           "Bad command or filename - %s\n"
+STRING_ERROR_BADCOMMAND,           "Chybný príkaz alebo názov súboru - %s\n"
 STRING_ERROR_OUT_OF_MEMORY,        "Chyba (z) nedostatku pamäte.\n" //Out of memory error.
-STRING_ERROR_CANNOTPIPE,           "Error!  Cannot pipe!  Cannot open temporary file!\n"
+STRING_ERROR_CANNOTPIPE,           "Chyba!  Cannot pipe!  Cannot open temporary file!\n"
 STRING_ERROR_D_PAUSEMSG,           "Pokraèujte stlaèením ¾ubovo¾ného klávesu ..."
-STRING_ERROR_DRIVER_NOT_READY,     "Drive not ready"
+STRING_ERROR_DRIVER_NOT_READY,     "Jednotka nie je pripravená"
 
 STRING_PATH_ERROR,                 "CMD: Not in environment '%s'\n"
 
-STRING_REPLACE_ERROR1, "Invalid switch - %s\n"
-STRING_REPLACE_ERROR2, "Path not found - %s\n"
+STRING_REPLACE_ERROR1, "Neplatný prepínaè - %s\n"
+STRING_REPLACE_ERROR2, "Cesta sa nena\9ala - %s\n"
 STRING_REPLACE_ERROR3, "The filename, directory name, or volume label syntax is incorrect.\n"
 STRING_REPLACE_ERROR4, "Invalid parameter combination\n"
-STRING_REPLACE_ERROR5, "Access denied - %s\n"
-STRING_REPLACE_ERROR6, "No files found - %s\n"
+STRING_REPLACE_ERROR5, "Prístup zamietnutý - %s\n"
+STRING_REPLACE_ERROR6, "\8eiadne súbory sa nena\9ali - %s\n"
 STRING_REPLACE_ERROR7, "Extended Error 32\n"
 
 STRING_REACTOS_VERSION,            "Operaèný systém ReactOS [Verzia %s-%s]\n"
-STRING_CMD_SHELLINFO,              "\nReactOS Command Line Interpreter\nVerzia %s %s"
+STRING_CMD_SHELLINFO,              "\nInterpréter príkazového riadku systému ReactOS\nVerzia %s %s"
 STRING_VERSION_RUNVER,             " running on %s"
 STRING_COPY_FILE ,                 "        %d súbor(ov) skopírovaný(ch)\n"
 STRING_DELETE_WIPE,                "wiped"
 STRING_FOR_ERROR,                  "bad variable specification."
-STRING_SCREEN_COL,                 "invalid value for col"
-STRING_SCREEN_ROW,                 "invalid value for row"
+STRING_SCREEN_COL,                 "neplatná hodnota pre ståpec"
+STRING_SCREEN_ROW,                 "neplatná hodnota pre riadok"
 STRING_TIMER_TIME                  "Timer %d is %s: "
 STRING_MKLINK_CREATED_SYMBOLIC,    "Symbolic link created for %s <<===>> %s\n"
 STRING_MKLINK_CREATED_HARD,        "Hard link created for %s <<===>> %s\n"
 STRING_MKLINK_CREATED_JUNCTION,    "Junction created for %s <<===>> %s\n"
 STRING_MORE,                       "Viac? " //"More? "
-STRING_CANCEL_BATCH_FILE,          "\r\nCtrl-Break pressed.  Cancel batch file? (Yes/No/All) "
+STRING_CANCEL_BATCH_FILE,          "\r\nStlaèené Ctrl-Break.  Cancel batch file? (Yes/No/All) "
 
 STRING_INVALID_OPERAND,            "Invalid operand."
 STRING_EXPECTED_CLOSE_PAREN,       "Oèakávaná ')'."
index 4eae18b..8c356e6 100755 (executable)
@@ -48,6 +48,19 @@ SIZEDEFINITION LegalSizes[] = {
 };
 
 
+int LoadStringAndOem(HINSTANCE hInst,
+               UINT uID,
+               LPTSTR szStr,
+               int Siz
+)      
+{
+  TCHAR szTmp[RC_STRING_MAX_SIZE];
+  int res = LoadString(hInst, uID, szTmp, sizeof(szTmp)); 
+  CharToOem(szTmp, szStr);
+  return(res);
+}
+
+
 //----------------------------------------------------------------------
 //
 // PrintWin32Error
@@ -171,7 +184,7 @@ FormatExCallback (
 
        case PROGRESS:
                percent = (PDWORD) Argument;
-               LoadString( GetModuleHandle(NULL), STRING_COMPLETE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_COMPLETE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                _tprintf(szMsg, *percent);
                break;
 
@@ -184,7 +197,7 @@ FormatExCallback (
                status = (PBOOLEAN) Argument;
                if( *status == FALSE ) {
 
-                       LoadString( GetModuleHandle(NULL), STRING_FORMAT_FAIL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+                       LoadStringAndOem( GetModuleHandle(NULL), STRING_FORMAT_FAIL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                        _tprintf("%s", szMsg);
                        Error = TRUE;
                }
@@ -203,7 +216,7 @@ FormatExCallback (
        case UNKNOWND:
        case STRUCTUREPROGRESS:
        case CLUSTERSIZETOOSMALL:
-               LoadString( GetModuleHandle(NULL), STRING_NO_SUPPORT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_SUPPORT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                _tprintf("%s", szMsg);
                return FALSE;
        }
@@ -261,7 +274,7 @@ static VOID Usage( LPTSTR ProgramName )
        BYTE dummy;
        BOOLEAN lastestVersion;
 
-       LoadString( GetModuleHandle(NULL), STRING_HELP, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+       LoadStringAndOem( GetModuleHandle(NULL), STRING_HELP, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
        if (!LoadFMIFSEntryPoints())
        {
                _tprintf(szMsg, ProgramName, _T(""));
@@ -319,7 +332,7 @@ _tmain(int argc, TCHAR *argv[])
        // Get function pointers
        //
        if( !LoadFMIFSEntryPoints()) {
-               LoadString( GetModuleHandle(NULL), STRING_FMIFS_FAIL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_FMIFS_FAIL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                _tprintf("%s", szMsg);
                return -1;
        }
@@ -329,7 +342,7 @@ _tmain(int argc, TCHAR *argv[])
        //
        if( (badArg = ParseCommandLine( argc, argv ))) {
 
-               LoadString( GetModuleHandle(NULL), STRING_UNKNOW_ARG, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_UNKNOW_ARG, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                _tprintf(szMsg, argv[badArg] );
 
                Usage(argv[0]);
@@ -341,7 +354,7 @@ _tmain(int argc, TCHAR *argv[])
        //
        if( !Drive ) {
 
-               LoadString( GetModuleHandle(NULL), STRING_DRIVE_PARM, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_DRIVE_PARM, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                _tprintf(szMsg);
                Usage( argv[0] );
                return -1;
@@ -359,7 +372,7 @@ _tmain(int argc, TCHAR *argv[])
        driveType = GetDriveType( RootDirectory );
 
        if( driveType == 0 ) {
-               LoadString( GetModuleHandle(NULL), STRING_ERROR_DRIVE_TYPE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_ERROR_DRIVE_TYPE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                PrintWin32Error( szMsg, GetLastError());
                return -1;
        }
@@ -371,7 +384,7 @@ _tmain(int argc, TCHAR *argv[])
        }
 
        if( driveType != DRIVE_FIXED ) {
-               LoadString( GetModuleHandle(NULL), STRING_INSERT_DISK, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_INSERT_DISK, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                _tprintf(szMsg, RootDirectory[0] );
                _fgetts( input, sizeof(input)/2, stdin );
 
@@ -386,7 +399,7 @@ _tmain(int argc, TCHAR *argv[])
                                                &serialNumber, &maxComponent, &flags,
                                                fileSystem, sizeof(fileSystem)/2)) {
 
-               LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                PrintWin32Error( szMsg, GetLastError());
                return -1;
        }
@@ -396,11 +409,11 @@ _tmain(int argc, TCHAR *argv[])
                        &totalNumberOfBytes,
                        &totalNumberOfFreeBytes )) {
 
-               LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME_SIZE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME_SIZE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                PrintWin32Error( szMsg, GetLastError());
                return -1;
        }
-       LoadString( GetModuleHandle(NULL), STRING_FILESYSTEM, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+       LoadStringAndOem( GetModuleHandle(NULL), STRING_FILESYSTEM, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
        _tprintf(szMsg, fileSystem );
 
        //
@@ -412,7 +425,7 @@ _tmain(int argc, TCHAR *argv[])
 
                        while(1 ) {
 
-                               LoadString( GetModuleHandle(NULL), STRING_LABEL_NAME_EDIT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+                               LoadStringAndOem( GetModuleHandle(NULL), STRING_LABEL_NAME_EDIT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                                _tprintf(szMsg, RootDirectory[0] );
                                _fgetts( input, sizeof(input)/2, stdin );
                                input[ _tcslen( input ) - 1] = 0;
@@ -421,15 +434,15 @@ _tmain(int argc, TCHAR *argv[])
 
                                        break;
                                }
-                               LoadString( GetModuleHandle(NULL), STRING_ERROR_LABEL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+                               LoadStringAndOem( GetModuleHandle(NULL), STRING_ERROR_LABEL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                                _tprintf("%s", szMsg);
                        }
                }
 
-               LoadString( GetModuleHandle(NULL), STRING_YN_FORMAT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_YN_FORMAT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                _tprintf(szMsg, RootDirectory[0] );
 
-               LoadString( GetModuleHandle(NULL), STRING_YES_NO_FAQ, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_YES_NO_FAQ, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
 
                while( 1 ) {
                        _fgetts( input, sizeof(input)/2, stdin );
@@ -460,7 +473,7 @@ _tmain(int argc, TCHAR *argv[])
                }
        } else {
 
-               LoadString( GetModuleHandle(NULL), STRING_FAST_FMT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_FAST_FMT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                if( totalNumberOfBytes.QuadPart > 1024*1024*10 ) {
 
                        _tprintf(_T("%s %luM\n"),szMsg, (DWORD) (totalNumberOfBytes.QuadPart/(1024*1024)));
@@ -470,7 +483,7 @@ _tmain(int argc, TCHAR *argv[])
                        _tprintf(_T("%s %.2fM\n"),szMsg,
                                ((float)(LONGLONG)totalNumberOfBytes.QuadPart)/(float)(1024.0*1024.0));
                }
-               LoadString( GetModuleHandle(NULL), STRING_CREATE_FSYS, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_CREATE_FSYS, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                _tprintf("%s", szMsg);
        }
 
@@ -488,7 +501,7 @@ _tmain(int argc, TCHAR *argv[])
                        ClusterSize, FormatExCallback );
 #endif
        if( Error ) return -1;
-       LoadString( GetModuleHandle(NULL), STRING_FMT_COMPLETE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+       LoadStringAndOem( GetModuleHandle(NULL), STRING_FMT_COMPLETE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
        _tprintf("%s", szMsg);
 
        //
@@ -503,7 +516,7 @@ _tmain(int argc, TCHAR *argv[])
                if( !EnableVolumeCompression( RootDirectory, TRUE )) {
 #endif
 
-                       LoadString( GetModuleHandle(NULL), STRING_VOL_COMPRESS, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+                       LoadStringAndOem( GetModuleHandle(NULL), STRING_VOL_COMPRESS, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                        _tprintf("%s", szMsg);
                }
        }
@@ -520,7 +533,7 @@ _tmain(int argc, TCHAR *argv[])
                input[ _tcslen(input)-1] = 0;
                if( !SetVolumeLabel( RootDirectory, input )) {
 
-                       LoadString( GetModuleHandle(NULL), STRING_NO_LABEL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+                       LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_LABEL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                        PrintWin32Error(szMsg, GetLastError());
                        return -1;
                }
@@ -531,7 +544,7 @@ _tmain(int argc, TCHAR *argv[])
                                                &serialNumber, &maxComponent, &flags,
                                                fileSystem, sizeof(fileSystem)/2)) {
 
-               LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                PrintWin32Error( szMsg, GetLastError());
                return -1;
        }
@@ -544,12 +557,12 @@ _tmain(int argc, TCHAR *argv[])
                        &totalNumberOfBytes,
                        &totalNumberOfFreeBytes )) {
 
-               LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME_SIZE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME_SIZE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                PrintWin32Error(szMsg, GetLastError());
                return -1;
        }
 
-       LoadString( GetModuleHandle(NULL), STRING_FREE_SPACE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+       LoadStringAndOem( GetModuleHandle(NULL), STRING_FREE_SPACE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
        _tprintf(szMsg, totalNumberOfBytes.QuadPart, totalNumberOfFreeBytes.QuadPart );
 
        //
@@ -560,11 +573,11 @@ _tmain(int argc, TCHAR *argv[])
                                                &serialNumber, &maxComponent, &flags,
                                                fileSystem, sizeof(fileSystem)/2)) {
 
-               LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+               LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
                PrintWin32Error( szMsg, GetLastError());
                return -1;
        }
-       LoadString( GetModuleHandle(NULL), STRING_SERIAL_NUMBER, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
+       LoadStringAndOem( GetModuleHandle(NULL), STRING_SERIAL_NUMBER, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
        _tprintf(szMsg, (unsigned int)(serialNumber >> 16),
                                        (unsigned int)(serialNumber & 0xFFFF) );
 
index deaee25..c40b08f 100644 (file)
@@ -1,6 +1,6 @@
 /* TRANSLATOR :  M rio Ka\9fm r /Mario Kacmar/ aka Kario (kario@szm.sk)
  * DATE OF TR.:  15-02-2008
- * LAST CHANGE:  08-08-2008
+ * LAST CHANGE:  10-08-2010
  */
 
 #include "resource.h"
@@ -14,14 +14,14 @@ STRING_HELP,  "Pou
   -FS:syst\82m s£borov  Ur\9fuje typ s£borov\82ho syst\82mu (%s).\n\
   -V:menovka          Ur\9fuje menovku zv\84zku.\n\
   -Q                  Vykon va rìchle form tovanie.\n\
-  -A:ve\96kos\9c          Overrides the default allocation unit size. Default settings\n\
-                      are strongly recommended for general use\n\
-                      NTFS supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.\n\
-                      FAT supports 8192, 16K, 32K, 64K, 128K, 256K.\n\
-                      NTFS compression is not supported for allocation unit sizes\n\
-                      above 4096.\n\
-  -C                  Files created on the new volume will be compressed by\n\
-                      default.\n\n"
+  -A:ve\96kos\9c          Prep¡çe predvolen£ ve\96kos\9c aloka\9fnej jednotky. Pre vçeobecn\82\n\
+                      pou§itie s£ d\93razne odpor£\9fan\82 predvolen\82 nastavenia\n\
+                      NTFS podporuje 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.\n\
+                      FAT podporuje 8192, 16K, 32K, 64K, 128K, 256K.\n\
+                      NTFS kompresia nie je podporovan  pre ve\96kosti aloka\9fnej\n\
+                      jednotky nad 4096.\n\
+  -C                  S£bory vytvoren\82 na novom zv\84zku bud£ automaticky\n\
+                      komprimovan\82.\n\n"
 
 STRING_COMPLETE   "Dokon\9fen\82 na %lu percent.\r"
 
@@ -29,19 +29,19 @@ STRING_FORMAT_FAIL "FormatEx nebol schopn
 
 STRING_NO_SUPPORT  "Oper cia nie je podporovan "
 
-STRING_FMIFS_FAIL  "Could not located FMIFS entry points.\n\n"
+STRING_FMIFS_FAIL  "Nepodarilo sa lokalizova\9c vstupn\82 body FMIFS.\n\n"
 
 STRING_UNKNOW_ARG  "Nezn my argument: %s\n"
 
 STRING_DRIVE_PARM  "Chìba nevyhnutnì parameter jednotky.\n\n"
 
-STRING_ERROR_DRIVE_TYPE  "Could not get drive type"
+STRING_ERROR_DRIVE_TYPE  "Nemo§no z¡ska\9c typ jednotky"
 
 STRING_INSERT_DISK       "Vlo§te nov£ disketu do jednotky %C:\na potom stla\9fte ENTER..."
 
-STRING_NO_VOLUME         "Could not query volume"
+STRING_NO_VOLUME         "Nemo§no dotazova\9c zv\84zok"
 
-STRING_NO_VOLUME_SIZE    "Could not query volume size"
+STRING_NO_VOLUME_SIZE    "Nemo§no dotazova\9c ve\96kos\9c zv\84zku"
 
 STRING_FILESYSTEM        "Typ syst\82mu s£borov je %s.\n"
 
@@ -49,8 +49,8 @@ STRING_LABEL_NAME_EDIT  "Vlo
 
 STRING_ERROR_LABEL     "Bola zadan  nespr vna menovka zv\84zku pre t£to jednotku.\n"
 
-STRING_YN_FORMAT       "\nWARNING, ALL DATA ON NON_REMOVABLE DISK\n\
-DRIVE %C: WILL BE LOST!\nProceed with Format (A/N)? "
+STRING_YN_FORMAT       "\nUPOZORNENIE: VæETKY éDAJE NA NIE_VYMENITE\95NEJ DISKOVEJ\n\
+JEDNOTKE %C: BUDé STRATEN\90!\nPokra\9fova\9c s form tovan¡m (A/N)? "
 
 STRING_YES_NO_FAQ      "AN"
 
index daabc67..08f49bd 100644 (file)
@@ -66,6 +66,19 @@ ULONG                BaudRate = 115200;
 
 BOOLEAN        DebugStartOfLine = TRUE;
 
+// We need to emulate these, because the original ones don't work in freeldr
+int __cdecl wctomb(char *mbchar, wchar_t wchar)
+{
+    *mbchar = wchar;
+    return 1;
+}
+
+int __cdecl mbtowc (wchar_t *wchar, const char *mbchar, size_t count)
+{
+    *wchar = *mbchar;
+    return 1;
+}
+
 VOID DebugInit(VOID)
 {
        if (DebugPort & RS232)
index 8f62abf..1b23167 100644 (file)
@@ -1,34 +1,19 @@
 /*
- * KSUSER.DLL - ReactOS 
- *
- * Copyright 2008 Magnus Olsen and Dmitry Chapyshev
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301, USA
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS Kernel Streaming
+ * FILE:            dll/directx/ksuser/ksuser.c
+ * PURPOSE:         KS USER functions
+ * PROGRAMMER:      Magnus Olsen and Dmitry Chapyshev and Johannes Anderwald
  */
 
-
 #include "ksuser.h"
 #define NDEBUG
 #include <debug.h>
 
-NTSTATUS NTAPI  KsiCreateObjectType( HANDLE hHandle, PVOID guidstr, PVOID Buffer, ULONG BufferSize, ACCESS_MASK DesiredAccess, PHANDLE phHandle);
-
 NTSTATUS
 NTAPI
 KsiCreateObjectType( HANDLE hHandle,
-                     PVOID IID,
+                     LPWSTR ObjectType,
                      PVOID Buffer,
                      ULONG BufferSize,
                      ACCESS_MASK DesiredAccess,
@@ -42,31 +27,56 @@ KsiCreateObjectType( HANDLE hHandle,
     OBJECT_ATTRIBUTES ObjectAttributes;
     IO_STATUS_BLOCK IoStatusBlock;
 
-    Length = wcslen(IID);
+    /* get length of object type */
+    Length = wcslen(ObjectType);
+
+    /* get length for request */
+    TotalSize = (Length * sizeof(WCHAR)) + BufferSize;
 
-    TotalSize = (Length * sizeof(WCHAR)) + BufferSize + 4 * sizeof(WCHAR);
+    /* append space for '\\'*/
+    TotalSize += sizeof(WCHAR);
 
+    /* allocate buffer */
     pStr = HeapAlloc(GetProcessHeap(), 0, TotalSize);
     if (!pStr)
-        return STATUS_INSUFFICIENT_RESOURCES;
-    pStr[0] = L'\\';
-    wcscpy(&pStr[1], (LPWSTR)IID);
-    pStr[Length+1] = L'\\';
-    memcpy(&pStr[Length+2], Buffer, BufferSize);
-    pStr[Length+3+(BufferSize/sizeof(WCHAR))] = L'\0';
+    {
+        /* out of memory */
+        return ERROR_NOT_ENOUGH_MEMORY;
+    }
+
+    /* copy object type */
+    wcscpy(pStr, ObjectType);
 
-    RtlInitUnicodeString(&ObjectName, pStr);
+    /* append slash */
+    pStr[Length] = L'\\';
+
+    /* append parameters */
+    memcpy(&pStr[Length+1], Buffer, BufferSize);
+
+    /* initialize object name */
+    ObjectName.Buffer = pStr;
     ObjectName.Length = ObjectName.MaximumLength = TotalSize;
 
+    /* initialize object attributes */
     InitializeObjectAttributes(&ObjectAttributes, &ObjectName, OBJ_CASE_INSENSITIVE, hHandle, NULL);
 
+    /* create the object */
     Status = NtCreateFile(phHandle, DesiredAccess, &ObjectAttributes, &IoStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL, 0, 1, 0, NULL, 0);
+
+    /* free buffer */
     HeapFree(GetProcessHeap(), 0, pStr);
+
+    /* check for success */
     if (!NT_SUCCESS(Status))
     {
+        /* failed zero handle */
         *phHandle = INVALID_HANDLE_VALUE;
+
+        /* convert error code */
         Status = RtlNtStatusToDosError(Status);
     }
+
+    /* done */
     return Status;
 }
 
index 30373f3..1cfb8c8 100644 (file)
@@ -256,7 +256,7 @@ LdrpQueryAppPaths(IN PCWSTR ImageName)
     /* Copy it to the heap allocd memory */
     Path = RtlAllocateHeap(RtlGetProcessHeap(),
                            0,
-                           wcslen(SearchPathBuffer) * sizeof(WCHAR));
+                           (wcslen(SearchPathBuffer) + 1) * sizeof(WCHAR));
 
     if (!Path)
     {
index 604dcb2..246fbc5 100644 (file)
@@ -143,18 +143,37 @@ LsaDelete(IN LSA_HANDLE ObjectHandle)
 
 
 /*
- * @unimplemented
+ * @implemented
  */
 NTSTATUS
 WINAPI
-LsaAddAccountRights(
-    LSA_HANDLE PolicyHandle,
-    PSID AccountSid,
-    PLSA_UNICODE_STRING UserRights,
-    ULONG CountOfRights)
+LsaAddAccountRights(IN LSA_HANDLE PolicyHandle,
+                    IN PSID AccountSid,
+                    IN PLSA_UNICODE_STRING UserRights,
+                    IN ULONG CountOfRights)
 {
-    FIXME("(%p,%p,%p,0x%08x) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights);
-    return STATUS_OBJECT_NAME_NOT_FOUND;
+    LSAPR_USER_RIGHT_SET UserRightSet;
+    NTSTATUS Status;
+
+    TRACE("(%p,%p,%p,0x%08x) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights);
+
+    UserRightSet.Entries = CountOfRights;
+    UserRightSet.UserRights = (PRPC_UNICODE_STRING)UserRights;
+
+    RpcTryExcept
+    {
+        Status = LsarAddAccountRights((LSAPR_HANDLE)PolicyHandle,
+                                      (PRPC_SID)AccountSid,
+                                      &UserRightSet);
+
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return Status;
 }
 
 
@@ -265,6 +284,7 @@ LsaCreateTrustedDomainEx(
     return STATUS_SUCCESS;
 }
 
+
 /*
  * @implemented
  */
@@ -291,16 +311,16 @@ LsaDeleteTrustedDomain(IN LSA_HANDLE PolicyHandle,
     return Status;
 }
 
+
 /*
  * @implemented
  */
 NTSTATUS
 WINAPI
-LsaEnumerateAccountRights(
-    LSA_HANDLE PolicyHandle,
-    PSID AccountSid,
-    PLSA_UNICODE_STRING *UserRights,
-    PULONG CountOfRights)
+LsaEnumerateAccountRights(IN LSA_HANDLE PolicyHandle,
+                          IN PSID AccountSid,
+                          OUT PLSA_UNICODE_STRING *UserRights,
+                          OUT PULONG CountOfRights)
 {
     LSAPR_USER_RIGHT_SET UserRightsSet;
     NTSTATUS Status;
@@ -333,6 +353,7 @@ LsaEnumerateAccountRights(
     return Status;
 }
 
+
 /*
  * @unimplemented
  */
@@ -385,17 +406,19 @@ LsaEnumerateTrustedDomainsEx(
     return STATUS_SUCCESS;
 }
 
+
 /*
  * @implemented
  */
 NTSTATUS
 WINAPI
-LsaFreeMemory(PVOID Buffer)
+LsaFreeMemory(IN PVOID Buffer)
 {
     TRACE("(%p)\n", Buffer);
     return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
 }
 
+
 /*
  * @implemented
  */
@@ -446,6 +469,7 @@ LsaLookupNames(IN LSA_HANDLE PolicyHandle,
     return Status;
 }
 
+
 /*
  * @unimplemented
  */
@@ -470,8 +494,9 @@ LsaLookupNames2(
     return STATUS_NONE_MAPPED;
 }
 
+
 /*
- * @unmplemented
+ * @implemented
  */
 NTSTATUS
 WINAPI
@@ -504,6 +529,7 @@ LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle,
     return Status;
 }
 
+
 /*
  * @implemented
  */
@@ -535,6 +561,7 @@ LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle,
     return Status;
 }
 
+
 /*
  * @implemented
  */
@@ -591,6 +618,7 @@ LsaLookupSids(IN LSA_HANDLE PolicyHandle,
     return Status;
 }
 
+
 /******************************************************************************
  * LsaNtStatusToWinError
  *
@@ -599,7 +627,8 @@ LsaLookupSids(IN LSA_HANDLE PolicyHandle,
  *
  * @implemented
  */
-ULONG WINAPI
+ULONG
+WINAPI
 LsaNtStatusToWinError(IN NTSTATUS Status)
 {
     TRACE("(%lx)\n", Status);
@@ -747,6 +776,7 @@ LsaQueryForestTrustInformation(
     return STATUS_NOT_IMPLEMENTED;
 }
 
+
 /*
  * @implemented
  */
@@ -782,52 +812,94 @@ LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle,
     return Status;
 }
 
+
 /*
  * @unimplemented
  */
 NTSTATUS
 WINAPI
-LsaQueryTrustedDomainInfoByName(
+LsaQueryTrustedDomainInfo(
     LSA_HANDLE PolicyHandle,
-    PLSA_UNICODE_STRING TrustedDomainName,
+    PSID TrustedDomainSid,
     TRUSTED_INFORMATION_CLASS InformationClass,
     PVOID *Buffer)
 {
-    FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainName, InformationClass, Buffer);
+    FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainSid, InformationClass, Buffer);
     return STATUS_OBJECT_NAME_NOT_FOUND;
 }
 
+
 /*
- * @unimplemented
+ * @implemented
  */
 NTSTATUS
 WINAPI
-LsaQueryTrustedDomainInfo(
-    LSA_HANDLE PolicyHandle,
-    PSID TrustedDomainSid,
-    TRUSTED_INFORMATION_CLASS InformationClass,
-    PVOID *Buffer)
+LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle,
+                                IN PLSA_UNICODE_STRING TrustedDomainName,
+                                IN TRUSTED_INFORMATION_CLASS InformationClass,
+                                OUT PVOID *Buffer)
 {
-    FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainSid, InformationClass, Buffer);
-    return STATUS_OBJECT_NAME_NOT_FOUND;
+    NTSTATUS Status;
+
+    TRACE("(%p,%p,%d,%p)\n", PolicyHandle, TrustedDomainName, InformationClass, Buffer);
+
+    if (InformationClass == TrustedDomainAuthInformationInternal ||
+        InformationClass == TrustedDomainFullInformationInternal)
+        return STATUS_INVALID_INFO_CLASS;
+
+    RpcTryExcept
+    {
+        Status = LsarQueryTrustedDomainInfoByName((LSAPR_HANDLE)PolicyHandle,
+                                                  (PRPC_UNICODE_STRING)TrustedDomainName,
+                                                  InformationClass,
+                                                  (unsigned long *)Buffer); // Shuld be: (PLSAPR_POLICY_INFORMATION *)Buffer
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return Status;
 }
 
+
 /*
- * @unimplemented
+ * @implemented
  */
 NTSTATUS
 WINAPI
-LsaRemoveAccountRights(
-    LSA_HANDLE PolicyHandle,
-    PSID AccountSid,
-    BOOLEAN AllRights,
-    PLSA_UNICODE_STRING UserRights,
-    ULONG CountOfRights)
+LsaRemoveAccountRights(IN LSA_HANDLE PolicyHandle,
+                       IN PSID AccountSid,
+                       IN BOOLEAN AllRights,
+                       IN PLSA_UNICODE_STRING UserRights,
+                       IN ULONG CountOfRights)
 {
-    FIXME("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle, AccountSid, AllRights, UserRights, CountOfRights);
+    LSAPR_USER_RIGHT_SET UserRightSet;
+    NTSTATUS Status;
+
+    TRACE("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle, AccountSid, AllRights, UserRights, CountOfRights);
+
+    UserRightSet.Entries = CountOfRights;
+    UserRightSet.UserRights = (PRPC_UNICODE_STRING)UserRights;
+
+    RpcTryExcept
+    {
+        Status = LsarRemoveAccountRights((LSAPR_HANDLE)PolicyHandle,
+                                         (PRPC_SID)AccountSid,
+                                         AllRights,
+                                         &UserRightSet);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        Status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
     return STATUS_SUCCESS;
 }
 
+
 /*
  * @unimplemented
  */
index d46a51c..d57bd7a 100644 (file)
@@ -413,7 +413,7 @@ RaiseException(IN DWORD dwExceptionCode,
         }
     }
 
-    if (dwExceptionCode == 0xeedface)
+    if (dwExceptionCode == 0xeedface || dwExceptionCode == 0xeedfade)
     {
         DPRINT1("Delphi Exception at address: %p\n", ExceptionRecord.ExceptionInformation[0]);
         DPRINT1("Exception-Object: %p\n", ExceptionRecord.ExceptionInformation[1]);
index 14b9a4a..5238d60 100644 (file)
@@ -2860,7 +2860,7 @@ Initialize(TcpipConfNotifyImpl * This)
                 }
                 pCurSettings->AutoconfigActive = pPerInfo->AutoconfigActive;
             }
-            CoTaskMemFree(pInfo);
+            CoTaskMemFree(pPerInfo);
         }
     }
 
index ccff5e6..e995e8f 100644 (file)
@@ -1987,10 +1987,47 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(
     PCWSTR pszFilter, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags,
     HMACHINE hMachine)
 {
-    FIXME("%p %p %ld %ld %lx\n",
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    CONFIGRET ret;
+
+    TRACE("%p %p %ld %ld %lx\n",
           pszFilter, Buffer, BufferLen, ulFlags, hMachine);
-    memset(Buffer,0,2);
-    return CR_SUCCESS;
+
+    if (Buffer == NULL || BufferLen == 0)
+        return CR_INVALID_POINTER;
+
+    if (ulFlags & ~CM_GETIDLIST_FILTER_BITS)
+        return CR_INVALID_FLAG;
+
+    if (hMachine != NULL)
+    {
+        BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+        if (BindingHandle == NULL)
+            return CR_FAILURE;
+    }
+    else
+    {
+        if (!PnpGetLocalHandles(&BindingHandle, NULL))
+            return CR_FAILURE;
+    }
+
+    *Buffer = 0;
+
+    RpcTryExcept
+    {
+        ret = PNP_GetDeviceList(BindingHandle,
+                                pszFilter,
+                                Buffer,
+                                &BufferLen,
+                                ulFlags);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return ret;
 }
 
 
index 2e8cce5..8f70e74 100644 (file)
@@ -395,7 +395,6 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive)
       {
          WCHAR szResult[128];
          LONGLONG Result;
-#ifdef IOCTL_DISK_GET_LENGTH_INFO_IMPLEMENTED
          HANDLE hVolume;
          DWORD BytesReturned = 0;
 
@@ -404,16 +403,13 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive)
          if (hVolume != INVALID_HANDLE_VALUE)
          {
             ret = DeviceIoControl(hVolume, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, (LPVOID)&TotalNumberOfBytes, sizeof(ULARGE_INTEGER), &BytesReturned, NULL);
-            if (ret && StrFormatByteSizeW(LengthInformation.Length.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
+            if (ret && StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
                SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);
 
             CloseHandle(hVolume);
          }
-         TRACE("szResult %s hVOlume %p ret %d LengthInformation %ul Bytesreturned %d\n", debugstr_w(szResult), hVolume, ret, LengthInformation.Length.QuadPart, BytesReturned);
-#else
-            if (ret && StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
-               SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);
-#endif
+
+         TRACE("szResult %s hVOlume %p ret %d LengthInformation %ul Bytesreturned %d\n", debugstr_w(szResult), hVolume, ret, TotalNumberOfBytes.QuadPart, BytesReturned);
 
          if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
              SendDlgItemMessageW(hwndDlg, 14003, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);
index 0d8fe4c..ffdbe03 100644 (file)
@@ -46,6 +46,7 @@ add_importlibs(shlwapi
     version
     shell32
     kernel32
+    msvcrt
     ntdll)
 
 
index b848225..7df8e25 100644 (file)
@@ -154,49 +154,18 @@ CallMsgFilterA(
   LPMSG lpMsg,
   int nCode)
 {
-   BOOL ret = FALSE;
-
-  if (nCode != HCBT_CREATEWND) ret = NtUserCallMsgFilter((LPMSG) lpMsg, nCode);
-  else
+  MSG Msg;
+  if (NtCurrentTeb()->Win32ThreadInfo && IsThreadHooked(GetWin32ClientInfo()))
+  {
+     if ( lpMsg->message & ~WM_MAXIMUM )
      {
-        UNICODE_STRING usBuffer;
-        CBT_CREATEWNDA *cbtcwA = (CBT_CREATEWNDA *)lpMsg->lParam;
-        CBT_CREATEWNDW cbtcwW;
-        CREATESTRUCTW csW;
-        MSG Msg;
-
-        Msg.hwnd = lpMsg->hwnd;
-        Msg.message = lpMsg->message;
-        Msg.time = lpMsg->time;
-        Msg.pt = lpMsg->pt;
-        Msg.wParam = lpMsg->wParam;
-
-        cbtcwW.lpcs = &csW;
-        cbtcwW.hwndInsertAfter = cbtcwA->hwndInsertAfter;
-        csW = *(CREATESTRUCTW *)cbtcwA->lpcs;
-
-        if (HIWORD(cbtcwA->lpcs->lpszName))
-        {
-            RtlCreateUnicodeStringFromAsciiz(&usBuffer,cbtcwA->lpcs->lpszName);
-            csW.lpszName = usBuffer.Buffer;
-        }
-        if (HIWORD(cbtcwA->lpcs->lpszClass))
-        {
-            RtlCreateUnicodeStringFromAsciiz(&usBuffer,cbtcwA->lpcs->lpszClass);
-            csW.lpszClass = usBuffer.Buffer;
-        }
-        Msg.lParam =(LPARAM) &cbtcwW;
-
-        ret = NtUserCallMsgFilter((LPMSG)&Msg, nCode);
-
-        lpMsg->time = Msg.time;
-        lpMsg->pt = Msg.pt;
-
-        cbtcwA->hwndInsertAfter = cbtcwW.hwndInsertAfter;
-        if (HIWORD(csW.lpszName)) HeapFree( GetProcessHeap(), 0, (LPWSTR)csW.lpszName );
-        if (HIWORD(csW.lpszClass)) HeapFree( GetProcessHeap(), 0, (LPWSTR)csW.lpszClass );
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
      }
-  return ret;
+     RtlCopyMemory(&Msg, lpMsg, sizeof(MSG));
+     return NtUserCallMsgFilter( &Msg, nCode);
+  }
+  return FALSE;
 }
 
 
@@ -209,7 +178,18 @@ CallMsgFilterW(
   LPMSG lpMsg,
   int nCode)
 {
-  return  NtUserCallMsgFilter((LPMSG) lpMsg, nCode);
+  MSG Msg;
+  if (NtCurrentTeb()->Win32ThreadInfo && IsThreadHooked(GetWin32ClientInfo()))
+  {
+     if ( lpMsg->message & ~WM_MAXIMUM )
+     {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+     }
+     RtlCopyMemory(&Msg, lpMsg, sizeof(MSG));
+     return  NtUserCallMsgFilter( &Msg, nCode);
+  }
+  return FALSE;
 }
 
 
@@ -454,7 +434,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
   PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra = NULL;
   KBDLLHOOKSTRUCT KeyboardLlData, *pKeyboardLlData;
   MSLLHOOKSTRUCT MouseLlData, *pMouseLlData;
-  MSG Msg, *pMsg;
+  MSG *pcMsg, *pMsg;
   PMOUSEHOOKSTRUCT pMHook;
   CWPSTRUCT CWP, *pCWP;
   CWPRETSTRUCT CWPR, *pCWPR;
@@ -471,18 +451,18 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
   {
     case WH_CBT:
     {
+      //ERR("WH_CBT: Code %d\n", Common->Code);
       switch(Common->Code)
       {
         case HCBT_CREATEWND:
           CbtCreatewndExtra = (PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS)
                               ((PCHAR) Common + Common->lParam);
-          Csw = CbtCreatewndExtra->Cs;
-          Csw.lpszName = CbtCreatewndExtra->Cs.lpszName;
-          Csw.lpszClass = CbtCreatewndExtra->Cs.lpszClass;
-          wParam = Common->wParam;
+          RtlCopyMemory(&Csw, &CbtCreatewndExtra->Cs, sizeof(CREATESTRUCTW));
           CbtCreatewndw.lpcs = &Csw;
           CbtCreatewndw.hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter;
+          wParam = Common->wParam;
           lParam = (LPARAM) &CbtCreatewndw;
+          //ERR("HCBT_CREATEWND: hWnd 0x%x Name 0x%x Class 0x%x\n", Common->wParam, Csw.lpszName, Csw.lpszClass);
           break;
         case HCBT_CLICKSKIPPED:
             pMHook = (PMOUSEHOOKSTRUCT)((PCHAR) Common + Common->lParam);
@@ -524,7 +504,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
       }
       else
       {
-         ERR("Common = 0x%x, Proc = 0x%x\n",Common,Common->Proc);
+         ERR("Null Proc! Common = 0x%x, Proc = 0x%x\n",Common,Common->Proc);
       }
       switch(Common->Code)
       {
@@ -539,12 +519,13 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
       break;
     }
     case WH_KEYBOARD_LL:
-      ERR("WH_KEYBOARD_LL: Code %d, wParam %d\n",Common->Code,Common->wParam);
+      //ERR("WH_KEYBOARD_LL: Code %d, wParam %d\n",Common->Code,Common->wParam);
       pKeyboardLlData = (PKBDLLHOOKSTRUCT)((PCHAR) Common + Common->lParam);
       RtlCopyMemory(&KeyboardLlData, pKeyboardLlData, sizeof(KBDLLHOOKSTRUCT));
       Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &KeyboardLlData);
       break;
     case WH_MOUSE_LL:
+      //ERR("WH_MOUSE_LL: Code %d, wParam %d\n",Common->Code,Common->wParam);
       pMouseLlData = (PMSLLHOOKSTRUCT)((PCHAR) Common + Common->lParam);
       RtlCopyMemory(&MouseLlData, pMouseLlData, sizeof(MSLLHOOKSTRUCT));
       Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &MouseLlData);
@@ -562,7 +543,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
       _SEH2_END;
       break;
     case WH_CALLWNDPROC:
-      ERR("WH_CALLWNDPROC: Code %d, wParam %d\n",Common->Code,Common->wParam);
+//      ERR("WH_CALLWNDPROC: Code %d, wParam %d\n",Common->Code,Common->wParam);
       pCWP = (PCWPSTRUCT)((PCHAR) Common + Common->lParam);
       RtlCopyMemory(&CWP, pCWP, sizeof(CWPSTRUCT));
       Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &CWP);
@@ -573,14 +554,15 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
       Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &CWPR);
       break;
     case WH_MSGFILTER: /* All SEH support */
-      ERR("WH_MSGFILTER: Code %d, wParam %d\n",Common->Code,Common->wParam);
     case WH_SYSMSGFILTER:
     case WH_GETMESSAGE:
       pMsg = (PMSG)((PCHAR) Common + Common->lParam);
-      RtlCopyMemory(&Msg, pMsg, sizeof(MSG));
+      pcMsg = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MSG));
+      RtlCopyMemory(pcMsg, pMsg, sizeof(MSG));
+//      ERR("pMsg %d  pcMsg %d\n",pMsg->message, pcMsg->message);
       _SEH2_TRY
       {
-         Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &Msg);
+         Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) pcMsg);
       }
       _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
       {
@@ -588,11 +570,14 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
       }
       _SEH2_END;
       if (!Hit && Common->HookId == WH_GETMESSAGE)
-         RtlCopyMemory(pMsg, &Msg, sizeof(MSG));
+         RtlCopyMemory(pMsg, pcMsg, sizeof(MSG));
+      HeapFree( GetProcessHeap(), 0, pcMsg );
       break;
-    case WH_FOREGROUNDIDLE: /* <-- SEH support */
     case WH_KEYBOARD:
     case WH_SHELL:
+      Result = Common->Proc(Common->Code, Common->wParam, Common->lParam);
+      break;    
+    case WH_FOREGROUNDIDLE: /* <-- SEH support */
       _SEH2_TRY
       {
          Result = Common->Proc(Common->Code, Common->wParam, Common->lParam);
index cce93e8..88df5b2 100644 (file)
@@ -171,7 +171,7 @@ WdmAudGetCapabilitiesByLegacy(
     {
         case MIXER_DEVICE_TYPE:
         {
-            LPMIXERCAPS MixerCaps = (LPMIXERCAPS) Capabilities;
+            LPMIXERCAPSW MixerCaps = (LPMIXERCAPSW) Capabilities;
 
             DeviceInfo.u.MixCaps.szPname[MAXPNAMELEN-1] = L'\0';
             CopyWideString(MixerCaps->szPname, DeviceInfo.u.MixCaps.szPname);
@@ -185,13 +185,13 @@ WdmAudGetCapabilitiesByLegacy(
         }
         case WAVE_OUT_DEVICE_TYPE :
         {
-            LPWAVEOUTCAPS WaveOutCaps = (LPWAVEOUTCAPS) Capabilities;
+            LPWAVEOUTCAPSW WaveOutCaps = (LPWAVEOUTCAPSW) Capabilities;
 
             DeviceInfo.u.WaveOutCaps.szPname[MAXPNAMELEN-1] = L'\0';
             WaveOutCaps->wMid = DeviceInfo.u.WaveOutCaps.wMid;
             WaveOutCaps->wPid = DeviceInfo.u.WaveOutCaps.wPid;
 
-            WaveOutCaps->vDriverVersion = 0x0001;
+            WaveOutCaps->vDriverVersion = DeviceInfo.u.WaveOutCaps.vDriverVersion;
             CopyWideString(WaveOutCaps->szPname, DeviceInfo.u.WaveOutCaps.szPname);
 
             WaveOutCaps->dwFormats = DeviceInfo.u.WaveOutCaps.dwFormats;
@@ -208,7 +208,7 @@ WdmAudGetCapabilitiesByLegacy(
             WaveInCaps->wMid = DeviceInfo.u.WaveInCaps.wMid;
             WaveInCaps->wPid = DeviceInfo.u.WaveInCaps.wPid;
 
-            WaveInCaps->vDriverVersion = 0x0001;
+            WaveInCaps->vDriverVersion = DeviceInfo.u.WaveInCaps.vDriverVersion;
             CopyWideString(WaveInCaps->szPname, DeviceInfo.u.WaveInCaps.szPname);
 
             WaveInCaps->dwFormats = DeviceInfo.u.WaveInCaps.dwFormats;
@@ -216,6 +216,34 @@ WdmAudGetCapabilitiesByLegacy(
             WaveInCaps->wReserved1 = 0;
             break;
         }
+        case MIDI_IN_DEVICE_TYPE :
+        {
+            LPMIDIINCAPSW MidiInCaps = (LPMIDIINCAPSW)Capabilities;
+
+            DeviceInfo.u.MidiInCaps.szPname[MAXPNAMELEN-1] = L'\0';
+
+            MidiInCaps->vDriverVersion = DeviceInfo.u.MidiInCaps.vDriverVersion;
+            MidiInCaps->wMid = DeviceInfo.u.MidiInCaps.wMid;
+            MidiInCaps->wPid = DeviceInfo.u.MidiInCaps.wPid;
+            MidiInCaps->dwSupport = DeviceInfo.u.MidiInCaps.dwSupport;
+
+            CopyWideString(MidiInCaps->szPname, DeviceInfo.u.MidiInCaps.szPname);
+            break;
+        }
+        case MIDI_OUT_DEVICE_TYPE :
+        {
+            LPMIDIOUTCAPSW MidiOutCaps = (LPMIDIOUTCAPSW)Capabilities;
+
+            DeviceInfo.u.MidiOutCaps.szPname[MAXPNAMELEN-1] = L'\0';
+
+            MidiOutCaps->vDriverVersion = DeviceInfo.u.MidiOutCaps.vDriverVersion;
+            MidiOutCaps->wMid = DeviceInfo.u.MidiOutCaps.wMid;
+            MidiOutCaps->wPid = DeviceInfo.u.MidiOutCaps.wPid;
+            MidiOutCaps->dwSupport = DeviceInfo.u.MidiOutCaps.dwSupport;
+
+            CopyWideString(MidiOutCaps->szPname, DeviceInfo.u.MidiOutCaps.szPname);
+            break;
+        }
     }
 
     return MMSYSERR_NOERROR;
index c47b651..a3a021c 100644 (file)
@@ -655,17 +655,46 @@ WdmAudSetWaveStateByMMixer(
     IN  struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
     IN BOOL bStart)
 {
-    if (bStart)
+    MMDEVICE_TYPE DeviceType;
+    PSOUND_DEVICE SoundDevice;
+    MMRESULT Result;
+
+    Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice);
+    SND_ASSERT( Result == MMSYSERR_NOERROR );
+
+
+    Result = GetSoundDeviceType(SoundDevice, &DeviceType);
+    SND_ASSERT( Result == MMSYSERR_NOERROR );
+
+    if (DeviceType == WAVE_IN_DEVICE_TYPE || DeviceType == WAVE_OUT_DEVICE_TYPE)
     {
-        MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
-        MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
-        MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_RUN);
+        if (bStart)
+        {
+            MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
+            MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
+            MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_RUN);
+        }
+        else
+        {
+            MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
+            MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
+            MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_STOP);
+        }
     }
-    else
+    else if (DeviceType == MIDI_IN_DEVICE_TYPE || DeviceType == MIDI_OUT_DEVICE_TYPE)
     {
-        MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
-        MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
-        MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_STOP);
+        if (bStart)
+        {
+            MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
+            MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
+            MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_RUN);
+        }
+        else
+        {
+            MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
+            MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
+            MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_STOP);
+        }
     }
 
     return MMSYSERR_NOERROR;
index 67523eb..6255dee 100644 (file)
@@ -90,6 +90,12 @@ PopulateWdmDeviceList(
             FuncTable.CommitWaveBuffer = WriteFileEx_Remixer;
 #endif
         }
+        else if (DeviceType == MIDI_IN_DEVICE_TYPE || DeviceType == MIDI_OUT_DEVICE_TYPE)
+        {
+            FuncTable.SetWaveFormat = FUNC_NAME(WdmAudSetMixerDeviceFormat);
+            FuncTable.SetState = FUNC_NAME(WdmAudSetWaveState);
+            FuncTable.GetPos = FUNC_NAME(WdmAudGetWavePosition);
+        }
 
         SetSoundDeviceFunctionTable(SoundDevice, &FuncTable);
     }
index 32ba84d..fb36d6d 100644 (file)
@@ -661,6 +661,11 @@ KsProbeStreamIrp(
 
     if (Irp->RequestorMode == KernelMode || Irp->AssociatedIrp.SystemBuffer)
     {
+        if (Irp->RequestorMode == KernelMode)
+        {
+            /* no need to allocate stream header */
+            Irp->AssociatedIrp.SystemBuffer = Irp->UserBuffer;
+        }
 AllocMdl:
         /* check if alloc mdl flag is passed */
         if (!(ProbeFlags & KSPROBE_ALLOCATEMDL))
@@ -724,7 +729,16 @@ ProbeMdl:
                         Mdl = Irp->MdlAddress;
 
                         /* determine operation */
-                        Operation = (ProbeFlags & KSPROBE_STREAMWRITE) ? IoWriteAccess : IoReadAccess;
+                        if (!(ProbeFlags & KSPROBE_STREAMWRITE) || (ProbeFlags & KSPROBE_MODIFY))
+                        {
+                            /* operation is read / modify stream, need write access */
+                            Operation = IoWriteAccess;
+                        }
+                        else
+                        {
+                            /* operation is write to device, so we need read access */
+                            Operation = IoReadAccess;
+                        }
 
                         do
                         {
@@ -859,7 +873,8 @@ ProbeMdl:
                 if (StreamHeader->FrameExtent)
                 {
                     /* allocate an mdl */
-                    Mdl = IoAllocateMdl(StreamHeader->Data, StreamHeader->FrameExtent, Irp->MdlAddress != NULL, TRUE, Irp);
+                    ASSERT(Irp->MdlAddress == NULL);
+                    Mdl = IoAllocateMdl(StreamHeader->Data, StreamHeader->FrameExtent, FALSE, TRUE, Irp);
                     if (!Mdl)
                     {
                         /* not enough memory */
@@ -880,18 +895,14 @@ ProbeMdl:
 
         /* now probe the allocated mdl's */
         if (!NT_SUCCESS(Status))
-               {
+        {
             DPRINT("Status %x\n", Status);
             return Status;
-               }
+        }
         else
             goto ProbeMdl;
     }
 
-#if 0
-    // HACK for MS PORTCLS
-       HeaderSize = Length;
-#endif
     /* probe user mode buffers */
     if (Length && ( (!HeaderSize) || (Length % HeaderSize == 0) || ((ProbeFlags & KSPROBE_ALLOWFORMATCHANGE) && (Length == sizeof(KSSTREAM_HEADER))) ) )
     {
@@ -904,6 +915,9 @@ ProbeMdl:
             return STATUS_INSUFFICIENT_RESOURCES;
         }
 
+        /* mark irp as buffered so that changes the stream headers are propagated back */
+        Irp->Flags = IRP_DEALLOCATE_BUFFER | IRP_BUFFERED_IO;
+
         _SEH2_TRY
         {
             if (ProbeFlags & KSPROBE_STREAMWRITE)
@@ -917,6 +931,9 @@ ProbeMdl:
             {
                 /* stream reads means writing */
                 ProbeForWrite(Irp->UserBuffer, Length, sizeof(UCHAR));
+
+                /* set input operation flags */
+                Irp->Flags |= IRP_INPUT_OPERATION;
             }
 
             /* copy stream buffer */
@@ -1360,7 +1377,7 @@ KsRemoveIrpFromCancelableQueue(
     PLIST_ENTRY CurEntry;
     KIRQL OldIrql;
 
-    //DPRINT("KsRemoveIrpFromCancelableQueue ListHead %p SpinLock %p ListLocation %x RemovalOperation %x\n", QueueHead, SpinLock, ListLocation, RemovalOperation);
+    DPRINT("KsRemoveIrpFromCancelableQueue ListHead %p SpinLock %p ListLocation %x RemovalOperation %x\n", QueueHead, SpinLock, ListLocation, RemovalOperation);
 
     /* check parameters */
     if (!QueueHead || !SpinLock)
@@ -1619,19 +1636,32 @@ KsAddIrpToCancelableQueue(
     PIO_STACK_LOCATION IoStack;
     KIRQL OldLevel;
 
-    DPRINT("KsAddIrpToCancelableQueue QueueHead %p SpinLock %p Irp %p ListLocation %x DriverCancel %p\n", QueueHead, SpinLock, Irp, ListLocation, DriverCancel);
     /* check for required parameters */
     if (!QueueHead || !SpinLock || !Irp)
         return;
 
+    /* get current irp stack */
+    IoStack = IoGetCurrentIrpStackLocation(Irp);
+
+    DPRINT("KsAddIrpToCancelableQueue QueueHead %p SpinLock %p Irp %p ListLocation %x DriverCancel %p\n", QueueHead, SpinLock, Irp, ListLocation, DriverCancel);
+
+    // HACK for ms portcls
+    if (IoStack->MajorFunction == IRP_MJ_CREATE)
+    {
+        // complete the request
+        Irp->IoStatus.Status = STATUS_SUCCESS;
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+        return;
+    }
+
+
     if (!DriverCancel)
     {
         /* default to KsCancelRoutine */
         DriverCancel = KsCancelRoutine;
     }
 
-    /* get current irp stack */
-    IoStack = IoGetCurrentIrpStackLocation(Irp);
 
     /* acquire spinlock */
     KeAcquireSpinLock(SpinLock, &OldLevel);
@@ -1720,22 +1750,24 @@ FindMatchingCreateItem(
     PLIST_ENTRY Entry;
     PCREATE_ITEM_ENTRY CreateItemEntry;
     UNICODE_STRING RefString;
+    LPWSTR pStr;
 
+    /* get terminator */
+    pStr = wcschr(Buffer, L'\\');
 
-#ifndef MS_KSUSER
-    /* remove '\' slash */
-    Buffer++;
-    BufferSize -= sizeof(WCHAR);
-#endif
+    /* sanity check */
+    ASSERT(pStr != NULL);
 
-    if (!wcschr(Buffer, L'\\'))
+    if (pStr == Buffer)
     {
-        RtlInitUnicodeString(&RefString, Buffer);
+        // skip slash
+        RtlInitUnicodeString(&RefString, ++pStr);
     }
     else
     {
+        // request is for pin / node / allocator
         RefString.Buffer = Buffer;
-        RefString.Length = RefString.MaximumLength = ((ULONG_PTR)wcschr(Buffer, L'\\') - (ULONG_PTR)Buffer);
+        RefString.Length = BufferSize = RefString.MaximumLength = ((ULONG_PTR)pStr - (ULONG_PTR)Buffer);
     }
 
     /* point to first entry */
@@ -1963,12 +1995,6 @@ KsSetMajorFunctionHandler(
     IN  ULONG MajorFunction)
 {
     DPRINT("KsSetMajorFunctionHandler Function %x\n", MajorFunction);
-#if 1
-    // HACK
-    // for MS PORTCLS
-    //
-    DriverObject->MajorFunction[IRP_MJ_CREATE] = KspCreate;
-#endif
 
     switch ( MajorFunction )
     {
@@ -2006,7 +2032,7 @@ KsDispatchIrp(
     PKSIDEVICE_HEADER DeviceHeader;
     PDEVICE_EXTENSION DeviceExtension;
 
-    //DPRINT("KsDispatchIrp DeviceObject %p Irp %p\n", DeviceObject, Irp);
+    DPRINT("KsDispatchIrp DeviceObject %p Irp %p\n", DeviceObject, Irp);
 
     /* get device extension */
     DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;
index d6b1e26..057103d 100644 (file)
@@ -95,7 +95,7 @@ KspCopyCreateRequest(
     IoStack = IoGetCurrentIrpStackLocation(Irp);
 
     /* get object class length */
-    ObjectLength = (wcslen(ObjectClass) + 2) * sizeof(WCHAR);
+    ObjectLength = (wcslen(ObjectClass) + 1) * sizeof(WCHAR);
 
     /* check for minium length requirement */
     if (ObjectLength  + *Size > IoStack->FileObject->FileName.MaximumLength)
index 321f0ba..49ae659 100644 (file)
@@ -27,7 +27,7 @@ KspCreateObjectType(
 
     /* calculate request length */
     Name.Length = 0;
-    Name.MaximumLength = wcslen(ObjectType) * sizeof(WCHAR) + CreateParametersSize +  2 * sizeof(WCHAR);
+    Name.MaximumLength = wcslen(ObjectType) * sizeof(WCHAR) + CreateParametersSize +  1 * sizeof(WCHAR);
     Name.MaximumLength += sizeof(WCHAR);
     /* acquire request buffer */
     Name.Buffer = AllocateItem(NonPagedPool, Name.MaximumLength);
@@ -38,11 +38,10 @@ KspCreateObjectType(
         return STATUS_INSUFFICIENT_RESOURCES;
     }
 
-    /* build a request which looks like \{ObjectClass}\CreateParameters 
+    /* build a request which looks like {ObjectClass}\CreateParameters 
      * For pins the parent is the reference string used in registration
      * For clocks it is full path for pin\{ClockGuid}\ClockCreateParams
      */
-    RtlAppendUnicodeToString(&Name, L"\\");
     RtlAppendUnicodeToString(&Name, ObjectType);
     RtlAppendUnicodeToString(&Name, L"\\");
     /* append create parameters */
index a7085c4..5d62cfa 100644 (file)
@@ -2808,6 +2808,53 @@ Return Value:
         // Fall through and let the class driver process the request.
         //
 
+    case IOCTL_DISK_GET_LENGTH_INFO:
+
+        //
+        // Validate buffer length.
+        //
+
+        if (irpStack->Parameters.DeviceIoControl.OutputBufferLength <
+            sizeof(GET_LENGTH_INFORMATION)) {
+            status = STATUS_BUFFER_TOO_SMALL;
+
+        } else {
+
+            PGET_LENGTH_INFORMATION lengthInformation = Irp->AssociatedIrp.SystemBuffer;
+
+            //
+            // Update the geometry in case it has changed.
+            //
+
+            status = UpdateRemovableGeometry (DeviceObject, Irp);
+
+            if (!NT_SUCCESS(status)) {
+
+                //
+                // Note the drive is not ready.
+                //
+
+                diskData->DriveNotReady = TRUE;
+                break;
+            }
+
+            //
+            // Note the drive is now ready.
+            //
+
+            diskData->DriveNotReady = FALSE;
+
+            //
+            // Output data, and return
+            //
+
+            lengthInformation->Length.QuadPart = deviceExtension->PartitionLength.QuadPart;
+            status = STATUS_SUCCESS;
+            Irp->IoStatus.Information = sizeof(GET_LENGTH_INFORMATION);
+        }
+
+        break;
+
     default:
 
         //
index 34fed48..f311bcc 100644 (file)
@@ -35,7 +35,6 @@ const GUID CLSID_MiniportDriverUart = {0xb4c90ae1L, 0x5791, 0x11d0, {0x86, 0xf9,
 const GUID CLSID_MiniportDriverFmSynth = {0xb4c90ae0L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
 const GUID CLSID_MiniportDriverFmSynthWithVol = {0xe5a3c139L, 0xf0f2, 0x11d1, {0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}};
 
-
 const GUID IID_IPort =    {0xb4c90a25L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
 const GUID IID_IDrmPort = {0x286D3DF8L, 0xCA22, 0x4E2E, {0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE}};
 const GUID IID_IDrmPort2 = {0x1ACCE59CL, 0x7311, 0x4B6B, {0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE}};
@@ -46,6 +45,7 @@ const GUID IID_IPortMidi    = {0xb4c90a40L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0
 const GUID IID_IPortDMus    = {0xc096df9cL, 0xfb09, 0x11d1, {0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}};
 const GUID IID_IAdapterPowerManagement = {0x793417D0L, 0x35FE, 0x11D1, {0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0}};
 
+const GUID IID_IMiniport = {0xb4c90a24, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
 const GUID IID_IMiniportWaveCyclic = {0xb4c90a27L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
 const GUID IID_IPortWaveCyclic = {0xb4c90a26L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
 const GUID IID_IResourceList = {0x22C6AC60L, 0x851B, 0x11D0, {0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE}};
@@ -59,6 +59,7 @@ const GUID IID_IServiceSink = {0x22C6AC64L, 0x851B, 0x11D0, {0x9A, 0x7F, 0x00, 0
 const GUID IID_IPortClsVersion = {0x7D89A7BBL, 0x869B, 0x4567, {0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE}};
 const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x46}};
 const GUID IID_IPortEvents = {0xA80F29C4L, 0x5498, 0x11D2, {0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}};
+const GUID IID_IMusicTechnology = {0x80396C3C, 0xCBCB, 0x409B, {0x9F, 0x65, 0x4F, 0x1E, 0x74, 0x67, 0xCD, 0xAF}};
 
 const GUID KSNAME_PIN           = {0x146F1A80, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
 const GUID IID_IDrmAudioStream  = {0x1915c967, 0x3299, 0x48cb, {0xa3, 0xe4, 0x69, 0xfd, 0x1d, 0x1b, 0x30, 0x6e}};
@@ -69,7 +70,13 @@ const GUID KS_CATEGORY_AUDIO    = {0x6994AD04, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00
 const GUID KS_CATEGORY_RENDER   = {0x65E8773E, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
 const GUID KS_CATEGORY_CAPTURE  = {0x65E8773D, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
 const GUID KS_CATEGORY_TOPOLOGY = {0xDDA54A40, 0x1E4C, 0x11D1, {0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00}};
+const GUID KSCATEGORY_AUDIO     = {0x6994AD04L, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
+
 
+const GUID KSNODETYPE_SYNTHESIZER   = {0xDFF220F3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
+const GUID KSAUDFNAME_DMUSIC_MPU_IN = {0xB2EC0A7D, 0xBAC9, 0x11d2, {0xB7, 0xA8, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1}};
+const GUID KSAUDFNAME_MIDI          = {0x185FEDF8L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}};
+const GUID KSAUDFNAME_DMUSIC_MPU_OUT = {0xA4DF0EB5, 0xBAC9, 0x11d2, {0xB7, 0xA8, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1}};
 
 const GUID KSDATAFORMAT_TYPE_AUDIO =             {0x73647561L, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
 const GUID KSDATAFORMAT_SUBTYPE_PCM =            {0x00000001L, 0x0000, 0x0010,  {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
@@ -80,13 +87,16 @@ const GUID KSPROPSETID_Pin                     = {0x8C134960L, 0x51AD, 0x11CF, {
 const GUID KSPROPSETID_Connection              = {0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
 const GUID KSPROPTYPESETID_General             = {0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
 const GUID KSPROPSETID_DrmAudioStream          = {0x2f2c8ddd,  0x4198, 0x4fac, {0xba, 0x29, 0x61, 0xbb, 0x05, 0xb7, 0xde, 0x06}};
+const GUID KSPROPSETID_Synth = {0xfedfae25L, 0xe46e, 0x11d1, {0xaa, 0xce, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}};
+const GUID KSPROPSETID_Audio = {0x45FFAAA0L, 0x6E1B, 0x11D0, {0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}};
 
 const GUID KSEVENTSETID_LoopedStreaming        = {0x4682B940L, 0xC6EF, 0x11D0, {0x96, 0xD8, 0x00, 0xAA, 0x00, 0x51, 0xE5, 0x1D}};
 const GUID KSEVENTSETID_Connection             = {0x7f4bcbe0L, 0x9ea5, 0x11cf, {0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00}};
 
 const GUID IID_IAllocatorMXF                   = {0xa5f0d62cL, 0xb30f, 0x11d2, {0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}};
+const GUID IID_IMXF                            = {0xc096df9e, 0xfb09, 0x11d1, {0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}};
+const GUID KSMUSIC_TECHNOLOGY_PORT             = {0x86C92E60, 0x62E8, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
 
-const GUID KSPROPSETID_Audio = {0x45FFAAA0L, 0x6E1B, 0x11D0, {0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}};
 ///
 /// undocumented guids
 
index 248bcbe..9163a6a 100644 (file)
@@ -319,9 +319,11 @@ DECLARE_INTERFACE_(IIrpQueue, IUnknown)
     DEFINE_ABSTRACT_UNKNOWN()
 
     STDMETHOD_(NTSTATUS, Init)(THIS_
-        IN KSPIN_CONNECT *ConnectDetails,
+        IN PKSPIN_CONNECT ConnectDetails,
+        IN PKSPIN_DESCRIPTOR Descriptor,
         IN ULONG FrameSize,
-        IN ULONG Alignment) PURE;
+        IN ULONG Alignment,
+        IN ULONG TagSupportEnabled) PURE;
 
     STDMETHOD_(NTSTATUS, AddMapping)(THIS_
         IN PIRP Irp,
@@ -360,9 +362,11 @@ DECLARE_INTERFACE_(IIrpQueue, IUnknown)
 
 #define IMP_IIrpQueue                                  \
     STDMETHODIMP_(NTSTATUS) Init(THIS_                 \
-        IN KSPIN_CONNECT *ConnectDetails,              \
+        IN PKSPIN_CONNECT ConnectDetails,              \
+        IN PKSPIN_DESCRIPTOR Descriptor,               \
         IN ULONG FrameSize,                            \
-        IN ULONG Alignment);                           \
+        IN ULONG Alignment,                            \
+        IN ULONG TagSupportEnabled);                   \
                                                        \
     STDMETHODIMP_(NTSTATUS) AddMapping(THIS_           \
         IN PIRP Irp,                                   \
index af4b0c1..30d7856 100644 (file)
@@ -232,21 +232,21 @@ CInterruptSync::Connect()
     if (IsListEmpty(&m_ServiceRoutines))
         return STATUS_UNSUCCESSFUL;
 
-    DPRINT("Vector %u Level %u Flags %x Affinity %x\n", Descriptor->u.Interrupt.Vector, Descriptor->u.Interrupt.Level, Descriptor->Flags, Descriptor->u.Interrupt.Affinity);
+    DPRINT1("Vector %u Level %u Flags %x Affinity %x\n", Descriptor->u.Interrupt.Vector, Descriptor->u.Interrupt.Level, Descriptor->Flags, Descriptor->u.Interrupt.Affinity);
 
     Status = IoConnectInterrupt(&m_Interrupt,
                                 IInterruptServiceRoutine,
                                 (PVOID)this,
-                                &m_Lock,
+                                NULL, //&m_Lock,
                                 Descriptor->u.Interrupt.Vector,
                                 (KIRQL)Descriptor->u.Interrupt.Level,
                                 (KIRQL)Descriptor->u.Interrupt.Level,
                                 (KINTERRUPT_MODE)(Descriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED),
-                                (Descriptor->Flags != CM_RESOURCE_INTERRUPT_LATCHED),
+                                (Descriptor->ShareDisposition != CmResourceShareDeviceExclusive),
                                 Descriptor->u.Interrupt.Affinity,
                                 FALSE);
 
-    DPRINT("CInterruptSync::Connect result %x\n", Status);
+    DPRINT1("CInterruptSync::Connect result %x\n", Status);
     return Status;
 }
 
index a19a6da..2c6b88c 100644 (file)
@@ -35,31 +35,40 @@ public:
     virtual ~CIrpQueue(){}
 
 protected:
-    volatile ULONG m_CurrentOffset;
-    LONG m_NumMappings;
-    ULONG m_NumDataAvailable;
+
     PKSPIN_CONNECT m_ConnectDetails;
+    PKSPIN_DESCRIPTOR m_Descriptor;
+
     KSPIN_LOCK m_IrpListLock;
     LIST_ENTRY m_IrpList;
     LIST_ENTRY m_FreeIrpList;
-    PIRP m_Irp;
 
     ULONG m_OutOfMapping;
     ULONG m_MaxFrameSize;
     ULONG m_Alignment;
+    ULONG m_TagSupportEnabled;
+    ULONG m_NumDataAvailable;
+    volatile ULONG m_CurrentOffset;
+
+    PIRP m_Irp;
+
 
     LONG m_Ref;
 
 };
 
-#define OFFSET_HEADERINDEX  (0)
-#define OFFSET_STREAMHEADER (2)
-#define OFFSET_HEADERCOUNT  (3)
+typedef struct
+{
+    ULONG StreamHeaderCount;
+    ULONG StreamHeaderIndex;
+    ULONG TotalStreamData;
 
+    PKSSTREAM_HEADER CurStreamHeader;
+    PVOID * Data;
+    PVOID * Tags;
+}KSSTREAM_DATA, *PKSSTREAM_DATA;
 
-#define STREAMHEADER_INDEX(Irp)   (PtrToUlong(Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX]))
-#define STREAMHEADER_COUNT(Irp)   (PtrToUlong(Irp->Tail.Overlay.DriverContext[OFFSET_HEADERCOUNT]))
-#define STREAMHEADER_CURRENT(Irp) (Irp->Tail.Overlay.DriverContext[OFFSET_STREAMHEADER])
+#define STREAM_DATA_OFFSET   (0)
 
 
 NTSTATUS
@@ -81,13 +90,17 @@ CIrpQueue::QueryInterface(
 NTSTATUS
 NTAPI
 CIrpQueue::Init(
-    IN KSPIN_CONNECT *ConnectDetails,
+    IN PKSPIN_CONNECT ConnectDetails,
+    IN PKSPIN_DESCRIPTOR Descriptor,
     IN ULONG FrameSize,
-    IN ULONG Alignment)
+    IN ULONG Alignment,
+    IN ULONG TagSupportEnabled)
 {
     m_ConnectDetails = ConnectDetails;
+    m_Descriptor = Descriptor;
     m_MaxFrameSize = FrameSize;
     m_Alignment = Alignment;
+    m_TagSupportEnabled = TagSupportEnabled;
 
     InitializeListHead(&m_IrpList);
     InitializeListHead(&m_FreeIrpList);
@@ -103,110 +116,158 @@ CIrpQueue::AddMapping(
     OUT PULONG Data)
 {
     PKSSTREAM_HEADER Header;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status = STATUS_UNSUCCESSFUL;
     PIO_STACK_LOCATION IoStack;
-    ULONG NumHeaders, NumData, Index;
+    ULONG Index, Length;
     PMDL Mdl;
+    PKSSTREAM_DATA StreamData;
 
     PC_ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
 
+    // allocate stream data
+    StreamData = (PKSSTREAM_DATA)AllocateItem(NonPagedPool, sizeof(KSSTREAM_DATA), TAG_PORTCLASS);
+    if (!StreamData)
+    {
+        // not enough memory
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+
     // get current irp stack location
     IoStack = IoGetCurrentIrpStackLocation(Irp);
 
-    if (!Irp->MdlAddress)
+    // lets probe the irp
+    if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_WRITE_STREAM)
     {
-        // ioctl from KsStudio
-        // Wdmaud already probes buffers, therefore no need to probe it again
-        // probe the stream irp
-        if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_WRITE_STREAM)
-            Status = KsProbeStreamIrp(Irp, KSSTREAM_WRITE | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS, 0);
-        else if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_READ_STREAM)
-            Status = KsProbeStreamIrp(Irp, KSSTREAM_READ  | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS, 0);
-        else 
-            PC_ASSERT(0);
-
-        // check for success
-        if (!NT_SUCCESS(Status))
-        {
-            DPRINT("KsProbeStreamIrp failed with %x\n", Status);
-            return Status;
-        }
+        // probe IOCTL_KS_WRITE_STREAM
+        Status = KsProbeStreamIrp(Irp, KSSTREAM_WRITE | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS, 0);
+    }
+    else if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_READ_STREAM)
+    {
+        // probe IOCTL_KS_READ_STREAM
+        Status = KsProbeStreamIrp(Irp, KSSTREAM_READ  | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS, 0);
+    }
+
+    // check for success
+    if (!NT_SUCCESS(Status))
+    {
+        // irp probing failed
+        FreeItem(StreamData, TAG_PORTCLASS);
+        return Status;
     }
 
     // get first stream header
+    Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
 
-   if (Irp->RequestorMode == UserMode)
-       Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
-   else
-       Header = (PKSSTREAM_HEADER)Irp->UserBuffer;
+    // store header
+    StreamData->CurStreamHeader = Header;
 
     // sanity check
     PC_ASSERT(Header);
 
-    // calculate num headers
-    NumHeaders = IoStack->Parameters.DeviceIoControl.OutputBufferLength / Header->Size;
+    // first calculate the numbers of stream headers
+    Length = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
 
-    // assume headers of same length
-    PC_ASSERT(IoStack->Parameters.DeviceIoControl.OutputBufferLength % Header->Size == 0);
+    do
+    {
+        /* subtract size */
+        Length -= Header->Size;
 
+        /* increment header count */
+        StreamData->StreamHeaderCount++;
 
-    // get first audio buffer
-    Mdl = Irp->MdlAddress;
-    // sanity check
-    PC_ASSERT(Mdl);
+        if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
+        {
+            // irp sink
+            StreamData->TotalStreamData += Header->DataUsed;
+        }
+        else
+        {
+            // irp source
+            StreamData->TotalStreamData += Header->FrameExtent;
+        }
 
-    // store the current stream header
-    Irp->Tail.Overlay.DriverContext[OFFSET_STREAMHEADER] = (PVOID)Header;
-    // store header count
-    Irp->Tail.Overlay.DriverContext[OFFSET_HEADERCOUNT] = UlongToPtr(NumHeaders);
+        /* move to next header */
+        Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
+
+    }while(Length);
 
-    // store current header index
-    Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(0);
+    // sanity check
+    ASSERT(StreamData->StreamHeaderCount);
 
-    NumData = 0;
-    // prepare all headers
-    for(Index = 0; Index < NumHeaders; Index++)
+    // allocate array for storing the pointers of the data */
+    StreamData->Data = (PVOID*)AllocateItem(NonPagedPool, sizeof(PVOID) * StreamData->StreamHeaderCount, TAG_PORTCLASS);
+    if (!StreamData->Data)
     {
-        // sanity checks
-        PC_ASSERT(Header);
-        PC_ASSERT(Mdl);
+        // out of memory
+        FreeItem(StreamData, TAG_PORTCLASS);
 
-        if (Irp->RequestorMode == UserMode)
-        {
-            Header->Data = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
-        }
+        // done
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
 
-        if (!Header->Data)
+    if (m_TagSupportEnabled)
+    {
+        // allocate array for storing the pointers of the data */
+        StreamData->Tags = (PVOID*)AllocateItem(NonPagedPool, sizeof(PVOID) * StreamData->StreamHeaderCount, TAG_PORTCLASS);
+        if (!StreamData->Data)
         {
-            // insufficient resources
-            ExFreePool(Irp->AssociatedIrp.SystemBuffer);
-            Irp->AssociatedIrp.SystemBuffer = NULL;
-            // complete and forget request
-            Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
-            Irp->IoStatus.Information = 0;
-
-            IoCompleteRequest(Irp, IO_NO_INCREMENT); 
+            // out of memory
+            FreeItem(StreamData->Data, TAG_PORTCLASS);
+            FreeItem(StreamData, TAG_PORTCLASS);
+
+            // done
             return STATUS_INSUFFICIENT_RESOURCES;
         }
+    }
 
-        // increment num mappings
-        InterlockedIncrement(&m_NumMappings);
 
-        // increment available data
-        InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, 
-                                      (max(Header->DataUsed, Header->FrameExtent)));
+    // now get a system address for the user buffers
+    Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
+    Mdl = Irp->MdlAddress;
 
-        NumData += max(Header->DataUsed, Header->FrameExtent);
+    for(Index = 0; Index < StreamData->StreamHeaderCount; Index++)
+    {
+        /* get system address */
+        StreamData->Data[Index] = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
 
-        // move to next header
-        Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
-        
-        // move to next mdl
+        /* check for success */
+        if (!StreamData->Data[Index])
+        {
+            // out of resources
+            FreeItem(StreamData->Data, TAG_PORTCLASS);
+
+            if (m_TagSupportEnabled)
+            {
+                // free tag array
+                FreeItem(StreamData->Tags, TAG_PORTCLASS);
+            }
+
+            FreeItem(StreamData, TAG_PORTCLASS);
+            // done
+            return STATUS_INSUFFICIENT_RESOURCES;
+        }
+
+        if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
+        {
+            // increment available data
+            InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, Header->DataUsed);
+        }
+        else if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_OUT)
+        {
+            // increment available data
+            InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, Header->FrameExtent);
+        }
+
+        // move to next header / mdl
         Mdl = Mdl->Next;
+        Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
+
     }
 
-    DPRINT("StreamHeaders %u NumData %u FrameSize %u NumDataAvailable %u\n", NumHeaders, NumData, m_MaxFrameSize, m_NumDataAvailable);
-    *Data = NumData;
+    // store stream data
+    Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET] = (PVOID)StreamData;
+
+    *Data = StreamData->TotalStreamData;
 
     // mark irp as pending
     IoMarkIrpPending(Irp);
@@ -218,7 +279,7 @@ CIrpQueue::AddMapping(
     m_OutOfMapping = FALSE;
 
     // done
-    return Status;
+    return STATUS_SUCCESS;
 }
 
 NTSTATUS
@@ -229,8 +290,7 @@ CIrpQueue::GetMapping(
 {
     PIRP Irp;
     ULONG Offset;
-    //PIO_STACK_LOCATION IoStack;
-    PKSSTREAM_HEADER StreamHeader;
+    PKSSTREAM_DATA StreamData;
 
     // check if there is an irp in the partially processed
     if (m_Irp)
@@ -247,6 +307,7 @@ CIrpQueue::GetMapping(
             m_Irp->IoStatus.Status = STATUS_CANCELLED;
             IoCompleteRequest(m_Irp, IO_NO_INCREMENT);
             m_Irp = Irp = NULL;
+            m_CurrentOffset = 0;
         }
     }
     else
@@ -259,26 +320,32 @@ CIrpQueue::GetMapping(
     if (!Irp)
     {
         // no irp buffer available
-        DPRINT("NoIrp\n");
         return STATUS_UNSUCCESSFUL;
     }
 
-    // get stream header
-    StreamHeader = (PKSSTREAM_HEADER)Irp->Tail.Overlay.DriverContext[2];
+    // get stream data
+    StreamData = (PKSSTREAM_DATA)Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
 
     // sanity check
-    PC_ASSERT(StreamHeader);
+    PC_ASSERT(StreamData);
 
-    // store buffersize
-    if (StreamHeader->DataUsed)
-        *BufferSize = StreamHeader->DataUsed - Offset;
+    // get buffer size
+    if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
+    {
+        // sink pin
+        *BufferSize = StreamData->CurStreamHeader->DataUsed - Offset;
+    }
     else
-        *BufferSize = StreamHeader->FrameExtent - Offset;
+    {
+        // source pin
+        *BufferSize = StreamData->CurStreamHeader->FrameExtent - Offset;
+    }
 
+    // sanity check
     PC_ASSERT(*BufferSize);
 
     // store buffer
-    *Buffer = &((PUCHAR)StreamHeader->Data)[Offset];
+    *Buffer = &((PUCHAR)StreamData->Data[StreamData->StreamHeaderIndex])[Offset];
 
     // unset flag that no irps are available
     m_OutOfMapping = FALSE;
@@ -291,107 +358,119 @@ NTAPI
 CIrpQueue::UpdateMapping(
     IN ULONG BytesWritten)
 {
-    PKSSTREAM_HEADER StreamHeader;
-    ULONG Size, NumData, Index;
+    PKSSTREAM_DATA StreamData;
+    ULONG Size;
+    PIO_STACK_LOCATION IoStack;
 
-    if (!m_Irp)
-    {
-        // silence buffer was used
-        return;
-    }
+    // sanity check
+    ASSERT(m_Irp);
 
-    // get stream header
-    StreamHeader = (PKSSTREAM_HEADER)STREAMHEADER_CURRENT(m_Irp);
+    // get stream data
+    StreamData = (PKSSTREAM_DATA)m_Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
 
     // sanity check
-   // ASSERT(StreamHeader);
+    ASSERT(StreamData);
 
     // add to current offset
     InterlockedExchangeAdd((volatile PLONG)&m_CurrentOffset, (LONG)BytesWritten);
 
+    if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_OUT)
+    {
+        // store written bytes (source pin)
+        StreamData->CurStreamHeader->DataUsed += BytesWritten;
+    }
+
     // decrement available data counter
     m_NumDataAvailable -= BytesWritten;
 
-    if (StreamHeader->DataUsed)
-        Size = StreamHeader->DataUsed;
+    // get audio buffer size
+    if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_OUT)
+        Size = StreamData->CurStreamHeader->FrameExtent;
     else
-        Size = StreamHeader->FrameExtent;
+        Size = StreamData->CurStreamHeader->DataUsed;
 
+    // sanity check
     PC_ASSERT(Size);
 
     if (m_CurrentOffset >= Size)
     {
-        if (STREAMHEADER_INDEX(m_Irp) + 1 < STREAMHEADER_COUNT(m_Irp))
-        {
-            // the irp has at least one more stream header
-            m_Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(STREAMHEADER_INDEX(m_Irp) + 1);
+        // sanity check
+        PC_ASSERT(Size == m_CurrentOffset);
 
-            // get next stream header         
-            StreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamHeader + StreamHeader->Size);
+        if (StreamData->StreamHeaderIndex + 1 < StreamData->StreamHeaderCount)
+        {
+            // move to next stream header
+            StreamData->CurStreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamData->CurStreamHeader + StreamData->CurStreamHeader->Size);
 
-            // store next stream header
-            STREAMHEADER_CURRENT(m_Irp) = (PVOID)StreamHeader;
+            // increment stream header index
+            StreamData->StreamHeaderIndex++;
 
-            // reset current offset
+            // reset offset
             m_CurrentOffset = 0;
 
             // done
             return;
         }
 
-       // irp has been processed completly
-
-        NumData = 0;
-        if (m_Irp->RequestorMode == KernelMode)
-            StreamHeader = (PKSSTREAM_HEADER)m_Irp->UserBuffer;
-        else
-            StreamHeader = (PKSSTREAM_HEADER)m_Irp->AssociatedIrp.SystemBuffer;
-
-        // loop all stream headers
-        for(Index = 0; Index < STREAMHEADER_COUNT(m_Irp); Index++)
-        {
-            PC_ASSERT(StreamHeader);
-
-            // add size of buffer
-            // depends on if the buffer is input / output
-            if (StreamHeader->DataUsed)
-                Size = StreamHeader->DataUsed;
-            else
-                Size = StreamHeader->FrameExtent;
-
-            // increment size
-            NumData += Size;
-
-            // get next stream header
-            StreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamHeader + StreamHeader->Size);
-        }
-
+        //
+        // all stream buffers have been played
+        // check if this is a looped buffer
+        //
         if (m_ConnectDetails->Interface.Id == KSINTERFACE_STANDARD_LOOPED_STREAMING)
         {
             // looped streaming repeat the buffers untill
             // the caller decides to stop the streams
 
             // reset stream header index
-            m_Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(0);
+            StreamData->StreamHeaderIndex = 0;
+
+            // reset stream header
+            StreamData->CurStreamHeader = (PKSSTREAM_HEADER)m_Irp->AssociatedIrp.SystemBuffer;
+
+            // increment available data
+            InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, StreamData->TotalStreamData);
+
             // re-insert irp
             KsAddIrpToCancelableQueue(&m_IrpList, &m_IrpListLock, m_Irp, KsListEntryTail, NULL);
+
             // clear current irp
             m_Irp = NULL;
+
             // reset offset
             m_CurrentOffset = 0;
-            // increment available data
-            InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, NumData);
+
             // done
             return;
         }
 
+        // free stream data array
+        FreeItem(StreamData->Data, TAG_PORTCLASS);
+
+        if (m_TagSupportEnabled)
+        {
+            // free tag array
+            FreeItem(StreamData->Tags, TAG_PORTCLASS);
+        }
+
+        // free stream data
+        FreeItem(StreamData, TAG_PORTCLASS);
+
+        // get io stack
+        IoStack = IoGetCurrentIrpStackLocation(m_Irp);
+
+        // store operation status
         m_Irp->IoStatus.Status = STATUS_SUCCESS;
-        m_Irp->IoStatus.Information = NumData;
+
+        // store operation length
+        m_Irp->IoStatus.Information = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
 
         // complete the request
         IoCompleteRequest(m_Irp, IO_SOUND_INCREMENT);
+
         // remove irp as it is complete
         m_Irp = NULL;
+
+        // reset offset
         m_CurrentOffset = 0;
     }
 }
@@ -408,6 +487,8 @@ BOOL
 NTAPI
 CIrpQueue::CancelBuffers()
 {
+    //TODO: own cancel routine
+
     // is there an active irp
     if (m_Irp)
     {
@@ -419,8 +500,7 @@ CIrpQueue::CancelBuffers()
 
     // cancel all irps
     KsCancelIo(&m_IrpList, &m_IrpListLock);
-    // reset number of mappings
-    m_NumMappings = 0;
+
     // reset number of data available
     m_NumDataAvailable = 0;
 
@@ -437,44 +517,83 @@ CIrpQueue::GetMappingWithTag(
     OUT PULONG  ByteCount,
     OUT PULONG  Flags)
 {
-    PKSSTREAM_HEADER StreamHeader;
-    PIRP Irp;
+    PKSSTREAM_DATA StreamData;
 
-    *Flags = 0;
+    /* sanity checks */
     PC_ASSERT(Tag != NULL);
+    PC_ASSERT(PhysicalAddress);
+    PC_ASSERT(VirtualAddress);
+    PC_ASSERT(ByteCount);
+    PC_ASSERT(Flags);
 
-    // get an irp from the queue
-    Irp = KsRemoveIrpFromCancelableQueue(&m_IrpList, &m_IrpListLock, KsListEntryHead, KsAcquireAndRemoveOnlySingleItem);
+    if (!m_Irp)
+    {
+        // get an irp from the queue
+        m_Irp = KsRemoveIrpFromCancelableQueue(&m_IrpList, &m_IrpListLock, KsListEntryHead, KsAcquireAndRemoveOnlySingleItem);
+    }
 
     // check if there is an irp
-    if (!Irp)
+    if (!m_Irp)
     {
         // no irp available
         m_OutOfMapping = TRUE;
         return STATUS_NOT_FOUND;
     }
 
-    //FIXME support more than one stream header
-    PC_ASSERT(STREAMHEADER_COUNT(Irp) == 1);
+    // get stream data
+    StreamData = (PKSSTREAM_DATA)m_Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
 
-    // HACK get stream header
-    StreamHeader = (PKSSTREAM_HEADER)Irp->Tail.Overlay.DriverContext[2];
+    // sanity check
+    PC_ASSERT(StreamData->StreamHeaderIndex < StreamData->StreamHeaderCount);
 
-    // store mapping in the free list
-    ExInterlockedInsertTailList(&m_FreeIrpList, &Irp->Tail.Overlay.ListEntry, &m_IrpListLock);
+    // setup mapping
+    *PhysicalAddress = MmGetPhysicalAddress(StreamData->Data[StreamData->StreamHeaderIndex]);
+    *VirtualAddress = StreamData->Data[StreamData->StreamHeaderIndex];
 
-    // return mapping
-    *PhysicalAddress = MmGetPhysicalAddress(StreamHeader->Data);
-    *VirtualAddress = StreamHeader->Data;
-    *ByteCount = StreamHeader->DataUsed;
+    // store tag in irp
+    StreamData->Tags[StreamData->StreamHeaderIndex] = Tag;
 
-    // decrement mapping count
-    InterlockedDecrement(&m_NumMappings);
-    // decrement num data available
-    m_NumDataAvailable -= StreamHeader->DataUsed;
+    // mapping size
+    if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
+    {
+        // sink pin
+        *ByteCount = StreamData->CurStreamHeader->DataUsed;
 
-    // store tag in irp
-    Irp->Tail.Overlay.DriverContext[3] = Tag;
+        // decrement num data available
+        m_NumDataAvailable -= StreamData->CurStreamHeader->DataUsed;
+    }
+    else
+    {
+        // source pin
+        *ByteCount = StreamData->CurStreamHeader->FrameExtent;
+
+        // decrement num data available
+        m_NumDataAvailable -= StreamData->CurStreamHeader->FrameExtent;
+    }
+
+    if (StreamData->StreamHeaderIndex + 1 == StreamData->StreamHeaderCount)
+    {
+        // last mapping
+        *Flags = 1;
+
+        // insert mapping into free list
+        ExInterlockedInsertTailList(&m_FreeIrpList, &m_Irp->Tail.Overlay.ListEntry, &m_IrpListLock);
+
+        // clear irp
+        m_Irp = NULL;
+
+    }
+    else
+    {
+        // one more mapping in the irp
+        *Flags = 0;
+
+        // increment header index
+        StreamData->StreamHeaderIndex++;
+
+        // move to next header
+        StreamData->CurStreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamData->CurStreamHeader + StreamData->CurStreamHeader->Size);
+    }
 
     // done
     return STATUS_SUCCESS;
@@ -487,34 +606,123 @@ CIrpQueue::ReleaseMappingWithTag(
 {
     PIRP Irp;
     PLIST_ENTRY CurEntry;
-    PKSSTREAM_HEADER StreamHeader;
+    PKSSTREAM_DATA StreamData;
+    PIO_STACK_LOCATION IoStack;
+    ULONG Index;
 
-    DPRINT("CIrpQueue::ReleaseMappingWithTag Tag %p\n", Tag);
+    // first check if there is an active irp
+    if (m_Irp)
+    {
+        // now check if there are already used mappings
+        StreamData = (PKSSTREAM_DATA)m_Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
+
+        if (StreamData->StreamHeaderIndex)
+        {
+            // check if the released mapping is one current processed irps
+            for(Index = 0; Index < StreamData->StreamHeaderIndex; Index++)
+            {
+                // check if it is the same tag
+                if (StreamData->Tags[Index] == Tag)
+                {
+                    // mark mapping as released
+                    StreamData->Tags[Index] = NULL;
+
+                    // done
+                    return STATUS_SUCCESS;
+                }
+
+            }
+        }
+    }
 
     // remove irp from used list
     CurEntry = ExInterlockedRemoveHeadList(&m_FreeIrpList, &m_IrpListLock);
+
     // sanity check
     PC_ASSERT(CurEntry);
 
     // get irp from list entry
     Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
 
-    // HACK get stream header
-    StreamHeader = (PKSSTREAM_HEADER)Irp->Tail.Overlay.DriverContext[2];
+    // get stream data
+    StreamData = (PKSSTREAM_DATA)Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
+
+    // sanity check
+    PC_ASSERT(StreamData->StreamHeaderIndex + 1 == StreamData->StreamHeaderCount);
+
+    // check if the released mapping is one of these
+    for(Index = 0; Index < StreamData->StreamHeaderCount; Index++)
+    {
+        if (StreamData->Tags[Index] == Tag)
+        {
+            // mark mapping as released
+            StreamData->Tags[Index] = NULL;
+
+            // done
+            break;
+        }
+        else
+        {
+            //
+            // we assume that mappings are released in the same order as they have been acquired
+            // therefore if the current mapping is not the searched one, it must have been already
+            // released
+            //
+            PC_ASSERT(StreamData->Tags[Index] == NULL);
+        }
+    }
+
+    // check if this is the last one released mapping
+    if (Index + 1 == StreamData->StreamHeaderCount)
+    {
+        // last mapping released
+        // now check if this is a looped buffer
+        if (m_ConnectDetails->Interface.Id == KSINTERFACE_STANDARD_LOOPED_STREAMING)
+        {
+            // looped buffers are not completed when they have been played
+            // they are completed when the stream is set to stop
+
+            // reset stream header index
+            StreamData->StreamHeaderIndex = 0;
+
+            // reset stream header
+            StreamData->CurStreamHeader = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
+
+            // increment available data
+            InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, StreamData->TotalStreamData);
+
+            // re-insert irp
+            KsAddIrpToCancelableQueue(&m_IrpList, &m_IrpListLock, Irp, KsListEntryTail, NULL);
+
+            // done
+            return STATUS_SUCCESS;
+        }
+
+        //
+        // time to complete non looped buffer
+        //
 
-    // driver must release items in the same order
-    PC_ASSERT(Irp->Tail.Overlay.DriverContext[3] == Tag);
+        // free stream data array
+        FreeItem(StreamData->Data, TAG_PORTCLASS);
 
-    // irp has been processed completly
-    Irp->IoStatus.Status = STATUS_SUCCESS;
+        // free stream tags array
+        FreeItem(StreamData->Tags, TAG_PORTCLASS);
 
-    // frame extend contains the original request size, DataUsed contains the real buffer size
-    // is different when kmixer performs channel conversion, upsampling etc
-    
-    Irp->IoStatus.Information = StreamHeader->FrameExtent;
+        // free stream data
+        FreeItem(StreamData, TAG_PORTCLASS);
 
-    // complete the request
-    IoCompleteRequest(Irp, IO_SOUND_INCREMENT);
+        // get io stack
+        IoStack = IoGetCurrentIrpStackLocation(Irp);
+
+        // store operation status
+        Irp->IoStatus.Status = STATUS_SUCCESS;
+
+        // store operation length
+        Irp->IoStatus.Information = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
+
+        // complete the request
+        IoCompleteRequest(Irp, IO_SOUND_INCREMENT);
+    }
 
     return STATUS_SUCCESS;
 }
@@ -542,38 +750,18 @@ CIrpQueue::GetAcquiredTagRange(
 {
     KIRQL OldLevel;
     BOOLEAN Ret = FALSE;
-    PIRP Irp;
-    PLIST_ENTRY CurEntry;
+    //PIRP Irp;
+    //PLIST_ENTRY CurEntry;
+    //PKSSTREAM_DATA StreamData;
 
+    // lock list
     KeAcquireSpinLock(&m_IrpListLock, &OldLevel);
 
-    if (!IsListEmpty(&m_FreeIrpList))
-    {
-        // get first entry
-        CurEntry = RemoveHeadList(&m_FreeIrpList);
-        // get irp from list entry
-        Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
-
-        // get tag of first acquired buffer
-        *FirstTag = Irp->Tail.Overlay.DriverContext[3];
+    // initialize to zero
+    *FirstTag = NULL;
+    *LastTag = NULL;
 
-        // put back irp
-        InsertHeadList(&m_FreeIrpList, &Irp->Tail.Overlay.ListEntry);
-
-        // get last entry
-        CurEntry = RemoveTailList(&m_FreeIrpList);
-        // get irp from list entry
-        Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
-
-        // get tag of first acquired buffer
-        *LastTag = Irp->Tail.Overlay.DriverContext[3];
-
-        // put back irp
-        InsertTailList(&m_FreeIrpList, &Irp->Tail.Overlay.ListEntry);
-
-        // indicate success
-        Ret = TRUE;
-    }
+    UNIMPLEMENTED;
 
     // release lock
     KeReleaseSpinLock(&m_IrpListLock, OldLevel);
index 65d32ed..7d40c68 100644 (file)
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS Kernel Streaming
- * FILE:            drivers/wdm/audio/backpln/portcls/miniport_dmus.cpp
- * PURPOSE:         DirectMusic miniport
- * PROGRAMMER:      Johannes Anderwald
+/*****************************************************************************
+ * miniport_dmus.cpp - UART miniport implementation
+ *****************************************************************************
+ * Copyright (c) 1997-2000 Microsoft Corporation.  All Rights Reserved.
+ *
+ *      Feb 98    MartinP   --  based on UART, began deltas for DirectMusic.
+ *
  */
 
+
 #include "private.hpp"
 
-class CMiniportDMus : public IMiniportDMus
+//  + for absolute / - for relative
+
+#define kOneMillisec (10 * 1000)
+
+//
+// MPU401 ports
+//
+#define MPU401_REG_STATUS   0x01    // Status register
+#define MPU401_DRR          0x40    // Output ready (for command or data)
+                                    // if this bit is set, the output FIFO is FULL
+#define MPU401_DSR          0x80    // Input ready (for data)
+                                    // if this bit is set, the input FIFO is empty
+
+#define MPU401_REG_DATA     0x00    // Data in
+#define MPU401_REG_COMMAND  0x01    // Commands
+#define MPU401_CMD_RESET    0xFF    // Reset command
+#define MPU401_CMD_UART     0x3F    // Switch to UART mod
+
+
+/*****************************************************************************
+ * Prototypes
+ */
+
+NTSTATUS NTAPI InitMPU(IN PINTERRUPTSYNC InterruptSync,IN PVOID DynamicContext);
+NTSTATUS ResetHardware(PUCHAR portBase);
+NTSTATUS ValidatePropertyRequest(IN PPCPROPERTY_REQUEST pRequest, IN ULONG ulValueSize, IN BOOLEAN fValueRequired);
+NTSTATUS NTAPI PropertyHandler_Synth(IN PPCPROPERTY_REQUEST PropertyRequest);
+NTSTATUS NTAPI DMusMPUInterruptServiceRoutine(PINTERRUPTSYNC InterruptSync,PVOID DynamicContext);
+VOID NTAPI DMusUARTTimerDPC(PKDPC Dpc,PVOID DeferredContext,PVOID SystemArgument1,PVOID SystemArgument2);
+NTSTATUS NTAPI SynchronizedDMusMPUWrite(PINTERRUPTSYNC InterruptSync,PVOID syncWriteContext);
+/*****************************************************************************
+ * Constants
+ */
+
+const BOOLEAN   COMMAND   = TRUE;
+const BOOLEAN   DATA      = FALSE;
+const ULONG      kMPUInputBufferSize = 128;
+
+
+/*****************************************************************************
+ * Classes
+ */
+
+/*****************************************************************************
+ * CMiniportDMusUART
+ *****************************************************************************
+ * MPU-401 miniport.  This object is associated with the device and is 
+ * created when the device is started.  The class inherits IMiniportDMus
+ * so it can expose this interface and CUnknown so it automatically gets
+ * reference counting and aggregation support.
+ */
+class CMiniportDMusUART
+:   public IMiniportDMus,
+    public IMusicTechnology,
+    public IPowerNotify
 {
+private:
+    LONG            m_Ref;                  // Reference count
+    KSSTATE         m_KSStateInput;         // Miniport state (RUN/PAUSE/ACQUIRE/STOP)
+    PPORTDMUS       m_pPort;                // Callback interface.
+    PUCHAR          m_pPortBase;            // Base port address.
+    PINTERRUPTSYNC  m_pInterruptSync;       // Interrupt synchronization object.
+    PSERVICEGROUP   m_pServiceGroup;        // Service group for capture.
+    PMASTERCLOCK    m_MasterClock;          // for input data
+    REFERENCE_TIME  m_InputTimeStamp;       // capture data timestamp
+    USHORT          m_NumRenderStreams;     // Num active render streams.
+    USHORT          m_NumCaptureStreams;    // Num active capture streams.
+    ULONG            m_MPUInputBufferHead;   // Index of the newest byte in the FIFO.
+    ULONG            m_MPUInputBufferTail;   // Index of the oldest empty space in the FIFO.
+    GUID            m_MusicFormatTechnology;
+    POWER_STATE     m_PowerState;           // Saved power state (D0 = full power, D3 = off)
+    BOOLEAN         m_fMPUInitialized;      // Is the MPU HW initialized.
+    BOOLEAN         m_UseIRQ;               // FALSE if no IRQ is used for MIDI.
+    UCHAR           m_MPUInputBuffer[kMPUInputBufferSize];  // Internal SW FIFO.
+
+    /*************************************************************************
+     * CMiniportDMusUART methods
+     *
+     * These are private member functions used internally by the object.
+     * See MINIPORT.CPP for specific descriptions.
+     */
+    NTSTATUS ProcessResources
+    (
+        IN      PRESOURCELIST   ResourceList
+    );
+    NTSTATUS InitializeHardware(PINTERRUPTSYNC interruptSync,PUCHAR portBase);
+
 public:
     STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
 
@@ -29,107 +116,2578 @@ public:
         }
         return m_Ref;
     }
-    IMP_IMiniportDMus;
-    CMiniportDMus(IUnknown *OuterUnknown){}
-    virtual ~CMiniportDMus(){}
 
-protected:
-    LONG m_Ref;
+    CMiniportDMusUART(IUnknown * Unknown){}
+    ~CMiniportDMusUART();
+
+    /*************************************************************************
+     * IMiniport methods
+     */
+    STDMETHODIMP_(NTSTATUS) 
+    GetDescription
+    (   OUT     PPCFILTER_DESCRIPTOR *  OutFilterDescriptor
+    );
+    STDMETHODIMP_(NTSTATUS) 
+    DataRangeIntersection
+    (   IN      ULONG           PinId
+    ,   IN      PKSDATARANGE    DataRange
+    ,   IN      PKSDATARANGE    MatchingDataRange
+    ,   IN      ULONG           OutputBufferLength
+    ,   OUT     PVOID           ResultantFormat
+    ,   OUT     PULONG          ResultantFormatLength
+    )
+    {
+        return STATUS_NOT_IMPLEMENTED;
+    }
+
+    /*************************************************************************
+     * IMiniportDMus methods
+     */
+    STDMETHODIMP_(NTSTATUS) Init
+    (
+        IN      PUNKNOWN        UnknownAdapter,
+        IN      PRESOURCELIST   ResourceList,
+        IN      PPORTDMUS       Port,
+        OUT     PSERVICEGROUP * ServiceGroup
+    );
+    STDMETHODIMP_(NTSTATUS) NewStream
+    (
+        OUT     PMXF                  * Stream,
+        IN      PUNKNOWN                OuterUnknown    OPTIONAL,
+        IN      POOL_TYPE               PoolType,
+        IN      ULONG                   PinID,
+        IN      DMUS_STREAM_TYPE        StreamType,
+        IN      PKSDATAFORMAT           DataFormat,
+        OUT     PSERVICEGROUP         * ServiceGroup,
+        IN      PAllocatorMXF           AllocatorMXF,
+        IN      PMASTERCLOCK            MasterClock,
+        OUT     PULONGLONG              SchedulePreFetch
+    );
+    STDMETHODIMP_(void) Service
+    (   void
+    );
+
+    /*************************************************************************
+     * IMusicTechnology methods
+     */
+    IMP_IMusicTechnology;
 
+    /*************************************************************************
+     * IPowerNotify methods
+     */
+    IMP_IPowerNotify;
+
+    /*************************************************************************
+     * Friends 
+     */
+    friend class CMiniportDMusUARTStream;
+    friend NTSTATUS 
+        DMusMPUInterruptServiceRoutine(PINTERRUPTSYNC InterruptSync,PVOID DynamicContext);
+    friend NTSTATUS 
+        SynchronizedDMusMPUWrite(PINTERRUPTSYNC InterruptSync,PVOID syncWriteContext);
+    friend VOID NTAPI 
+        DMusUARTTimerDPC(PKDPC Dpc,PVOID DeferredContext,PVOID SystemArgument1,PVOID SystemArgument2);
+    friend NTSTATUS NTAPI PropertyHandler_Synth(IN PPCPROPERTY_REQUEST PropertyRequest);
+    friend STDMETHODIMP_(NTSTATUS) SnapTimeStamp(PINTERRUPTSYNC InterruptSync,PVOID pStream);
 };
 
-// IUnknown methods
+/*****************************************************************************
+ * CMiniportDMusUARTStream
+ *****************************************************************************
+ * MPU-401 miniport stream.  This object is associated with the pin and is
+ * created when the pin is instantiated.  It inherits IMXF
+ * so it can expose this interface and CUnknown so it automatically gets
+ * reference counting and aggregation support.
+ */
+class CMiniportDMusUARTStream :   public IMXF
+{
+private:
+    LONG                m_Ref;                  // Reference Count
+    CMiniportDMusUART * m_pMiniport;            // Parent.
+    REFERENCE_TIME      m_SnapshotTimeStamp;    // Current snapshot of miniport's input timestamp.
+    PUCHAR              m_pPortBase;            // Base port address.
+    BOOLEAN             m_fCapture;             // Whether this is capture.
+    long                m_NumFailedMPUTries;    // Deadman timeout for MPU hardware.
+    PAllocatorMXF       m_AllocatorMXF;         // source/sink for DMus structs
+    PMXF                m_sinkMXF;              // sink for DMus capture
+    PDMUS_KERNEL_EVENT  m_DMKEvtQueue;          // queue of waiting events
+    ULONG               m_NumberOfRetries;      // Number of consecutive times the h/w was busy/full
+    ULONG               m_DMKEvtOffset;         // offset into the event
+    KDPC                m_Dpc;                  // DPC for timer
+    KTIMER              m_TimerEvent;           // timer 
+    BOOL                m_TimerQueued;          // whether a timer has been set
+    KSPIN_LOCK          m_DpcSpinLock;          // protects the ConsumeEvents DPC
 
-NTSTATUS
-NTAPI
-CMiniportDMus::QueryInterface(
-    IN  REFIID refiid,
-    OUT PVOID* Output)
+    STDMETHODIMP_(NTSTATUS) SourceEvtsToPort();
+    STDMETHODIMP_(NTSTATUS) ConsumeEvents();
+    STDMETHODIMP_(NTSTATUS) PutMessageLocked(PDMUS_KERNEL_EVENT pDMKEvt);
+
+public:
+    STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+    STDMETHODIMP_(ULONG) AddRef()
+    {
+        InterlockedIncrement(&m_Ref);
+        return m_Ref;
+    }
+    STDMETHODIMP_(ULONG) Release()
+    {
+        InterlockedDecrement(&m_Ref);
+
+        if (!m_Ref)
+        {
+            delete this;
+            return 0;
+        }
+        return m_Ref;
+    }
+
+    ~CMiniportDMusUARTStream();
+
+    STDMETHODIMP_(NTSTATUS) Init
+    (
+        IN      CMiniportDMusUART * pMiniport,
+        IN      PUCHAR              pPortBase,
+        IN      BOOLEAN             fCapture,
+        IN      PAllocatorMXF       allocatorMXF,
+        IN      PMASTERCLOCK        masterClock
+    );
+
+    NTSTATUS HandlePortParams
+    (
+        IN      PPCPROPERTY_REQUEST     Request
+    );
+
+    /*************************************************************************
+     * IMiniportStreamDMusUART methods
+     */
+    IMP_IMXF;
+
+    STDMETHODIMP_(NTSTATUS) Write
+    (
+        IN      PVOID       BufferAddress,
+        IN      ULONG       BytesToWrite,
+        OUT     PULONG      BytesWritten
+    );
+
+    friend VOID NTAPI
+    DMusUARTTimerDPC
+    (
+        IN      PKDPC   Dpc,
+        IN      PVOID   DeferredContext,
+        IN      PVOID   SystemArgument1,
+        IN      PVOID   SystemArgument2
+    );
+    friend NTSTATUS PropertyHandler_Synth(IN PPCPROPERTY_REQUEST);
+    friend STDMETHODIMP_(NTSTATUS) SnapTimeStamp(PINTERRUPTSYNC InterruptSync,PVOID pStream);
+};
+
+
+
+#define STR_MODULENAME "DMusUART:Miniport: "
+
+#ifdef _MSC_VER
+#pragma code_seg("PAGE")
+#endif
+
+#define UartFifoOkForWrite(status)  ((status & MPU401_DRR) == 0)
+#define UartFifoOkForRead(status)   ((status & MPU401_DSR) == 0)
+
+typedef struct
+{
+    CMiniportDMusUART  *Miniport;
+    PUCHAR              PortBase;
+    PVOID               BufferAddress;
+    ULONG               Length;
+    PULONG              BytesRead;
+}
+SYNCWRITECONTEXT, *PSYNCWRITECONTEXT;
+
+/*****************************************************************************
+ * PinDataRangesStreamLegacy
+ * PinDataRangesStreamDMusic
+ *****************************************************************************
+ * Structures indicating range of valid format values for live pins.
+ */
+static
+KSDATARANGE_MUSIC PinDataRangesStreamLegacy =
 {
-    if (IsEqualGUIDAligned(refiid, IID_IMiniportDMus))
     {
-        *Output = PVOID(PUNKNOWN(this));
-&