mirror of
https://github.com/reactos/reactos.git
synced 2025-06-26 19:19:43 +00:00
[CMAKE]
Sync trunk (rr49606) svn path=/branches/cmake-bringup/; revision=49607
This commit is contained in:
commit
406dfdbc87
324 changed files with 15065 additions and 2892 deletions
|
@ -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 štvorcový palec"
|
||||
END
|
||||
|
||||
|
|
|
@ -25,6 +25,17 @@
|
|||
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))
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
|
||||
set_unicode()
|
||||
|
||||
list(APPEND SOURCE
|
||||
aboutdlg.c
|
||||
available.c
|
||||
|
|
|
@ -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 та інших архівних файлів.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 = Невідома
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -14,5 +14,8 @@ CDPath = none
|
|||
[Section.0407]
|
||||
Description = Kleiner und einfacher Mediaplayer.
|
||||
|
||||
[Section.0415]
|
||||
Description = Prosty i lekki odtwarzacz audio.
|
||||
|
||||
[Section.0422]
|
||||
Description = Простий та маленький програвач аудіо файлів.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 = Відкритий офісний пакет.
|
||||
|
|
|
@ -14,5 +14,8 @@ CDPath = none
|
|||
[Section.0407]
|
||||
Description = KDE für Windows.
|
||||
|
||||
[Section.0415]
|
||||
Description = KDE dla Windows.
|
||||
|
||||
[Section.0422]
|
||||
Description = KDE для Windows.
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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 Фреймворк.
|
||||
|
|
|
@ -20,5 +20,8 @@ Description = Reproductor multimedia.
|
|||
[Section.0419]
|
||||
Description = Мультимедийный проигрыватель.
|
||||
|
||||
[Section.0415]
|
||||
Description = Odtwarzacz multimediów.
|
||||
|
||||
[Section.0422]
|
||||
Description = Мультимедійний програвач.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
|
@ -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 = Дуже потужна динамічна мова програмування.
|
||||
|
|
|
@ -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ścią. 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. Його метою Ñ” додати нові можливоÑ<C2BE>ті та Ñ<>табільніÑ<E28093>ть до доÑ<C2BE>віду клаÑ<C2B0>ичного 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).
|
||||
|
|
|
@ -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, але виріс до редактора загального користування з засобами збирання та запуску програм.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 = Ігрова платформа, що використовується багатьма іграми.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 клієнт/сервер.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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 = Мультимедійний програвач.
|
||||
|
|
|
@ -8,6 +8,7 @@ list(APPEND SOURCE
|
|||
about.c
|
||||
childwnd.c
|
||||
edit.c
|
||||
error.c
|
||||
find.c
|
||||
framewnd.c
|
||||
hexedit.c
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -333,20 +335,26 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
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) {
|
||||
/* 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);
|
||||
/* 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;
|
||||
|
|
|
@ -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, ...)
|
||||
|
|
14
base/applications/regedit/error.c
Normal file
14
base/applications/regedit/error.c
Normal file
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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šechny čá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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 "テキスト ファイルをレジストリにインポートします。"
|
||||
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
|
||||
|
@ -330,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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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œæ lub czêœæ 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œciwa wartoœæ DWORD)"
|
||||
END
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 |
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -137,9 +137,11 @@
|
|||
#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
|
||||
|
@ -199,6 +201,8 @@
|
|||
#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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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%%"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* TRANSLATOR: M rio KaŸm 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ś zav dzaź syst‚mu na pevně disk (MBR a VBR).",
|
||||
TEXT_STYLE_NORMAL
|
||||
},
|
||||
{
|
||||
8,
|
||||
13,
|
||||
"Install bootloader on the harddisk (VBR only).",
|
||||
"Nainçtalovaś zav dzaź syst‚mu na pevně disk (iba VBR).",
|
||||
TEXT_STYLE_NORMAL
|
||||
},
|
||||
{
|
||||
|
|
|
@ -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<EFBFBD> %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<EFBFBD> okno\n\
|
||||
MAX maximalizujte okno\n\
|
||||
RESTORE obnovi<EFBFBD> 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<EFBFBD> okno\n\
|
||||
MAX maximalizujte okno\n\
|
||||
RESTORE obnovi<EFBFBD> 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šlo"
|
||||
|
||||
|
||||
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š 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šla\n"
|
||||
STRING_ERROR_FILE_NOT_FOUND, "Súbor sa nenašiel\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šla - %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, "Žiadne súbory sa nenašli - %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á ')'."
|
||||
|
|
|
@ -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) );
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* TRANSLATOR : M rio KaŸm 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‚m s£borov UrŸuje typ s£borov‚ho syst‚mu (%s).\n\
|
||||
-V:menovka UrŸuje menovku zv„zku.\n\
|
||||
-Q Vykon va rìchle form tovanie.\n\
|
||||
-A:ve–kosœ 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–kosś Prepˇçe predvolenŁ ve–kosś alokaźnej jednotky. Pre vçeobecn‚\n\
|
||||
pou§itie sŁ d“razne odporŁźan‚ predvolen‚ 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–kosti alokaźnej\n\
|
||||
jednotky nad 4096.\n\
|
||||
-C SŁbory vytvoren‚ na novom zv„zku budŁ automaticky\n\
|
||||
komprimovan‚.\n\n"
|
||||
|
||||
STRING_COMPLETE "DokonŸen‚ 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ś vstupn‚ 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ś typ jednotky"
|
||||
|
||||
STRING_INSERT_DISK "Vlo§te nov£ disketu do jednotky %C:\na potom stlaŸte ENTER..."
|
||||
|
||||
STRING_NO_VOLUME "Could not query volume"
|
||||
STRING_NO_VOLUME "Nemo§no dotazovaś zv„zok"
|
||||
|
||||
STRING_NO_VOLUME_SIZE "Could not query volume size"
|
||||
STRING_NO_VOLUME_SIZE "Nemo§no dotazovaś ve–kosś zv„zku"
|
||||
|
||||
STRING_FILESYSTEM "Typ syst‚mu s£borov je %s.\n"
|
||||
|
||||
|
@ -49,8 +49,8 @@ STRING_LABEL_NAME_EDIT "Vlo
|
|||
|
||||
STRING_ERROR_LABEL "Bola zadan nespr vna menovka zv„zku 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•NEJ DISKOVEJ\n\
|
||||
JEDNOTKE %C: BUDé STRATEN<45>!\nPokraźovaś s form tovanˇm (A/N)? "
|
||||
|
||||
STRING_YES_NO_FAQ "AN"
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
TotalSize = (Length * sizeof(WCHAR)) + BufferSize + 4 * sizeof(WCHAR);
|
||||
/* get length for request */
|
||||
TotalSize = (Length * sizeof(WCHAR)) + BufferSize;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
RtlInitUnicodeString(&ObjectName, pStr);
|
||||
/* copy object type */
|
||||
wcscpy(pStr, ObjectType);
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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,20 +812,6 @@ LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle,
|
|||
return Status;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
NTSTATUS
|
||||
WINAPI
|
||||
LsaQueryTrustedDomainInfoByName(
|
||||
LSA_HANDLE PolicyHandle,
|
||||
PLSA_UNICODE_STRING TrustedDomainName,
|
||||
TRUSTED_INFORMATION_CLASS InformationClass,
|
||||
PVOID *Buffer)
|
||||
{
|
||||
FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainName, InformationClass, Buffer);
|
||||
return STATUS_OBJECT_NAME_NOT_FOUND;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
|
@ -812,22 +828,78 @@ LsaQueryTrustedDomainInfo(
|
|||
return STATUS_OBJECT_NAME_NOT_FOUND;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS
|
||||
WINAPI
|
||||
LsaRemoveAccountRights(
|
||||
LSA_HANDLE PolicyHandle,
|
||||
PSID AccountSid,
|
||||
BOOLEAN AllRights,
|
||||
PLSA_UNICODE_STRING UserRights,
|
||||
ULONG CountOfRights)
|
||||
LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle,
|
||||
IN PLSA_UNICODE_STRING TrustedDomainName,
|
||||
IN TRUSTED_INFORMATION_CLASS InformationClass,
|
||||
OUT PVOID *Buffer)
|
||||
{
|
||||
FIXME("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle, AccountSid, AllRights, UserRights, CountOfRights);
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS
|
||||
WINAPI
|
||||
LsaRemoveAccountRights(IN LSA_HANDLE PolicyHandle,
|
||||
IN PSID AccountSid,
|
||||
IN BOOLEAN AllRights,
|
||||
IN PLSA_UNICODE_STRING UserRights,
|
||||
IN ULONG 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
|
||||
*/
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -2860,7 +2860,7 @@ Initialize(TcpipConfNotifyImpl * This)
|
|||
}
|
||||
pCurSettings->AutoconfigActive = pPerInfo->AutoconfigActive;
|
||||
}
|
||||
CoTaskMemFree(pInfo);
|
||||
CoTaskMemFree(pPerInfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -46,6 +46,7 @@ add_importlibs(shlwapi
|
|||
version
|
||||
shell32
|
||||
kernel32
|
||||
msvcrt
|
||||
ntdll)
|
||||
|
||||
|
||||
|
|
|
@ -154,49 +154,18 @@ CallMsgFilterA(
|
|||
LPMSG lpMsg,
|
||||
int nCode)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if (nCode != HCBT_CREATEWND) ret = NtUserCallMsgFilter((LPMSG) lpMsg, nCode);
|
||||
else
|
||||
{
|
||||
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))
|
||||
if (NtCurrentTeb()->Win32ThreadInfo && IsThreadHooked(GetWin32ClientInfo()))
|
||||
{
|
||||
RtlCreateUnicodeStringFromAsciiz(&usBuffer,cbtcwA->lpcs->lpszName);
|
||||
csW.lpszName = usBuffer.Buffer;
|
||||
}
|
||||
if (HIWORD(cbtcwA->lpcs->lpszClass))
|
||||
if ( lpMsg->message & ~WM_MAXIMUM )
|
||||
{
|
||||
RtlCreateUnicodeStringFromAsciiz(&usBuffer,cbtcwA->lpcs->lpszClass);
|
||||
csW.lpszClass = usBuffer.Buffer;
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
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 );
|
||||
RtlCopyMemory(&Msg, lpMsg, sizeof(MSG));
|
||||
return NtUserCallMsgFilter( &Msg, nCode);
|
||||
}
|
||||
return ret;
|
||||
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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -655,6 +655,19 @@ WdmAudSetWaveStateByMMixer(
|
|||
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
|
||||
IN BOOL 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)
|
||||
{
|
||||
if (bStart)
|
||||
{
|
||||
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
|
||||
|
@ -667,6 +680,22 @@ WdmAudSetWaveStateByMMixer(
|
|||
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
|
||||
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_STOP);
|
||||
}
|
||||
}
|
||||
else if (DeviceType == MIDI_IN_DEVICE_TYPE || DeviceType == MIDI_OUT_DEVICE_TYPE)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
@ -888,10 +903,6 @@ ProbeMdl:
|
|||
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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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:
|
||||
|
||||
//
|
||||
|
|
|
@ -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,8 +70,14 @@ 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}};
|
||||
const GUID KSDATAFORMAT_SPECIFIER_WAVEFORMATEX = {0x05589f81L, 0xc356, 0x11ce, {0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a}};
|
||||
|
@ -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
|
||||
|
||||
|
|
|
@ -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, \
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
// ioctl from KsStudio
|
||||
// Wdmaud already probes buffers, therefore no need to probe it again
|
||||
// probe the stream irp
|
||||
// lets probe the irp
|
||||
if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_WRITE_STREAM)
|
||||
{
|
||||
// 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);
|
||||
else
|
||||
PC_ASSERT(0);
|
||||
}
|
||||
|
||||
// check for success
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("KsProbeStreamIrp failed with %x\n", Status);
|
||||
// irp probing failed
|
||||
FreeItem(StreamData, TAG_PORTCLASS);
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
// get first stream header
|
||||
|
||||
if (Irp->RequestorMode == UserMode)
|
||||
Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
|
||||
|
||||
// store header
|
||||
StreamData->CurStreamHeader = Header;
|
||||
|
||||
// sanity check
|
||||
PC_ASSERT(Header);
|
||||
|
||||
// first calculate the numbers of stream headers
|
||||
Length = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
|
||||
|
||||
do
|
||||
{
|
||||
/* subtract size */
|
||||
Length -= Header->Size;
|
||||
|
||||
/* increment header count */
|
||||
StreamData->StreamHeaderCount++;
|
||||
|
||||
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
|
||||
{
|
||||
// irp sink
|
||||
StreamData->TotalStreamData += Header->DataUsed;
|
||||
}
|
||||
else
|
||||
Header = (PKSSTREAM_HEADER)Irp->UserBuffer;
|
||||
|
||||
// sanity check
|
||||
PC_ASSERT(Header);
|
||||
|
||||
// calculate num headers
|
||||
NumHeaders = IoStack->Parameters.DeviceIoControl.OutputBufferLength / Header->Size;
|
||||
|
||||
// assume headers of same length
|
||||
PC_ASSERT(IoStack->Parameters.DeviceIoControl.OutputBufferLength % Header->Size == 0);
|
||||
|
||||
|
||||
// get first audio buffer
|
||||
Mdl = Irp->MdlAddress;
|
||||
// sanity check
|
||||
PC_ASSERT(Mdl);
|
||||
|
||||
// store the current stream header
|
||||
Irp->Tail.Overlay.DriverContext[OFFSET_STREAMHEADER] = (PVOID)Header;
|
||||
// store header count
|
||||
Irp->Tail.Overlay.DriverContext[OFFSET_HEADERCOUNT] = UlongToPtr(NumHeaders);
|
||||
|
||||
// store current header index
|
||||
Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(0);
|
||||
|
||||
NumData = 0;
|
||||
// prepare all headers
|
||||
for(Index = 0; Index < NumHeaders; Index++)
|
||||
{
|
||||
// sanity checks
|
||||
PC_ASSERT(Header);
|
||||
PC_ASSERT(Mdl);
|
||||
|
||||
if (Irp->RequestorMode == UserMode)
|
||||
{
|
||||
Header->Data = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
|
||||
// irp source
|
||||
StreamData->TotalStreamData += Header->FrameExtent;
|
||||
}
|
||||
|
||||
if (!Header->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;
|
||||
/* move to next header */
|
||||
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
|
||||
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
}while(Length);
|
||||
|
||||
// sanity check
|
||||
ASSERT(StreamData->StreamHeaderCount);
|
||||
|
||||
// allocate array for storing the pointers of the data */
|
||||
StreamData->Data = (PVOID*)AllocateItem(NonPagedPool, sizeof(PVOID) * StreamData->StreamHeaderCount, TAG_PORTCLASS);
|
||||
if (!StreamData->Data)
|
||||
{
|
||||
// out of memory
|
||||
FreeItem(StreamData, TAG_PORTCLASS);
|
||||
|
||||
// done
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
// increment num mappings
|
||||
InterlockedIncrement(&m_NumMappings);
|
||||
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)
|
||||
{
|
||||
// out of memory
|
||||
FreeItem(StreamData->Data, TAG_PORTCLASS);
|
||||
FreeItem(StreamData, TAG_PORTCLASS);
|
||||
|
||||
// increment available data
|
||||
InterlockedExchangeAdd((PLONG)&m_NumDataAvailable,
|
||||
(max(Header->DataUsed, Header->FrameExtent)));
|
||||
|
||||
NumData += max(Header->DataUsed, Header->FrameExtent);
|
||||
|
||||
// move to next header
|
||||
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
|
||||
|
||||
// move to next mdl
|
||||
Mdl = Mdl->Next;
|
||||
// done
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
}
|
||||
|
||||
DPRINT("StreamHeaders %u NumData %u FrameSize %u NumDataAvailable %u\n", NumHeaders, NumData, m_MaxFrameSize, m_NumDataAvailable);
|
||||
*Data = NumData;
|
||||
|
||||
// now get a system address for the user buffers
|
||||
Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
|
||||
Mdl = Irp->MdlAddress;
|
||||
|
||||
for(Index = 0; Index < StreamData->StreamHeaderCount; Index++)
|
||||
{
|
||||
/* get system address */
|
||||
StreamData->Data[Index] = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
|
||||
|
||||
/* 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);
|
||||
|
||||
}
|
||||
|
||||
// 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;
|
||||
|
||||
if (!m_Irp)
|
||||
{
|
||||
// silence buffer was used
|
||||
return;
|
||||
}
|
||||
|
||||
// get stream header
|
||||
StreamHeader = (PKSSTREAM_HEADER)STREAMHEADER_CURRENT(m_Irp);
|
||||
PKSSTREAM_DATA StreamData;
|
||||
ULONG Size;
|
||||
PIO_STACK_LOCATION IoStack;
|
||||
|
||||
// sanity check
|
||||
// ASSERT(StreamHeader);
|
||||
ASSERT(m_Irp);
|
||||
|
||||
// get stream data
|
||||
StreamData = (PKSSTREAM_DATA)m_Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
|
||||
|
||||
// sanity check
|
||||
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))
|
||||
// sanity check
|
||||
PC_ASSERT(Size == m_CurrentOffset);
|
||||
|
||||
if (StreamData->StreamHeaderIndex + 1 < StreamData->StreamHeaderCount)
|
||||
{
|
||||
// the irp has at least one more stream header
|
||||
m_Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(STREAMHEADER_INDEX(m_Irp) + 1);
|
||||
// move to next stream header
|
||||
StreamData->CurStreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamData->CurStreamHeader + StreamData->CurStreamHeader->Size);
|
||||
|
||||
// get next stream header
|
||||
StreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamHeader + StreamHeader->Size);
|
||||
// increment stream header index
|
||||
StreamData->StreamHeaderIndex++;
|
||||
|
||||
// store next stream header
|
||||
STREAMHEADER_CURRENT(m_Irp) = (PVOID)StreamHeader;
|
||||
|
||||
// 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);
|
||||
|
||||
if (!m_Irp)
|
||||
{
|
||||
// get an irp from the queue
|
||||
Irp = KsRemoveIrpFromCancelableQueue(&m_IrpList, &m_IrpListLock, KsListEntryHead, KsAcquireAndRemoveOnlySingleItem);
|
||||
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);
|
||||
|
||||
// return mapping
|
||||
*PhysicalAddress = MmGetPhysicalAddress(StreamHeader->Data);
|
||||
*VirtualAddress = StreamHeader->Data;
|
||||
*ByteCount = StreamHeader->DataUsed;
|
||||
|
||||
// decrement mapping count
|
||||
InterlockedDecrement(&m_NumMappings);
|
||||
// decrement num data available
|
||||
m_NumDataAvailable -= StreamHeader->DataUsed;
|
||||
// setup mapping
|
||||
*PhysicalAddress = MmGetPhysicalAddress(StreamData->Data[StreamData->StreamHeaderIndex]);
|
||||
*VirtualAddress = StreamData->Data[StreamData->StreamHeaderIndex];
|
||||
|
||||
// store tag in irp
|
||||
Irp->Tail.Overlay.DriverContext[3] = Tag;
|
||||
StreamData->Tags[StreamData->StreamHeaderIndex] = Tag;
|
||||
|
||||
// mapping size
|
||||
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
|
||||
{
|
||||
// sink pin
|
||||
*ByteCount = StreamData->CurStreamHeader->DataUsed;
|
||||
|
||||
// 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];
|
||||
|
||||
// driver must release items in the same order
|
||||
PC_ASSERT(Irp->Tail.Overlay.DriverContext[3] == Tag);
|
||||
// sanity check
|
||||
PC_ASSERT(StreamData->StreamHeaderIndex + 1 == StreamData->StreamHeaderCount);
|
||||
|
||||
// irp has been processed completly
|
||||
// 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
|
||||
//
|
||||
|
||||
// free stream data array
|
||||
FreeItem(StreamData->Data, TAG_PORTCLASS);
|
||||
|
||||
// free stream tags array
|
||||
FreeItem(StreamData->Tags, TAG_PORTCLASS);
|
||||
|
||||
// free stream data
|
||||
FreeItem(StreamData, TAG_PORTCLASS);
|
||||
|
||||
// get io stack
|
||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||
|
||||
// store operation status
|
||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
|
||||
// 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;
|
||||
// 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);
|
||||
// initialize to zero
|
||||
*FirstTag = NULL;
|
||||
*LastTag = NULL;
|
||||
|
||||
// get tag of first acquired buffer
|
||||
*FirstTag = Irp->Tail.Overlay.DriverContext[3];
|
||||
|
||||
// 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);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -604,7 +604,7 @@ CPortPinDMus::Init(
|
|||
}
|
||||
}
|
||||
|
||||
Status = m_IrpQueue->Init(ConnectDetails, 0, 0);
|
||||
Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, 0, 0, FALSE);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("IrpQueue_Init failed with %x\n", Status);
|
||||
|
|
|
@ -699,15 +699,15 @@ CPortPinWaveCyclic::UpdateCommonBuffer(
|
|||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
Gap = Position - m_CommonBufferOffset;
|
||||
if (Gap > m_FrameSize)
|
||||
if (Gap > BufferLength)
|
||||
{
|
||||
// insert silence samples
|
||||
DPRINT1("Inserting Silence Buffer Offset %lu GapLength %lu\n", m_CommonBufferOffset, BufferLength);
|
||||
DPRINT("Inserting Silence Buffer Offset %lu GapLength %lu\n", m_CommonBufferOffset, BufferLength);
|
||||
m_Stream->Silence((PUCHAR)m_CommonBuffer + m_CommonBufferOffset, BufferLength);
|
||||
|
||||
m_CommonBufferOffset += BufferLength;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
BytesToCopy = min(BufferLength, BufferSize);
|
||||
|
@ -758,10 +758,10 @@ CPortPinWaveCyclic::UpdateCommonBufferOverlap(
|
|||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
Gap = m_CommonBufferSize - m_CommonBufferOffset + Position;
|
||||
if (Gap > m_FrameSize)
|
||||
if (Gap > BufferLength)
|
||||
{
|
||||
// insert silence samples
|
||||
DPRINT1("Overlap Inserting Silence Buffer Size %lu Offset %lu Gap %lu Position %lu\n", m_CommonBufferSize, m_CommonBufferOffset, Gap, Position);
|
||||
DPRINT("Overlap Inserting Silence Buffer Size %lu Offset %lu Gap %lu Position %lu\n", m_CommonBufferSize, m_CommonBufferOffset, Gap, Position);
|
||||
m_Stream->Silence((PUCHAR)m_CommonBuffer + m_CommonBufferOffset, BufferLength);
|
||||
|
||||
m_CommonBufferOffset += BufferLength;
|
||||
|
@ -1290,7 +1290,7 @@ CPortPinWaveCyclic::Init(
|
|||
PC_ASSERT(NT_SUCCESS(Status));
|
||||
PC_ASSERT(m_FrameSize);
|
||||
|
||||
DPRINT1("Bits %u Samples %u Channels %u Tag %u FrameSize %u CommonBufferSize %lu\n", ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.wBitsPerSample, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.nSamplesPerSec, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.nChannels, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.wFormatTag, m_FrameSize, m_CommonBufferSize);
|
||||
DPRINT1("Bits %u Samples %u Channels %u Tag %u FrameSize %u CommonBufferSize %lu, CommonBuffer %p\n", ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.wBitsPerSample, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.nSamplesPerSec, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.nChannels, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.wFormatTag, m_FrameSize, m_CommonBufferSize, m_DmaChannel->SystemAddress());
|
||||
|
||||
|
||||
/* set up allocator framing */
|
||||
|
@ -1303,7 +1303,7 @@ CPortPinWaveCyclic::Init(
|
|||
|
||||
m_Stream->Silence(m_CommonBuffer, m_CommonBufferSize);
|
||||
|
||||
Status = m_IrpQueue->Init(ConnectDetails, m_FrameSize, 0);
|
||||
Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, m_FrameSize, 0, FALSE);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
m_IrpQueue->Release();
|
||||
|
|
|
@ -919,7 +919,7 @@ CPortPinWavePci::Init(
|
|||
}
|
||||
|
||||
// initialize irp queue
|
||||
Status = m_IrpQueue->Init(ConnectDetails, m_AllocatorFraming.FrameSize, m_AllocatorFraming.FileAlignment);
|
||||
Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, m_AllocatorFraming.FrameSize, m_AllocatorFraming.FileAlignment, TRUE);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
// this should never happen
|
||||
|
|
|
@ -283,7 +283,7 @@ NTAPI
|
|||
CPortPinWaveRT::HandleKsStream(
|
||||
IN PIRP Irp)
|
||||
{
|
||||
DPRINT("IPortPinWaveRT_HandleKsStream entered State %u Stream %p\n", m_State, m_Stream);
|
||||
DPRINT("IPortPinWaveRT_HandleKsStream entered State %u Stream %p is UNIMPLEMENTED\n", m_State, m_Stream);
|
||||
|
||||
return STATUS_PENDING;
|
||||
}
|
||||
|
@ -587,7 +587,7 @@ CPortPinWaveRT::Init(
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
Status = m_IrpQueue->Init(ConnectDetails, 0, 0);
|
||||
Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, 0, 0, FALSE);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
goto cleanup;
|
||||
|
|
|
@ -39,10 +39,8 @@ public:
|
|||
virtual ~CPortWaveCyclic(){}
|
||||
|
||||
protected:
|
||||
BOOL m_bInitialized;
|
||||
PDEVICE_OBJECT m_pDeviceObject;
|
||||
PMINIPORTWAVECYCLIC m_pMiniport;
|
||||
PRESOURCELIST m_pResourceList;
|
||||
PPINCOUNT m_pPinCount;
|
||||
PPOWERNOTIFY m_pPowerNotify;
|
||||
PPCFILTER_DESCRIPTOR m_pDescriptor;
|
||||
|
@ -202,12 +200,6 @@ CPortWaveCyclic::GetDeviceProperty(
|
|||
{
|
||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||
|
||||
if (!m_bInitialized)
|
||||
{
|
||||
DPRINT("IPortWaveCyclic_fnNewRegistryKey called w/o initiazed\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
return IoGetDeviceProperty(m_pDeviceObject, DeviceRegistryProperty, BufferLength, PropertyBuffer, ReturnLength);
|
||||
}
|
||||
|
||||
|
@ -228,12 +220,6 @@ CPortWaveCyclic::Init(
|
|||
DPRINT("IPortWaveCyclic_Init entered %p\n", this);
|
||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||
|
||||
if (m_bInitialized)
|
||||
{
|
||||
DPRINT("IPortWaveCyclic_Init called again\n");
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
Status = UnknownMiniport->QueryInterface(IID_IMiniportWaveCyclic, (PVOID*)&Miniport);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
|
@ -244,22 +230,13 @@ CPortWaveCyclic::Init(
|
|||
// Initialize port object
|
||||
m_pMiniport = Miniport;
|
||||
m_pDeviceObject = DeviceObject;
|
||||
m_bInitialized = TRUE;
|
||||
m_pResourceList = ResourceList;
|
||||
|
||||
|
||||
if (ResourceList)
|
||||
{
|
||||
// increment reference on resource list
|
||||
ResourceList->AddRef();
|
||||
}
|
||||
|
||||
// initialize miniport
|
||||
Status = Miniport->Init(UnknownAdapter, ResourceList, this);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("IMiniportWaveCyclic_Init failed with %x\n", Status);
|
||||
Miniport->Release();
|
||||
m_bInitialized = FALSE;
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -270,7 +247,6 @@ CPortWaveCyclic::Init(
|
|||
{
|
||||
DPRINT("failed to get description\n");
|
||||
Miniport->Release();
|
||||
m_bInitialized = FALSE;
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -294,7 +270,6 @@ CPortWaveCyclic::Init(
|
|||
{
|
||||
DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
|
||||
Miniport->Release();
|
||||
m_bInitialized = FALSE;
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -335,11 +310,6 @@ CPortWaveCyclic::NewRegistryKey(
|
|||
{
|
||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||
|
||||
if (!m_bInitialized)
|
||||
{
|
||||
DPRINT("IPortWaveCyclic_fnNewRegistryKey called w/o initialized\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
return PcNewRegistryKey(OutRegistryKey, OuterUnknown, RegistryKeyType, DesiredAccess, m_pDeviceObject, (ISubdevice*)this, ObjectAttributes, CreateOptions, Disposition);
|
||||
}
|
||||
|
||||
|
@ -365,12 +335,6 @@ CPortWaveCyclic::NewMasterDmaChannel(
|
|||
|
||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||
|
||||
if (!m_bInitialized)
|
||||
{
|
||||
DPRINT("IPortWaveCyclic_fnNewSlaveDmaChannel called w/o initialized\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
Status = PcDmaMasterDescription(ResourceList, (Dma32BitAddresses | Dma64BitAddresses), Dma32BitAddresses, 0, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, 0, &DeviceDescription);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
|
@ -397,12 +361,6 @@ CPortWaveCyclic::NewSlaveDmaChannel(
|
|||
|
||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||
|
||||
if (!m_bInitialized)
|
||||
{
|
||||
DPRINT("IPortWaveCyclic_fnNewSlaveDmaChannel called w/o initialized\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
// FIXME
|
||||
// Check for F-Type DMA Support
|
||||
//
|
||||
|
|
|
@ -43,8 +43,6 @@ protected:
|
|||
|
||||
PMINIPORTWAVEPCI m_Miniport;
|
||||
PDEVICE_OBJECT m_pDeviceObject;
|
||||
BOOL m_bInitialized;
|
||||
PRESOURCELIST m_pResourceList;
|
||||
PSERVICEGROUP m_ServiceGroup;
|
||||
PPINCOUNT m_pPinCount;
|
||||
PPOWERNOTIFY m_pPowerNotify;
|
||||
|
@ -233,12 +231,6 @@ CPortWavePci::Init(
|
|||
this, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
|
||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||
|
||||
if (m_bInitialized)
|
||||
{
|
||||
DPRINT("IPortWavePci_fnInit called again\n");
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
Status = UnknownMiniport->QueryInterface(IID_IMiniportWavePci, (PVOID*)&Miniport);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
|
@ -249,30 +241,20 @@ CPortWavePci::Init(
|
|||
// Initialize port object
|
||||
m_Miniport = Miniport;
|
||||
m_pDeviceObject = DeviceObject;
|
||||
m_bInitialized = TRUE;
|
||||
m_pResourceList = ResourceList;
|
||||
|
||||
InitializeListHead(&m_EventList);
|
||||
KeInitializeSpinLock(&m_EventListLock);
|
||||
|
||||
// increment reference on miniport adapter
|
||||
Miniport->AddRef();
|
||||
|
||||
|
||||
if (ResourceList)
|
||||
{
|
||||
// increment reference on resource list
|
||||
ResourceList->AddRef();
|
||||
}
|
||||
|
||||
Status = Miniport->Init(UnknownAdapter, ResourceList, this, &ServiceGroup);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("IPortWavePci_fnInit failed with %x\n", Status);
|
||||
m_bInitialized = FALSE;
|
||||
|
||||
// release reference on miniport adapter
|
||||
Miniport->Release();
|
||||
// increment reference on resource list
|
||||
ResourceList->Release();
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -282,7 +264,6 @@ CPortWavePci::Init(
|
|||
{
|
||||
DPRINT("failed to get description\n");
|
||||
Miniport->Release();
|
||||
m_bInitialized = FALSE;
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -307,7 +288,6 @@ CPortWavePci::Init(
|
|||
{
|
||||
DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
|
||||
Miniport->Release();
|
||||
m_bInitialized = FALSE;
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -361,12 +341,6 @@ CPortWavePci::NewRegistryKey(
|
|||
DPRINT("IPortWavePci_fnNewRegistryKey entered\n");
|
||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||
|
||||
if (!m_bInitialized)
|
||||
{
|
||||
DPRINT("IPortWavePci_fnNewRegistryKey called w/o initiazed\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
return PcNewRegistryKey(OutRegistryKey,
|
||||
OuterUnknown,
|
||||
RegistryKeyType,
|
||||
|
@ -389,12 +363,6 @@ CPortWavePci::GetDeviceProperty(
|
|||
DPRINT("IPortWavePci_fnGetDeviceProperty entered\n");
|
||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||
|
||||
if (!m_bInitialized)
|
||||
{
|
||||
DPRINT("IPortWavePci_fnNewRegistryKey called w/o initiazed\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
return IoGetDeviceProperty(m_pDeviceObject, DeviceRegistryProperty, BufferLength, PropertyBuffer, ReturnLength);
|
||||
}
|
||||
|
||||
|
@ -434,8 +402,6 @@ NTAPI
|
|||
CPortWavePci::Notify(
|
||||
IN PSERVICEGROUP ServiceGroup)
|
||||
{
|
||||
//IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
|
||||
|
||||
//DPRINT("IPortWavePci_fnNotify entered %p, ServiceGroup %p\n", This, ServiceGroup);
|
||||
|
||||
if (ServiceGroup)
|
||||
|
@ -492,8 +458,6 @@ NTSTATUS
|
|||
NTAPI
|
||||
CPortWavePci::ReleaseChildren()
|
||||
{
|
||||
//IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblSubDevice);
|
||||
|
||||
UNIMPLEMENTED
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#include "interfaces.hpp"
|
||||
#include <ks.h>
|
||||
#include <ksmedia.h>
|
||||
#include <stdio.h>
|
||||
|
||||
//#include <intrin.h>
|
||||
|
||||
#define TAG_PORTCLASS 'SLCP'
|
||||
|
|
|
@ -27,6 +27,12 @@ WdmAudControlOpen(
|
|||
return WdmAudControlOpenWave(DeviceObject, Irp, DeviceInfo, ClientInfo);
|
||||
}
|
||||
|
||||
if (DeviceInfo->DeviceType == MIDI_OUT_DEVICE_TYPE || DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE)
|
||||
{
|
||||
return WdmAudControlOpenMidi(DeviceObject, Irp, DeviceInfo, ClientInfo);
|
||||
}
|
||||
|
||||
|
||||
return SetIrpIoStatus(Irp, STATUS_NOT_SUPPORTED, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
|
||||
|
@ -55,6 +61,15 @@ WdmAudControlDeviceType(
|
|||
{
|
||||
Result = WdmAudGetWaveOutDeviceCount();
|
||||
}
|
||||
else if (DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE)
|
||||
{
|
||||
Result = WdmAudGetMidiInDeviceCount();
|
||||
}
|
||||
else if (DeviceInfo->DeviceType == MIDI_OUT_DEVICE_TYPE)
|
||||
{
|
||||
Result = WdmAudGetMidiOutDeviceCount();
|
||||
}
|
||||
|
||||
|
||||
/* store result count */
|
||||
DeviceInfo->DeviceCount = Result;
|
||||
|
@ -121,6 +136,10 @@ WdmAudCapabilities(
|
|||
{
|
||||
Status = WdmAudWaveCapabilities(DeviceObject, DeviceInfo, ClientInfo, DeviceExtension);
|
||||
}
|
||||
else if (DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE || DeviceInfo->DeviceType == MIDI_OUT_DEVICE_TYPE)
|
||||
{
|
||||
Status = WdmAudMidiCapabilities(DeviceObject, DeviceInfo, ClientInfo, DeviceExtension);
|
||||
}
|
||||
|
||||
return SetIrpIoStatus(Irp, Status, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
|
@ -219,9 +238,7 @@ WdmAudGetDeviceInterface(
|
|||
/* get device interface string input length */
|
||||
Size = DeviceInfo->u.Interface.DeviceInterfaceStringSize;
|
||||
|
||||
if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE || DeviceInfo->DeviceType == WAVE_OUT_DEVICE_TYPE)
|
||||
{
|
||||
/* get wave info */
|
||||
/* get mixer info */
|
||||
Status = WdmAudGetPnpNameByIndexAndType(DeviceInfo->DeviceIndex, DeviceInfo->DeviceType, &Device);
|
||||
|
||||
/* check for success */
|
||||
|
@ -253,46 +270,6 @@ WdmAudGetDeviceInterface(
|
|||
|
||||
FreeItem(Device);
|
||||
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
else if (DeviceInfo->DeviceType == MIXER_DEVICE_TYPE)
|
||||
{
|
||||
if (DeviceInfo->DeviceIndex >= WdmAudGetMixerDeviceCount())
|
||||
{
|
||||
/* invalid device id */
|
||||
return SetIrpIoStatus(Irp, STATUS_INVALID_PARAMETER, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
|
||||
Status = WdmAudGetMixerPnpNameByIndex(DeviceInfo->DeviceIndex, &Device);
|
||||
/* check for success */
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
/* invalid device id */
|
||||
return SetIrpIoStatus(Irp, Status, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
|
||||
/* calculate length */
|
||||
Length = (wcslen(Device)+1) * sizeof(WCHAR);
|
||||
|
||||
if (!Size)
|
||||
{
|
||||
/* store device interface size */
|
||||
DeviceInfo->u.Interface.DeviceInterfaceStringSize = Length;
|
||||
}
|
||||
else if (Size < Length)
|
||||
{
|
||||
/* buffer too small */
|
||||
DeviceInfo->u.Interface.DeviceInterfaceStringSize = Length;
|
||||
return SetIrpIoStatus(Irp, STATUS_BUFFER_OVERFLOW, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
else
|
||||
{
|
||||
//FIXME SEH
|
||||
RtlMoveMemory(DeviceInfo->u.Interface.DeviceInterfaceString, Device, Length);
|
||||
}
|
||||
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
|
||||
return SetIrpIoStatus(Irp, STATUS_INVALID_DEVICE_REQUEST, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
|
@ -407,6 +384,93 @@ WdmAudDeviceControl(
|
|||
return SetIrpIoStatus(Irp, STATUS_NOT_IMPLEMENTED, 0);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IoCompletion (
|
||||
PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp,
|
||||
PVOID Ctx)
|
||||
{
|
||||
PKSSTREAM_HEADER Header;
|
||||
ULONG Length = 0;
|
||||
PMDL Mdl, NextMdl;
|
||||
PWDMAUD_COMPLETION_CONTEXT Context = (PWDMAUD_COMPLETION_CONTEXT)Ctx;
|
||||
|
||||
/* get stream header */
|
||||
Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
|
||||
|
||||
/* sanity check */
|
||||
ASSERT(Header);
|
||||
|
||||
/* iterate through all stream headers and collect size */
|
||||
do
|
||||
{
|
||||
if (Context->Function == IOCTL_KS_READ_STREAM)
|
||||
{
|
||||
/* length is stored in DataUsed */
|
||||
Length += Header->DataUsed;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* length stored in frameextend */
|
||||
Length += Header->FrameExtent;
|
||||
}
|
||||
|
||||
/* subtract size */
|
||||
Context->Length -= Header->Size;
|
||||
|
||||
/* move to next stream header */
|
||||
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
|
||||
|
||||
}while(Context->Length);
|
||||
|
||||
/* time to free all allocated mdls */
|
||||
Mdl = Irp->MdlAddress;
|
||||
|
||||
while(Mdl)
|
||||
{
|
||||
/* get next mdl */
|
||||
NextMdl = Mdl->Next;
|
||||
|
||||
/* unlock pages */
|
||||
MmUnlockPages(Mdl);
|
||||
|
||||
/* grab next mdl */
|
||||
Mdl = NextMdl;
|
||||
}
|
||||
|
||||
/* clear mdl list */
|
||||
Irp->MdlAddress = NULL;
|
||||
|
||||
/* check if mdl is locked */
|
||||
if (Context->Mdl->MdlFlags & MDL_PAGES_LOCKED)
|
||||
{
|
||||
/* unlock pages */
|
||||
MmUnlockPages(Context->Mdl);
|
||||
}
|
||||
|
||||
/* now free the mdl */
|
||||
IoFreeMdl(Context->Mdl);
|
||||
|
||||
DPRINT("IoCompletion Irp %p IoStatus %lx Information %lx Length %lu\n", Irp, Irp->IoStatus.Status, Irp->IoStatus.Information, Length);
|
||||
|
||||
if (Irp->IoStatus.Status == STATUS_SUCCESS)
|
||||
{
|
||||
/* store the length */
|
||||
Irp->IoStatus.Information = Length;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* failed */
|
||||
Irp->IoStatus.Information = 0;
|
||||
}
|
||||
|
||||
/* free context */
|
||||
FreeItem(Context);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
|
@ -421,6 +485,20 @@ WdmAudReadWrite(
|
|||
ULONG Length;
|
||||
PMDL Mdl;
|
||||
BOOLEAN Read = TRUE;
|
||||
PWDMAUD_COMPLETION_CONTEXT Context;
|
||||
|
||||
/* allocate completion context */
|
||||
Context = AllocateItem(NonPagedPool, sizeof(WDMAUD_COMPLETION_CONTEXT));
|
||||
|
||||
if (!Context)
|
||||
{
|
||||
/* not enough memory */
|
||||
Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
|
||||
/* done */
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
/* get current irp stack location */
|
||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||
|
@ -437,6 +515,11 @@ WdmAudReadWrite(
|
|||
/* store outputbuffer length */
|
||||
IoStack->Parameters.DeviceIoControl.OutputBufferLength = Length;
|
||||
|
||||
/* setup context */
|
||||
Context->Length = Length;
|
||||
Context->Function = (IoStack->MajorFunction == IRP_MJ_WRITE ? IOCTL_KS_WRITE_STREAM : IOCTL_KS_READ_STREAM);
|
||||
Context->Mdl = Irp->MdlAddress;
|
||||
|
||||
/* store mdl address */
|
||||
Mdl = Irp->MdlAddress;
|
||||
|
||||
|
@ -464,9 +547,6 @@ WdmAudReadWrite(
|
|||
return SetIrpIoStatus(Irp, Status, 0);
|
||||
}
|
||||
|
||||
/* now free the mdl */
|
||||
IoFreeMdl(Mdl);
|
||||
|
||||
/* get device info */
|
||||
DeviceInfo = (PWDMAUD_DEVICE_INFO)Irp->AssociatedIrp.SystemBuffer;
|
||||
ASSERT(DeviceInfo);
|
||||
|
@ -499,6 +579,9 @@ WdmAudReadWrite(
|
|||
IoStack->Parameters.Write.Length = Length;
|
||||
IoStack->MajorFunction = IRP_MJ_WRITE;
|
||||
|
||||
IoSetCompletionRoutine(Irp, IoCompletion, (PVOID)Context, TRUE, TRUE, TRUE);
|
||||
|
||||
|
||||
/* mark irp as pending */
|
||||
// IoMarkIrpPending(Irp);
|
||||
/* call the driver */
|
||||
|
|
|
@ -42,6 +42,8 @@ typedef struct
|
|||
WAVEOUTCAPSW WaveOutCaps;
|
||||
AUXCAPSW AuxCaps;
|
||||
WAVEINCAPSW WaveInCaps;
|
||||
MIDIINCAPSW MidiInCaps;
|
||||
MIDIOUTCAPSW MidiOutCaps;
|
||||
ULONGLONG Position;
|
||||
struct
|
||||
{
|
||||
|
|
|
@ -612,13 +612,16 @@ WdmAudGetWaveOutDeviceCount()
|
|||
return MMixerGetWaveOutCount(&MixerContext);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
WdmAudGetMixerPnpNameByIndex(
|
||||
IN ULONG DeviceIndex,
|
||||
OUT LPWSTR * Device)
|
||||
ULONG
|
||||
WdmAudGetMidiInDeviceCount()
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
return MMixerGetMidiInCount(&MixerContext);
|
||||
}
|
||||
|
||||
ULONG
|
||||
WdmAudGetMidiOutDeviceCount()
|
||||
{
|
||||
return MMixerGetWaveOutCount(&MixerContext);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
|
@ -627,9 +630,25 @@ WdmAudGetPnpNameByIndexAndType(
|
|||
IN SOUND_DEVICE_TYPE DeviceType,
|
||||
OUT LPWSTR *DevicePath)
|
||||
{
|
||||
if (DeviceType == WAVE_IN_DEVICE_TYPE || DeviceType == WAVE_OUT_DEVICE_TYPE)
|
||||
{
|
||||
if (MMixerGetWaveDevicePath(&MixerContext, DeviceType == WAVE_IN_DEVICE_TYPE, DeviceIndex, DevicePath) == MM_STATUS_SUCCESS)
|
||||
return STATUS_SUCCESS;
|
||||
else
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
else if (DeviceType == MIDI_IN_DEVICE_TYPE || DeviceType == MIDI_OUT_DEVICE_TYPE)
|
||||
{
|
||||
if (MMixerGetMidiDevicePath(&MixerContext, DeviceType == MIDI_IN_DEVICE_TYPE, DeviceIndex, DevicePath) == MM_STATUS_SUCCESS)
|
||||
return STATUS_SUCCESS;
|
||||
else
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
else if (DeviceType == MIXER_DEVICE_TYPE)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
|
@ -640,7 +659,7 @@ WdmAudWaveCapabilities(
|
|||
IN PWDMAUD_CLIENT ClientInfo,
|
||||
IN PWDMAUD_DEVICE_EXTENSION DeviceExtension)
|
||||
{
|
||||
MIXER_STATUS Status;
|
||||
MIXER_STATUS Status = MM_STATUS_UNSUCCESSFUL;
|
||||
|
||||
if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE)
|
||||
{
|
||||
|
@ -652,10 +671,31 @@ WdmAudWaveCapabilities(
|
|||
/* get capabilities */
|
||||
Status = MMixerWaveOutCapabilities(&MixerContext, DeviceInfo->DeviceIndex, &DeviceInfo->u.WaveOutCaps);
|
||||
}
|
||||
|
||||
if (Status == MM_STATUS_SUCCESS)
|
||||
return STATUS_SUCCESS;
|
||||
else
|
||||
return Status;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
WdmAudMidiCapabilities(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PWDMAUD_DEVICE_INFO DeviceInfo,
|
||||
IN PWDMAUD_CLIENT ClientInfo,
|
||||
IN PWDMAUD_DEVICE_EXTENSION DeviceExtension)
|
||||
{
|
||||
MIXER_STATUS Status = MM_STATUS_UNSUCCESSFUL;
|
||||
|
||||
if (DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE)
|
||||
{
|
||||
ASSERT(0);
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
/* get capabilities */
|
||||
Status = MMixerMidiInCapabilities(&MixerContext, DeviceInfo->DeviceIndex, &DeviceInfo->u.MidiInCaps);
|
||||
}
|
||||
else if (DeviceInfo->DeviceType == WAVE_OUT_DEVICE_TYPE)
|
||||
{
|
||||
/* get capabilities */
|
||||
Status = MMixerMidiOutCapabilities(&MixerContext, DeviceInfo->DeviceIndex, &DeviceInfo->u.MidiOutCaps);
|
||||
}
|
||||
|
||||
if (Status == MM_STATUS_SUCCESS)
|
||||
|
@ -737,3 +777,26 @@ WdmAudControlOpenWave(
|
|||
else
|
||||
return SetIrpIoStatus(Irp, STATUS_NOT_SUPPORTED, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
WdmAudControlOpenMidi(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp,
|
||||
IN PWDMAUD_DEVICE_INFO DeviceInfo,
|
||||
IN PWDMAUD_CLIENT ClientInfo)
|
||||
{
|
||||
MIXER_STATUS Status;
|
||||
PIN_CREATE_CONTEXT Context;
|
||||
|
||||
Context.ClientInfo = ClientInfo;
|
||||
Context.DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||
Context.DeviceType = DeviceInfo->DeviceType;
|
||||
|
||||
Status = MMixerOpenMidi(&MixerContext, DeviceInfo->DeviceIndex, DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE, CreatePinCallback, &Context, &DeviceInfo->hDevice);
|
||||
|
||||
if (Status == MM_STATUS_SUCCESS)
|
||||
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
|
||||
else
|
||||
return SetIrpIoStatus(Irp, STATUS_NOT_SUPPORTED, sizeof(WDMAUD_DEVICE_INFO));
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue