mirror of
https://github.com/reactos/reactos.git
synced 2025-06-27 18:59:42 +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)
|
/* TRANSLATOR : Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
|
||||||
* DATE OF TR.: 30-01-2008
|
* DATE OF TR.: 30-01-2008
|
||||||
* LAST CHANGE: 31-05-2010
|
* LAST CHANGE: 17-09-2010
|
||||||
* ---------------------------------------
|
* ---------------------------------------
|
||||||
* TODO:
|
* TODO:
|
||||||
* pridanie navigaèných znaèiek "&" ?
|
* pridanie navigaèných znaèiek "&" ?
|
||||||
|
@ -545,9 +545,9 @@ END
|
||||||
STRINGTABLE DISCARDABLE
|
STRINGTABLE DISCARDABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_ENERGY_15_C_CALORIES "15 °C calories"
|
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_ERGS "Ergs"
|
||||||
IDS_ENERGY_EVS "Electron-Volts"
|
IDS_ENERGY_EVS "Elektron-Volty"
|
||||||
IDS_ENERGY_FOOT_POUNDS "Foot-Pounds"
|
IDS_ENERGY_FOOT_POUNDS "Foot-Pounds"
|
||||||
IDS_ENERGY_IT_CALORIES "International Table calories"
|
IDS_ENERGY_IT_CALORIES "International Table calories"
|
||||||
IDS_ENERGY_IT_KILOCALORIES "International Table kilocalories"
|
IDS_ENERGY_IT_KILOCALORIES "International Table kilocalories"
|
||||||
|
@ -593,7 +593,7 @@ BEGIN
|
||||||
IDS_LENGTH_MILLIMETERS "Milimetre"
|
IDS_LENGTH_MILLIMETERS "Milimetre"
|
||||||
IDS_LENGTH_NAUTICAL_MILES "Námorné míle"
|
IDS_LENGTH_NAUTICAL_MILES "Námorné míle"
|
||||||
IDS_LENGTH_NIEU "Nieu"
|
IDS_LENGTH_NIEU "Nieu"
|
||||||
IDS_LENGTH_PARSECS "Parsecy"
|
IDS_LENGTH_PARSECS "Parseky"
|
||||||
IDS_LENGTH_PICAS "Picas"
|
IDS_LENGTH_PICAS "Picas"
|
||||||
IDS_LENGTH_RI_JAPAN "Ri (Japonsko)"
|
IDS_LENGTH_RI_JAPAN "Ri (Japonsko)"
|
||||||
IDS_LENGTH_RI_KOREA "Ri (Kórea)"
|
IDS_LENGTH_RI_KOREA "Ri (Kórea)"
|
||||||
|
@ -626,10 +626,10 @@ STRINGTABLE DISCARDABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_PRESSURE_ATMOSPHERES "Atmosféry"
|
IDS_PRESSURE_ATMOSPHERES "Atmosféry"
|
||||||
IDS_PRESSURE_BARS "Bary"
|
IDS_PRESSURE_BARS "Bary"
|
||||||
IDS_PRESSURE_HECTOPASCALS "Hektopascals"
|
IDS_PRESSURE_HECTOPASCALS "Hektopascaly"
|
||||||
IDS_PRESSURE_KILOPASCALS "Kilopascals"
|
IDS_PRESSURE_KILOPASCALS "Kilopascaly"
|
||||||
IDS_PRESSURE_MM_OF_MERCURY "Millimeters of mercury"
|
IDS_PRESSURE_MM_OF_MERCURY "Milimetre ortuti"
|
||||||
IDS_PRESSURE_PASCALS "Pascals"
|
IDS_PRESSURE_PASCALS "Pascaly"
|
||||||
IDS_PRESSURE_PSI "Libry na štvorcový palec"
|
IDS_PRESSURE_PSI "Libry na štvorcový palec"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,17 @@
|
||||||
HINSTANCE hInstance;
|
HINSTANCE hInstance;
|
||||||
HANDLE ProcessHeap;
|
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)
|
LPTSTR GetNodeTypeName(UINT NodeType)
|
||||||
{
|
{
|
||||||
|
@ -33,27 +44,27 @@ LPTSTR GetNodeTypeName(UINT NodeType)
|
||||||
switch (NodeType)
|
switch (NodeType)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
if (!LoadString(hInstance, IDS_BCAST, szNode, sizeof(szNode)))
|
if (!LoadStringAndOem(hInstance, IDS_BCAST, szNode, sizeof(szNode)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
if (!LoadString(hInstance, IDS_P2P, szNode, sizeof(szNode)))
|
if (!LoadStringAndOem(hInstance, IDS_P2P, szNode, sizeof(szNode)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
if (!LoadString(hInstance, IDS_MIXED, szNode, sizeof(szNode)))
|
if (!LoadStringAndOem(hInstance, IDS_MIXED, szNode, sizeof(szNode)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
if (!LoadString(hInstance, IDS_HYBRID, szNode, sizeof(szNode)))
|
if (!LoadStringAndOem(hInstance, IDS_HYBRID, szNode, sizeof(szNode)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default :
|
default :
|
||||||
if (!LoadString(hInstance, IDS_UNKNOWN, szNode, sizeof(szNode)))
|
if (!LoadStringAndOem(hInstance, IDS_UNKNOWN, szNode, sizeof(szNode)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -69,42 +80,42 @@ LPTSTR GetInterfaceTypeName(UINT InterfaceType)
|
||||||
switch (InterfaceType)
|
switch (InterfaceType)
|
||||||
{
|
{
|
||||||
case MIB_IF_TYPE_OTHER:
|
case MIB_IF_TYPE_OTHER:
|
||||||
if (!LoadString(hInstance, IDS_OTHER, szIntType, sizeof(szIntType)))
|
if (!LoadStringAndOem(hInstance, IDS_OTHER, szIntType, sizeof(szIntType)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MIB_IF_TYPE_ETHERNET:
|
case MIB_IF_TYPE_ETHERNET:
|
||||||
if (!LoadString(hInstance, IDS_ETH, szIntType, sizeof(szIntType)))
|
if (!LoadStringAndOem(hInstance, IDS_ETH, szIntType, sizeof(szIntType)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MIB_IF_TYPE_TOKENRING:
|
case MIB_IF_TYPE_TOKENRING:
|
||||||
if (!LoadString(hInstance, IDS_TOKEN, szIntType, sizeof(szIntType)))
|
if (!LoadStringAndOem(hInstance, IDS_TOKEN, szIntType, sizeof(szIntType)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MIB_IF_TYPE_FDDI:
|
case MIB_IF_TYPE_FDDI:
|
||||||
if (!LoadString(hInstance, IDS_FDDI, szIntType, sizeof(szIntType)))
|
if (!LoadStringAndOem(hInstance, IDS_FDDI, szIntType, sizeof(szIntType)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MIB_IF_TYPE_PPP:
|
case MIB_IF_TYPE_PPP:
|
||||||
if (!LoadString(hInstance, IDS_PPP, szIntType, sizeof(szIntType)))
|
if (!LoadStringAndOem(hInstance, IDS_PPP, szIntType, sizeof(szIntType)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MIB_IF_TYPE_LOOPBACK:
|
case MIB_IF_TYPE_LOOPBACK:
|
||||||
if (!LoadString(hInstance, IDS_LOOP, szIntType, sizeof(szIntType)))
|
if (!LoadStringAndOem(hInstance, IDS_LOOP, szIntType, sizeof(szIntType)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MIB_IF_TYPE_SLIP:
|
case MIB_IF_TYPE_SLIP:
|
||||||
if (!LoadString(hInstance, IDS_SLIP, szIntType, sizeof(szIntType)))
|
if (!LoadStringAndOem(hInstance, IDS_SLIP, szIntType, sizeof(szIntType)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (!LoadString(hInstance, IDS_UNKNOWN, szIntType, sizeof(szIntType)))
|
if (!LoadStringAndOem(hInstance, IDS_UNKNOWN, szIntType, sizeof(szIntType)))
|
||||||
return NULL;
|
return NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -153,6 +164,7 @@ LPTSTR GetConnectionType(LPTSTR lpClass)
|
||||||
{
|
{
|
||||||
HKEY hKey = NULL;
|
HKEY hKey = NULL;
|
||||||
LPTSTR ConType = NULL;
|
LPTSTR ConType = NULL;
|
||||||
|
LPTSTR ConTypeTmp = NULL;
|
||||||
TCHAR Path[256];
|
TCHAR Path[256];
|
||||||
LPTSTR PrePath = _T("SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\");
|
LPTSTR PrePath = _T("SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\");
|
||||||
LPTSTR PostPath = _T("\\Connection");
|
LPTSTR PostPath = _T("\\Connection");
|
||||||
|
@ -180,24 +192,34 @@ LPTSTR GetConnectionType(LPTSTR lpClass)
|
||||||
NULL,
|
NULL,
|
||||||
&dwDataSize) == ERROR_SUCCESS)
|
&dwDataSize) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
|
ConTypeTmp = (LPTSTR)HeapAlloc(ProcessHeap,
|
||||||
|
0,
|
||||||
|
dwDataSize);
|
||||||
|
|
||||||
ConType = (LPTSTR)HeapAlloc(ProcessHeap,
|
ConType = (LPTSTR)HeapAlloc(ProcessHeap,
|
||||||
0,
|
0,
|
||||||
dwDataSize);
|
dwDataSize);
|
||||||
if (ConType)
|
if (ConType && ConTypeTmp)
|
||||||
{
|
{
|
||||||
if(RegQueryValueEx(hKey,
|
if(RegQueryValueEx(hKey,
|
||||||
_T("Name"),
|
_T("Name"),
|
||||||
NULL,
|
NULL,
|
||||||
&dwType,
|
&dwType,
|
||||||
(PBYTE)ConType,
|
(PBYTE)ConTypeTmp,
|
||||||
&dwDataSize) != ERROR_SUCCESS)
|
&dwDataSize) != ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
HeapFree(ProcessHeap,
|
HeapFree(ProcessHeap,
|
||||||
0,
|
0,
|
||||||
ConType);
|
ConType);
|
||||||
|
|
||||||
|
HeapFree(ProcessHeap,
|
||||||
|
0,
|
||||||
|
ConTypeTmp);
|
||||||
|
|
||||||
ConType = NULL;
|
ConType = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ConType) CharToOem(ConTypeTmp, ConType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -674,7 +696,7 @@ VOID Usage(VOID)
|
||||||
if (lpUsage == NULL)
|
if (lpUsage == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (LoadString(hInstance,
|
if (LoadStringAndOem(hInstance,
|
||||||
IDS_USAGE,
|
IDS_USAGE,
|
||||||
lpUsage,
|
lpUsage,
|
||||||
Size))
|
Size))
|
||||||
|
|
|
@ -422,7 +422,7 @@ AllocateBuffers(PAPPINFO pInfo)
|
||||||
|
|
||||||
pInfo->RecvPacket = (PIPv4_HEADER)HeapAlloc(GetProcessHeap(),
|
pInfo->RecvPacket = (PIPv4_HEADER)HeapAlloc(GetProcessHeap(),
|
||||||
0,
|
0,
|
||||||
sizeof(IPv4_HEADER) + PACKET_SIZE);
|
MAX_PING_PACKET_SIZE);
|
||||||
if (!pInfo->RecvPacket)
|
if (!pInfo->RecvPacket)
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(),
|
HeapFree(GetProcessHeap(),
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
|
||||||
|
set_unicode()
|
||||||
|
|
||||||
list(APPEND SOURCE
|
list(APPEND SOURCE
|
||||||
aboutdlg.c
|
aboutdlg.c
|
||||||
available.c
|
available.c
|
||||||
|
|
|
@ -17,5 +17,8 @@ Description = Tool zum Erstellen und Öffnen von 7zip, zip, tar, rar und andrern
|
||||||
[Section.040a]
|
[Section.040a]
|
||||||
Description = Utilidad para crear y abrir 7zip, zip, tar, rar y otros archivos comprimidos.
|
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]
|
[Section.0422]
|
||||||
Description = Утиліта для створення та відкриття 7zip, zip, tar, rar та інших архівних файлів.
|
Description = Утиліта для створення та відкриття 7zip, zip, tar, rar та інших архівних файлів.
|
||||||
|
|
|
@ -14,5 +14,10 @@ CDPath = none
|
||||||
[Section.0407]
|
[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.
|
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]
|
[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.
|
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]
|
[Section.0415]
|
||||||
Licence = Nieznana
|
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]
|
[Section.0422]
|
||||||
Licence = Невідома
|
Licence = Невідома
|
||||||
|
|
|
@ -17,5 +17,8 @@ Description = DosBlaster ist eine Shell Extension, die es ermöglicht jede DOS A
|
||||||
[Section.040a]
|
[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.
|
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]
|
[Section.0422]
|
||||||
Description = DosBlaster це розширення оболонки, яке дозволяє запустити будь-який виконавчий файл DOS в DOSBox через правий клік. Ця версія містить DOSBox 0.70, але може бути оновлена встановленням новішої версії DOSBox в теки DosBlaster.
|
Description = DosBlaster це розширення оболонки, яке дозволяє запустити будь-який виконавчий файл DOS в DOSBox через правий клік. Ця версія містить DOSBox 0.70, але може бути оновлена встановленням новішої версії DOSBox в теки DosBlaster.
|
||||||
|
|
|
@ -14,5 +14,8 @@ CDPath = none
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
Description = Kleiner und einfacher Mediaplayer.
|
Description = Kleiner und einfacher Mediaplayer.
|
||||||
|
|
||||||
|
[Section.0415]
|
||||||
|
Description = Prosty i lekki odtwarzacz audio.
|
||||||
|
|
||||||
[Section.0422]
|
[Section.0422]
|
||||||
Description = Простий та маленький програвач аудіо файлів.
|
Description = Простий та маленький програвач аудіо файлів.
|
||||||
|
|
|
@ -2,47 +2,47 @@
|
||||||
|
|
||||||
[Section]
|
[Section]
|
||||||
Name = Mozilla Firefox 3.6
|
Name = Mozilla Firefox 3.6
|
||||||
Version = 3.6.11
|
Version = 3.6.12
|
||||||
Licence = MPL/GPL/LGPL
|
Licence = MPL/GPL/LGPL
|
||||||
Description = The most popular and one of the best free Web Browsers out there.
|
Description = The most popular and one of the best free Web Browsers out there.
|
||||||
Size = 8.1M
|
Size = 8.1M
|
||||||
Category = 5
|
Category = 5
|
||||||
URLSite = http://www.mozilla.com/en-US/
|
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
|
CDPath = none
|
||||||
|
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
Description = Der populärste und einer der besten freien Webbrowser.
|
Description = Der populärste und einer der besten freien Webbrowser.
|
||||||
Size = 8.0M
|
Size = 8.0M
|
||||||
URLSite = http://www.mozilla-europe.org/de/
|
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]
|
[Section.040a]
|
||||||
Description = El más popular y uno de los mejores navegadores web gratuitos que hay.
|
Description = El más popular y uno de los mejores navegadores web gratuitos que hay.
|
||||||
Size = 8.0M
|
Size = 8.0M
|
||||||
URLSite = http://www.mozilla-europe.org/es/
|
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]
|
[Section.0414]
|
||||||
Description = Mest populære og best også gratis nettleserene der ute.
|
Description = Mest populære og best også gratis nettleserene der ute.
|
||||||
Size = 8.0M
|
Size = 8.0M
|
||||||
URLSite = http://www.mozilla-europe.org/no/
|
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]
|
[Section.0415]
|
||||||
Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych.
|
Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych.
|
||||||
Size = 8.8M
|
Size = 8.8M
|
||||||
URLSite = http://www.mozilla-europe.org/pl/
|
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]
|
[Section.0419]
|
||||||
Description = Один из самых популярных и лучших бесплатных браузеров.
|
Description = Один из самых популярных и лучших бесплатных браузеров.
|
||||||
Size = 8.4M
|
Size = 8.4M
|
||||||
URLSite = http://www.mozilla-europe.org/ru/
|
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]
|
[Section.0422]
|
||||||
Description = Найпопулярніший та один з кращих безплатних веб-браузерів.
|
Description = Найпопулярніший та один з кращих безплатних веб-браузерів.
|
||||||
Size = 8.4M
|
Size = 8.4M
|
||||||
URLSite = http://www.mozilla-europe.org/uk/
|
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.
|
Description = La suite de ofimática de código abierto.
|
||||||
|
|
||||||
[Section.0415]
|
[Section.0415]
|
||||||
Description = Otwarty pakiet biurowy.
|
Description = Otwarty pakiet biurowy, bazujący na Open Office, ale znacznie lepszy.
|
||||||
|
|
||||||
[Section.0422]
|
[Section.0422]
|
||||||
Description = Відкритий офісний пакет.
|
Description = Відкритий офісний пакет.
|
||||||
|
|
|
@ -14,5 +14,8 @@ CDPath = none
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
Description = KDE für Windows.
|
Description = KDE für Windows.
|
||||||
|
|
||||||
|
[Section.0415]
|
||||||
|
Description = KDE dla Windows.
|
||||||
|
|
||||||
[Section.0422]
|
[Section.0422]
|
||||||
Description = KDE для Windows.
|
Description = KDE для Windows.
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
[Section]
|
[Section]
|
||||||
Name = Miranda IM
|
Name = Miranda IM
|
||||||
Version = 0.9.8
|
Version = 0.9.10
|
||||||
Licence = GPL
|
Licence = GPL
|
||||||
Description = Open source multiprotocol instant messaging application - May not work completely.
|
Description = Open source multiprotocol instant messaging application - May not work completely.
|
||||||
Size = 3.0MB
|
Size = 3.0MB
|
||||||
Category = 5
|
Category = 5
|
||||||
URLSite = http://www.miranda-im.org/
|
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
|
CDPath = none
|
||||||
|
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
[Section]
|
[Section]
|
||||||
Name = mIRC
|
Name = mIRC
|
||||||
Version = 7.14
|
Version = 7.15
|
||||||
Licence = Shareware
|
Licence = Shareware
|
||||||
Description = The most popular client for the Internet Relay Chat (IRC).
|
Description = The most popular client for the Internet Relay Chat (IRC).
|
||||||
Size = 2.0M
|
Size = 2.0M
|
||||||
Category = 5
|
Category = 5
|
||||||
URLSite = http://www.mirc.com/
|
URLSite = http://www.mirc.com/
|
||||||
URLDownload = http://download.mirc.com/mirc714.exe
|
URLDownload = http://download.mirc.com/mirc715.exe
|
||||||
CDPath = none
|
CDPath = none
|
||||||
|
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
|
|
|
@ -2,14 +2,17 @@
|
||||||
|
|
||||||
[Section]
|
[Section]
|
||||||
Name = Mono .net Development Framework
|
Name = Mono .net Development Framework
|
||||||
Version = 2.6.7
|
Version = 2.8
|
||||||
Licence = Unknown
|
Licence = Unknown
|
||||||
Description = Open Source .net Framework.
|
Description = Open Source .net Framework.
|
||||||
Size = 72MB
|
Size = 78MB
|
||||||
Category = 14
|
Category = 14
|
||||||
URLSite = http://www.mono-project.com/Main_Page
|
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
|
CDPath = none
|
||||||
|
|
||||||
|
[Section.0415]
|
||||||
|
Description = Pakiet Mono .net Framework dla Programistów.
|
||||||
|
|
||||||
[Section.0422]
|
[Section.0422]
|
||||||
Description = Відкритий .net Фреймворк.
|
Description = Відкритий .net Фреймворк.
|
||||||
|
|
|
@ -20,5 +20,8 @@ Description = Reproductor multimedia.
|
||||||
[Section.0419]
|
[Section.0419]
|
||||||
Description = Мультимедийный проигрыватель.
|
Description = Мультимедийный проигрыватель.
|
||||||
|
|
||||||
|
[Section.0415]
|
||||||
|
Description = Odtwarzacz multimediów.
|
||||||
|
|
||||||
[Section.0422]
|
[Section.0422]
|
||||||
Description = Мультимедійний програвач.
|
Description = Мультимедійний програвач.
|
||||||
|
|
|
@ -10,3 +10,6 @@ Category = 14
|
||||||
URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3
|
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
|
URLDownload = http://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe
|
||||||
CDPath = none
|
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
|
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
|
URLDownload = http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe
|
||||||
CDPath = none
|
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
|
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
|
URLDownload = http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe
|
||||||
CDPath = none
|
CDPath = none
|
||||||
|
|
||||||
|
[Section.0415]
|
||||||
|
Description = Microsoft .NET Framework Wersja 2.0 Service Pack 2.
|
|
@ -14,5 +14,9 @@ CDPath = none
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
Description = Eine sehr mächtige, dynamische Programmiersprache.
|
Description = Eine sehr mächtige, dynamische Programmiersprache.
|
||||||
|
|
||||||
|
|
||||||
|
[Section.0415]
|
||||||
|
Description = Potęży i dynamiczny język programowania.
|
||||||
|
|
||||||
[Section.0422]
|
[Section.0422]
|
||||||
Description = Дуже потужна динамічна мова програмування.
|
Description = Дуже потужна динамічна мова програмування.
|
||||||
|
|
|
@ -14,5 +14,8 @@ CDPath = none
|
||||||
[Section.0407]
|
[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).
|
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]
|
[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).
|
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]
|
[Section]
|
||||||
Name = SciTE
|
Name = SciTE
|
||||||
Version = 2.21
|
Version = 2.22
|
||||||
Licence = Freeware
|
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.
|
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
|
Size = 0.6M
|
||||||
Category = 7
|
Category = 7
|
||||||
URLSite = http://www.scintilla.org/
|
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
|
CDPath = none
|
||||||
|
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
|
@ -17,5 +17,8 @@ Description = SciTE ist ein SCIntilla basierter Text Editor. Ursprünglich wurde
|
||||||
[Section.040a]
|
[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.
|
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]
|
[Section.0422]
|
||||||
Description = Текстовий редактор на основі SCIntilla. Був зібраний як презентація Scintilla, але виріс до редактора загального користування з засобами збирання та запуску програм.
|
Description = Текстовий редактор на основі SCIntilla. Був зібраний як презентація Scintilla, але виріс до редактора загального користування з засобами збирання та запуску програм.
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
|
|
||||||
[Section]
|
[Section]
|
||||||
Name = Mozilla SeaMonkey
|
Name = Mozilla SeaMonkey
|
||||||
Version = 2.0.9
|
Version = 2.0.10
|
||||||
Licence = MPL/GPL/LGPL
|
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.
|
Description = Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need.
|
||||||
Size = 10.1MB
|
Size = 10.1MB
|
||||||
Category = 5
|
Category = 5
|
||||||
URLSite = http://www.seamonkey-project.org/
|
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
|
CDPath = none
|
||||||
|
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen.
|
Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen.
|
||||||
Size = 10.0MB
|
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]
|
[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.
|
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
|
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]
|
[Section.0415]
|
||||||
Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz.
|
Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz.
|
||||||
Size = 10.8MB
|
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]
|
[Section.0419]
|
||||||
Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор.
|
Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор.
|
||||||
Size = 10.4MB
|
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]
|
[Section.0407]
|
||||||
Description = Die STEAM Spieleplattform, die von viele Spielen verwendet wird.
|
Description = Die STEAM Spieleplattform, die von viele Spielen verwendet wird.
|
||||||
|
|
||||||
|
[Section.0415]
|
||||||
|
Description = STEAM - platforma, którą używa obecnie wiele gier.
|
||||||
|
|
||||||
[Section.0422]
|
[Section.0422]
|
||||||
Description = Ігрова платформа, що використовується багатьма іграми.
|
Description = Ігрова платформа, що використовується багатьма іграми.
|
||||||
|
|
|
@ -13,3 +13,6 @@ CDPath = none
|
||||||
|
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
Description = Eine schnelle und effektive Suchanwendung.
|
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
|
Licence = Unbekannt
|
||||||
Description = Tahoma Font pack, der von einigen Anwendungen benötigt wird (Steam).
|
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]
|
[Section.0422]
|
||||||
Licence = Невідома
|
Licence = Невідома
|
||||||
Description = Пакет шрифтів Tahoma, що необхідні деяким програмам (Steam).
|
Description = Пакет шрифтів Tahoma, що необхідні деяким програмам (Steam).
|
||||||
|
|
|
@ -2,41 +2,41 @@
|
||||||
|
|
||||||
[Section]
|
[Section]
|
||||||
Name = Mozilla Thunderbird
|
Name = Mozilla Thunderbird
|
||||||
Version = 3.1.5
|
Version = 3.1.6
|
||||||
Licence = MPL/GPL/LGPL
|
Licence = MPL/GPL/LGPL
|
||||||
Description = The most popular and one of the best free Mail Clients out there.
|
Description = The most popular and one of the best free Mail Clients out there.
|
||||||
Size = 9.0M
|
Size = 9.0M
|
||||||
Category = 5
|
Category = 5
|
||||||
URLSite = http://www.mozilla-europe.org/en/products/thunderbird/
|
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
|
CDPath = none
|
||||||
|
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
Description = Der populärste und einer der besten freien Mail-Clients.
|
Description = Der populärste und einer der besten freien Mail-Clients.
|
||||||
Size = 8.8M
|
Size = 8.8M
|
||||||
URLSite = http://www.mozilla-europe.org/de/products/thunderbird/
|
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]
|
[Section.040a]
|
||||||
Description = El más popular y uno de los mejores clientes mail que hay.
|
Description = El más popular y uno de los mejores clientes mail que hay.
|
||||||
Size = 8.8M
|
Size = 8.8M
|
||||||
URLSite = http://www.mozilla-europe.org/es/products/thunderbird/
|
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]
|
[Section.0415]
|
||||||
Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty.
|
Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty.
|
||||||
Size = 9.7M
|
Size = 9.7M
|
||||||
URLSite = http://www.mozilla-europe.org/pl/products/thunderbird/
|
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]
|
[Section.0419]
|
||||||
Description = Один из самых популярных и лучших бесплатных почтовых клиентов.
|
Description = Один из самых популярных и лучших бесплатных почтовых клиентов.
|
||||||
Size = 9.2M
|
Size = 9.2M
|
||||||
URLSite = http://www.mozilla-europe.org/ru/products/thunderbird/
|
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]
|
[Section.0422]
|
||||||
Description = Найпопулярніший та один з кращих поштових клієнтів.
|
Description = Найпопулярніший та один з кращих поштових клієнтів.
|
||||||
Size = 9.2M
|
Size = 9.2M
|
||||||
URLSite = http://www.mozillamessaging.com/uk/thunderbird/
|
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]
|
[Section]
|
||||||
Name = UltraVNC
|
Name = UltraVNC
|
||||||
Version = 1.0.8.2
|
Version = 1.0.9.1
|
||||||
Licence = GPL
|
Licence = GPL
|
||||||
Description = Open-source VNC client/server.
|
Description = Open-source VNC client/server.
|
||||||
Size = 1.9MB
|
Size = 2.0MB
|
||||||
Category = 5
|
Category = 5
|
||||||
URLSite = http://www.uvnc.com/
|
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
|
CDPath = none
|
||||||
|
|
||||||
[Section.040a]
|
[Section.040a]
|
||||||
Description = Cliente/Servidor VNC de código abierto.
|
Description = Cliente/Servidor VNC de código abierto.
|
||||||
|
|
||||||
|
[Section.0415]
|
||||||
|
Description = Otwarty klient/serwer VNC.
|
||||||
|
|
||||||
[Section.0422]
|
[Section.0422]
|
||||||
Description = Відкритий VNC клієнт/сервер.
|
Description = Відкритий VNC клієнт/сервер.
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
[Section]
|
[Section]
|
||||||
Name = µTorrent
|
Name = µTorrent
|
||||||
Version = 2.0.4
|
Version = 2.2
|
||||||
Licence = Freeware for non-commercial uses
|
Licence = Freeware for non-commercial uses
|
||||||
Description = Small and fast BitTorrent Client.
|
Description = Small and fast BitTorrent Client.
|
||||||
Size = 320K
|
Size = 385K
|
||||||
Category = 5
|
Category = 5
|
||||||
URLSite = http://www.utorrent.com/
|
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
|
CDPath = none
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
[Section]
|
[Section]
|
||||||
Name = VLC media player
|
Name = VLC media player
|
||||||
Version = 1.1.4
|
Version = 1.1.5
|
||||||
Licence = GPL
|
Licence = GPL
|
||||||
Description = A media player.
|
Description = A media player.
|
||||||
Size = 18.7MB
|
Size = 19.1MB
|
||||||
Category = 1
|
Category = 1
|
||||||
URLSite = http://www.videolan.org/vlc/
|
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
|
CDPath = none
|
||||||
|
|
||||||
[Section.0407]
|
[Section.0407]
|
||||||
|
@ -20,5 +20,8 @@ Description = Reproductor multimedia.
|
||||||
[Section.0419]
|
[Section.0419]
|
||||||
Description = Мультимедийный проигрыватель.
|
Description = Мультимедийный проигрыватель.
|
||||||
|
|
||||||
|
[Section.0415]
|
||||||
|
Description = Odtwarzacz multimediów.
|
||||||
|
|
||||||
[Section.0422]
|
[Section.0422]
|
||||||
Description = Мультимедійний програвач.
|
Description = Мультимедійний програвач.
|
||||||
|
|
|
@ -8,6 +8,7 @@ list(APPEND SOURCE
|
||||||
about.c
|
about.c
|
||||||
childwnd.c
|
childwnd.c
|
||||||
edit.c
|
edit.c
|
||||||
|
error.c
|
||||||
find.c
|
find.c
|
||||||
framewnd.c
|
framewnd.c
|
||||||
hexedit.c
|
hexedit.c
|
||||||
|
|
|
@ -67,19 +67,21 @@ static void draw_splitbar(HWND hWnd, int x)
|
||||||
|
|
||||||
static void ResizeWnd(ChildWnd* pChildWnd, int cx, int cy)
|
static void ResizeWnd(ChildWnd* pChildWnd, int cx, int cy)
|
||||||
{
|
{
|
||||||
HDWP hdwp = BeginDeferWindowPos(2);
|
HDWP hdwp = BeginDeferWindowPos(3);
|
||||||
RECT rt, rs;
|
RECT rt, rs, rb;
|
||||||
|
const int tHeight = 18;
|
||||||
SetRect(&rt, 0, 0, cx, cy);
|
SetRect(&rt, 0, 0, cx, cy);
|
||||||
cy = 0;
|
cy = 0;
|
||||||
if (hStatusBar != NULL) {
|
if (hStatusBar != NULL) {
|
||||||
GetWindowRect(hStatusBar, &rs);
|
GetWindowRect(hStatusBar, &rs);
|
||||||
cy = rs.bottom - rs.top + 8;
|
cy = rs.bottom - rs.top;
|
||||||
}
|
}
|
||||||
|
GetWindowRect(pChildWnd->hAddressBtnWnd, &rb);
|
||||||
cx = pChildWnd->nSplitPos + SPLIT_WIDTH/2;
|
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->hAddressBarWnd, 0, rt.left, rt.top, rt.right-rt.left - tHeight-2, tHeight, 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->hAddressBtnWnd, 0, rt.right - tHeight, rt.top, tHeight, tHeight, 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->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);
|
EndDeferWindowPos(hdwp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,29 +326,35 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
/* load "My Computer" string */
|
/* load "My Computer" string */
|
||||||
LoadString(hInst, IDS_MY_COMPUTER, buffer, sizeof(buffer)/sizeof(TCHAR));
|
LoadString(hInst, IDS_MY_COMPUTER, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||||
|
|
||||||
g_pChildWnd = pChildWnd = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ChildWnd));
|
g_pChildWnd = pChildWnd = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ChildWnd));
|
||||||
|
|
||||||
if (!pChildWnd) return 0;
|
if (!pChildWnd) return 0;
|
||||||
_tcsncpy(pChildWnd->szPath, buffer, MAX_PATH);
|
_tcsncpy(pChildWnd->szPath, buffer, MAX_PATH);
|
||||||
pChildWnd->nSplitPos = 250;
|
pChildWnd->nSplitPos = 250;
|
||||||
pChildWnd->hWnd = hWnd;
|
pChildWnd->hWnd = hWnd;
|
||||||
pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP,
|
pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP,
|
||||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||||
hWnd, (HMENU)0, hInst, 0);
|
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->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW);
|
||||||
pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, pChildWnd->szPath*/);
|
pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, pChildWnd->szPath*/);
|
||||||
SetFocus(pChildWnd->hTreeWnd);
|
SetFocus(pChildWnd->hTreeWnd);
|
||||||
|
|
||||||
/* set the address bar font */
|
/* set the address bar and button font */
|
||||||
if (pChildWnd->hAddressBarWnd)
|
if ((pChildWnd->hAddressBarWnd) && (pChildWnd->hAddressBtnWnd))
|
||||||
{
|
{
|
||||||
hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
|
hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
|
||||||
SendMessage(pChildWnd->hAddressBarWnd,
|
SendMessage(pChildWnd->hAddressBarWnd,
|
||||||
WM_SETFONT,
|
WM_SETFONT,
|
||||||
(WPARAM)hFont,
|
(WPARAM)hFont,
|
||||||
0);
|
0);
|
||||||
|
SendMessage(pChildWnd->hAddressBtnWnd,
|
||||||
|
WM_SETFONT,
|
||||||
|
(WPARAM)hFont,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Subclass the AddressBar */
|
/* Subclass the AddressBar */
|
||||||
oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
|
oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
|
||||||
SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc);
|
SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc);
|
||||||
|
@ -354,7 +362,10 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WM_COMMAND:
|
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;
|
goto def;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -477,10 +488,28 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
||||||
rootName = get_root_key_name(hRootKey);
|
rootName = get_root_key_name(hRootKey);
|
||||||
fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
|
fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
|
||||||
if (fullPath) {
|
if (fullPath) {
|
||||||
_stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
|
/* set (correct) the address bar text */
|
||||||
|
if(keyPath[0] != '\0')
|
||||||
|
_stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
|
||||||
|
else
|
||||||
|
fullPath = _tcscpy(fullPath, rootName);
|
||||||
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
|
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
|
||||||
SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
|
SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
|
||||||
HeapFree(GetProcessHeap(), 0, fullPath);
|
HeapFree(GetProcessHeap(), 0, fullPath);
|
||||||
|
/* disable hive manipulation items temporarily (enable only if necessary) */
|
||||||
|
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_GRAYED);
|
||||||
|
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_GRAYED);
|
||||||
|
/* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
|
||||||
|
if (!(_tcsicmp(rootName, TEXT("HKEY_LOCAL_MACHINE")) &&
|
||||||
|
_tcsicmp(rootName, TEXT("HKEY_USERS"))))
|
||||||
|
{
|
||||||
|
// enable the unload menu item if at the root
|
||||||
|
// otherwise enable the load menu item if there is no slash in keyPath (ie. immediate child selected)
|
||||||
|
if(keyPath[0] == '\0')
|
||||||
|
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_ENABLED);
|
||||||
|
else if(!_tcschr(keyPath, _T('\\')))
|
||||||
|
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_ENABLED);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
|
|
|
@ -59,19 +59,10 @@ void error(HWND hwnd, INT resId, ...)
|
||||||
|
|
||||||
static void error_code_messagebox(HWND hwnd, DWORD error_code)
|
static void error_code_messagebox(HWND hwnd, DWORD error_code)
|
||||||
{
|
{
|
||||||
LPTSTR lpMsgBuf;
|
|
||||||
DWORD status;
|
|
||||||
TCHAR title[256];
|
TCHAR title[256];
|
||||||
static const TCHAR fallback[] = TEXT("Error displaying error message.\n");
|
|
||||||
if (!LoadString(hInst, IDS_ERROR, title, COUNT_OF(title)))
|
if (!LoadString(hInst, IDS_ERROR, title, COUNT_OF(title)))
|
||||||
lstrcpy(title, TEXT("Error"));
|
lstrcpy(title, TEXT("Error"));
|
||||||
status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
ErrorMessageBox(hwnd, title, error_code);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void warning(HWND hwnd, INT resId, ...)
|
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;
|
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)
|
static BOOL ImportRegistryFile(HWND hWnd)
|
||||||
{
|
{
|
||||||
OPENFILENAME ofn;
|
OPENFILENAME ofn;
|
||||||
|
@ -316,7 +415,6 @@ static BOOL ImportRegistryFile(HWND hWnd)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
|
static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HWND hwndExportAll;
|
HWND hwndExportAll;
|
||||||
|
@ -758,6 +856,12 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
UNREFERENCED_PARAMETER(message);
|
UNREFERENCED_PARAMETER(message);
|
||||||
|
|
||||||
switch (LOWORD(wParam)) {
|
switch (LOWORD(wParam)) {
|
||||||
|
case ID_REGISTRY_LOADHIVE:
|
||||||
|
LoadHive(hWnd);
|
||||||
|
return TRUE;
|
||||||
|
case ID_REGISTRY_UNLOADHIVE:
|
||||||
|
UnloadHive(hWnd);
|
||||||
|
return TRUE;
|
||||||
case ID_REGISTRY_IMPORTREGISTRYFILE:
|
case ID_REGISTRY_IMPORTREGISTRYFILE:
|
||||||
ImportRegistryFile(hWnd);
|
ImportRegistryFile(hWnd);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
||||||
|
@ -276,6 +286,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "Внася словесен файл в регистъра"
|
ID_REGISTRY_IMPORTREGISTRYFILE "Внася словесен файл в регистъра"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
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_CONNECTNETWORKREGISTRY
|
||||||
"Свързва се с регистъра на далечен компютър"
|
"Свързва се с регистъра на далечен компютър"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -332,6 +346,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Моят компютър"
|
IDS_MY_COMPUTER "Моят компютър"
|
||||||
IDS_IMPORT_REG_FILE "Внос на регистърен файл"
|
IDS_IMPORT_REG_FILE "Внос на регистърен файл"
|
||||||
IDS_EXPORT_REG_FILE "Износ на регистърен файл"
|
IDS_EXPORT_REG_FILE "Износ на регистърен файл"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(самостоятелна стойност на двойна дума)"
|
IDS_INVALID_DWORD "(самостоятелна стойност на двойна дума)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -175,6 +175,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
||||||
|
@ -274,6 +284,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importuje textový soubor do registru"
|
ID_REGISTRY_IMPORTREGISTRYFILE "Importuje textový soubor do registru"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exportuje všechny části registru do textového souboru"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Připojí se ke vzdálenému registru jiného počítače"
|
"Připojí se ke vzdálenému registru jiného počítače"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -330,6 +344,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Tento počítač"
|
IDS_MY_COMPUTER "Tento počítač"
|
||||||
IDS_IMPORT_REG_FILE "Importovat soubor registru"
|
IDS_IMPORT_REG_FILE "Importovat soubor registru"
|
||||||
IDS_EXPORT_REG_FILE "Exportovat do souboru 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)"
|
IDS_INVALID_DWORD "(Neplatná hodnota DWORD)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Importiert eine Textddatei in die Registry"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exportiert Teile oder die ganze Registry in eine Textdatei"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Verbindet zu einer Registry eines Fremdcomputers"
|
"Verbindet zu einer Registry eines Fremdcomputers"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -332,6 +346,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Arbeitsplatz"
|
IDS_MY_COMPUTER "Arbeitsplatz"
|
||||||
IDS_IMPORT_REG_FILE "Registry importieren"
|
IDS_IMPORT_REG_FILE "Registry importieren"
|
||||||
IDS_EXPORT_REG_FILE "Registry exportieren"
|
IDS_EXPORT_REG_FILE "Registry exportieren"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(ungültiger DWORD-Wert)"
|
IDS_INVALID_DWORD "(ungültiger DWORD-Wert)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
||||||
|
@ -276,6 +286,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "ÅéóÜãåé Ýíá áñ÷åßï êåéìÝíïõ óôç registry"
|
ID_REGISTRY_IMPORTREGISTRYFILE "ÅéóÜãåé Ýíá áñ÷åßï êåéìÝíïõ óôç registry"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"ÅîÜãùç üëç Þ Ýíá êïììÜôé ôçò registry óå Ýíá áñ÷åßï êåéìÝíïõ"
|
"ÅîÜãùç üëç Þ Ýíá êïììÜôé ôçò registry óå Ýíá áñ÷åßï êåéìÝíïõ"
|
||||||
|
ID_REGISTRY_LOADHIVE
|
||||||
|
"Loads a hive file into the registry"
|
||||||
|
ID_REGISTRY_UNLOADHIVE
|
||||||
|
"Unloads a hive from the registry"
|
||||||
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"ÓõíäÝååôáé óôç registry åíüò áðïìáêñõóìÝíïõ õðïëïãéóôÞ"
|
"ÓõíäÝååôáé óôç registry åíüò áðïìáêñõóìÝíïõ õðïëïãéóôÞ"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -332,6 +346,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Ï ÕðïëïãéóôÞò Ìïõ"
|
IDS_MY_COMPUTER "Ï ÕðïëïãéóôÞò Ìïõ"
|
||||||
IDS_IMPORT_REG_FILE "ÅéóáãùãÞ Áñ÷åßïõ Registry"
|
IDS_IMPORT_REG_FILE "ÅéóáãùãÞ Áñ÷åßïõ Registry"
|
||||||
IDS_EXPORT_REG_FILE "ÅîáãùãÞ Áñ÷åßïõ Registry"
|
IDS_EXPORT_REG_FILE "ÅîáãùãÞ Áñ÷åßïõ Registry"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(ìç Ýãêõñç DWORD ôéìÞ)"
|
IDS_INVALID_DWORD "(ìç Ýãêõñç DWORD ôéìÞ)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -274,6 +274,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exports all or part of the registry to a text file"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Connects to a remote computer's registry"
|
"Connects to a remote computer's registry"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -330,6 +334,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "My Computer"
|
IDS_MY_COMPUTER "My Computer"
|
||||||
IDS_IMPORT_REG_FILE "Import Registry File"
|
IDS_IMPORT_REG_FILE "Import Registry File"
|
||||||
IDS_EXPORT_REG_FILE "Export 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)"
|
IDS_INVALID_DWORD "(invalid DWORD value)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -392,6 +398,20 @@ BEGIN
|
||||||
EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12
|
EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12
|
||||||
END
|
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
|
IDD_ADDFAVORITES DIALOGEX DISCARDABLE 0, 0, 186, 46
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Add to Favorites"
|
CAPTION "Add to Favorites"
|
||||||
|
|
|
@ -180,6 +180,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Importa un archivo de texto al registro"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exporta todo o parte del registro a un archivo de texto"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Se conecta al registro de un ordenador remoto"
|
"Se conecta al registro de un ordenador remoto"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -335,6 +349,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Mi PC"
|
IDS_MY_COMPUTER "Mi PC"
|
||||||
IDS_IMPORT_REG_FILE "Importa Fichero de Registro"
|
IDS_IMPORT_REG_FILE "Importa Fichero de Registro"
|
||||||
IDS_EXPORT_REG_FILE "Exporta 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)"
|
IDS_INVALID_DWORD "(valor DWORD invalido)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -180,6 +180,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Importe un fichier texte dans les registres"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exporte tout ou une partie des registres dans un fichier texte"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Connecte aux registres d'un ordinateur distant"
|
"Connecte aux registres d'un ordinateur distant"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -335,6 +349,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Mon ordinateur"
|
IDS_MY_COMPUTER "Mon ordinateur"
|
||||||
IDS_IMPORT_REG_FILE "Importer un fichier registre"
|
IDS_IMPORT_REG_FILE "Importer un fichier registre"
|
||||||
IDS_EXPORT_REG_FILE "Exporter 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)"
|
IDS_INVALID_DWORD "(valeur mot double invalide)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -178,6 +178,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exports all or part of the registry to a text file"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Connects to a remote computer's registry"
|
"Connects to a remote computer's registry"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -333,6 +347,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "My Computer"
|
IDS_MY_COMPUTER "My Computer"
|
||||||
IDS_IMPORT_REG_FILE "Import Registry File"
|
IDS_IMPORT_REG_FILE "Import Registry File"
|
||||||
IDS_EXPORT_REG_FILE "Export 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)"
|
IDS_INVALID_DWORD "(invalid DWORD value)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Mengimpor file teks ke dalam registri"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Mengekspor semua atau sebagian registri le file teks"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Menyambung ke registri komputer remote"
|
"Menyambung ke registri komputer remote"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -332,6 +346,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "My Computer"
|
IDS_MY_COMPUTER "My Computer"
|
||||||
IDS_IMPORT_REG_FILE "Impor File Registri"
|
IDS_IMPORT_REG_FILE "Impor File Registri"
|
||||||
IDS_EXPORT_REG_FILE "Ekspor 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)"
|
IDS_INVALID_DWORD "(nilai DWORD tidak benar)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -180,6 +180,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Importa un file di testo nel Registro"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Esporta tutto o parte del Registro in un file di testo"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Si connette al Registro di un computer remoto"
|
"Si connette al Registro di un computer remoto"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -337,6 +351,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Il mio Computer"
|
IDS_MY_COMPUTER "Il mio Computer"
|
||||||
IDS_IMPORT_REG_FILE "Importa file di Registro"
|
IDS_IMPORT_REG_FILE "Importa file di Registro"
|
||||||
IDS_EXPORT_REG_FILE "Esporta 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)"
|
IDS_INVALID_DWORD "(valore DWORD non valido)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -175,6 +175,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
||||||
|
@ -274,6 +284,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "テキスト ファイルをレジストリにインポートします。"
|
ID_REGISTRY_IMPORTREGISTRYFILE "テキスト ファイルをレジストリにインポートします。"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
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_CONNECTNETWORKREGISTRY
|
||||||
"リモート コンピュータのレジストリに接続します。"
|
"リモート コンピュータのレジストリに接続します。"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -330,6 +344,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "マイ コンピュータ"
|
IDS_MY_COMPUTER "マイ コンピュータ"
|
||||||
IDS_IMPORT_REG_FILE "レジストリ ファイルのインポート"
|
IDS_IMPORT_REG_FILE "レジストリ ファイルのインポート"
|
||||||
IDS_EXPORT_REG_FILE "レジストリ ファイルのエクスポート"
|
IDS_EXPORT_REG_FILE "レジストリ ファイルのエクスポート"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(無効な DWORD 値)"
|
IDS_INVALID_DWORD "(無効な DWORD 値)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
||||||
|
@ -261,6 +271,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "텍스트 파일을 레지스트리로 불러 옵니다"
|
ID_REGISTRY_IMPORTREGISTRYFILE "텍스트 파일을 레지스트리로 불러 옵니다"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
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_CONNECTNETWORKREGISTRY
|
||||||
"원격 컴퓨터의 레지스트리로 접속합니다"
|
"원격 컴퓨터의 레지스트리로 접속합니다"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -317,6 +331,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "내 컴퓨터"
|
IDS_MY_COMPUTER "내 컴퓨터"
|
||||||
IDS_IMPORT_REG_FILE "레지스트리 파일 불러오기"
|
IDS_IMPORT_REG_FILE "레지스트리 파일 불러오기"
|
||||||
IDS_EXPORT_REG_FILE "레지스트리 파일 내보내기"
|
IDS_EXPORT_REG_FILE "레지스트리 파일 내보내기"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(잘못된 DWORD값)"
|
IDS_INVALID_DWORD "(잘못된 DWORD값)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Een tekstbestand in het register importeren"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Het register of een gedeelte ervan naar een tekstbestand exporteren"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Een verbinding maken met het register van een externe computer"
|
"Een verbinding maken met het register van een externe computer"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -332,6 +346,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "My Computer"
|
IDS_MY_COMPUTER "My Computer"
|
||||||
IDS_IMPORT_REG_FILE "Import Registry File"
|
IDS_IMPORT_REG_FILE "Import Registry File"
|
||||||
IDS_EXPORT_REG_FILE "Export 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)"
|
IDS_INVALID_DWORD "(invalid DWORD value)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Importerer en tekstfil inn i Registret"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Eksporterer hele eller deler av Registret til en tekstfil"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Kobler til Registret på en annen datamaskin"
|
"Kobler til Registret på en annen datamaskin"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -332,6 +346,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Min datamaskin"
|
IDS_MY_COMPUTER "Min datamaskin"
|
||||||
IDS_IMPORT_REG_FILE "Importer registerfil"
|
IDS_IMPORT_REG_FILE "Importer registerfil"
|
||||||
IDS_EXPORT_REG_FILE "Eksporter registerfil"
|
IDS_EXPORT_REG_FILE "Eksporter registerfil"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(ugyldig DWORD-verdi)"
|
IDS_INVALID_DWORD "(ugyldig DWORD-verdi)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -182,6 +182,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
||||||
|
@ -281,6 +291,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importuje plik do rejestru"
|
ID_REGISTRY_IMPORTREGISTRYFILE "Importuje plik do rejestru"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Eksportuje ca³oœæ lub czêœæ rejestru do pliku"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Po³¹czenie z rejestrem zdalnego komputera"
|
"Po³¹czenie z rejestrem zdalnego komputera"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -337,6 +351,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Mój komputer"
|
IDS_MY_COMPUTER "Mój komputer"
|
||||||
IDS_IMPORT_REG_FILE "Importuj plik rejestru"
|
IDS_IMPORT_REG_FILE "Importuj plik rejestru"
|
||||||
IDS_EXPORT_REG_FILE "Eksportuj 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)"
|
IDS_INVALID_DWORD "(niew³aœciwa wartoœæ DWORD)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -178,6 +178,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Importa um arquivo de texto para o registro"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exporta todo ou parte do Registro para um arquivo texto"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Conecta-se ao Registro de um computador remoto"
|
"Conecta-se ao Registro de um computador remoto"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -333,6 +347,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Meu computador"
|
IDS_MY_COMPUTER "Meu computador"
|
||||||
IDS_IMPORT_REG_FILE "Importar arquivo do Registro"
|
IDS_IMPORT_REG_FILE "Importar arquivo do Registro"
|
||||||
IDS_EXPORT_REG_FILE "Exportar 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)"
|
IDS_INVALID_DWORD "(valor DWORD inválido)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -277,6 +277,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importa um arquivo texto para o registro."
|
ID_REGISTRY_IMPORTREGISTRYFILE "Importa um arquivo texto para o registro."
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exporta todo ou parte do registro para um arquivo texto."
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Conecta a um registro em um computador remoto."
|
"Conecta a um registro em um computador remoto."
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -333,6 +337,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "My Computer"
|
IDS_MY_COMPUTER "My Computer"
|
||||||
IDS_IMPORT_REG_FILE "Import Registry File"
|
IDS_IMPORT_REG_FILE "Import Registry File"
|
||||||
IDS_EXPORT_REG_FILE "Export 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)"
|
IDS_INVALID_DWORD "(invalid DWORD value)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -384,6 +390,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EXPORTRANGE DIALOGEX DISCARDABLE 50, 50, 370, 50
|
||||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
|
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
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
|
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_EDIT_NEW_DWORDVALUE "Добавляет новое DWORD-значение"
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "Импортирует текстовой файл в реестр"
|
ID_REGISTRY_IMPORTREGISTRYFILE "Импортирует текстовой файл в реестр"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE "Экспортирует весь реестр или его часть в текстовой файл"
|
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_CONNECTNETWORKREGISTRY "Подключается к реестру удалённого компьютера"
|
||||||
|
|
||||||
|
@ -332,6 +344,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Мой компьютер"
|
IDS_MY_COMPUTER "Мой компьютер"
|
||||||
IDS_IMPORT_REG_FILE "Импортирование файла реестра"
|
IDS_IMPORT_REG_FILE "Импортирование файла реестра"
|
||||||
IDS_EXPORT_REG_FILE "Экспортирование файла реестра"
|
IDS_EXPORT_REG_FILE "Экспортирование файла реестра"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(неправильное значение DWORD)"
|
IDS_INVALID_DWORD "(неправильное значение DWORD)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exports all or part of the registry to a text file"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Connects to a remote computer's registry"
|
"Connects to a remote computer's registry"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -317,6 +331,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Tento poèítaè"
|
IDS_MY_COMPUTER "Tento poèítaè"
|
||||||
IDS_IMPORT_REG_FILE "Import Registry File"
|
IDS_IMPORT_REG_FILE "Import Registry File"
|
||||||
IDS_EXPORT_REG_FILE "Export 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)"
|
IDS_INVALID_DWORD "(neplatná DWORD hodnota)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "V register uvozi datoteko z besedilom"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Registrsko datoteko ali njen del izvozi v besedilno datoteko"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Vzpostavi povezavo z registrom oddaljenega raèunalnika"
|
"Vzpostavi povezavo z registrom oddaljenega raèunalnika"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -332,6 +346,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "My Computer"
|
IDS_MY_COMPUTER "My Computer"
|
||||||
IDS_IMPORT_REG_FILE "Import Registry File"
|
IDS_IMPORT_REG_FILE "Import Registry File"
|
||||||
IDS_EXPORT_REG_FILE "Export 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)"
|
IDS_INVALID_DWORD "(invalid DWORD value)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -175,6 +175,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
||||||
|
@ -274,6 +284,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importerar en textfil till registret"
|
ID_REGISTRY_IMPORTREGISTRYFILE "Importerar en textfil till registret"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exporterar hela eller en del av registret till en textfil"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Ansluter till en annan dators register"
|
"Ansluter till en annan dators register"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -330,6 +344,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "Den här datorn"
|
IDS_MY_COMPUTER "Den här datorn"
|
||||||
IDS_IMPORT_REG_FILE "Importera registerfil"
|
IDS_IMPORT_REG_FILE "Importera registerfil"
|
||||||
IDS_EXPORT_REG_FILE "Exportera registerfil"
|
IDS_EXPORT_REG_FILE "Exportera registerfil"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(felaktigt DWORD-värde)"
|
IDS_INVALID_DWORD "(felaktigt DWORD-värde)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
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_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
ID_REGISTRY_EXPORTREGISTRYFILE
|
||||||
"Exports all or part of the registry to a text file"
|
"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
|
ID_REGISTRY_CONNECTNETWORKREGISTRY
|
||||||
"Connects to a remote computer's registry"
|
"Connects to a remote computer's registry"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -332,6 +346,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "My Computer"
|
IDS_MY_COMPUTER "My Computer"
|
||||||
IDS_IMPORT_REG_FILE "Import Registry File"
|
IDS_IMPORT_REG_FILE "Import Registry File"
|
||||||
IDS_EXPORT_REG_FILE "Export 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)"
|
IDS_INVALID_DWORD "(invalid DWORD value)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -178,6 +178,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
||||||
|
@ -277,6 +287,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "²ìïîðòóº òåêñòîâèé ôàéë äî ðåºñòðó"
|
ID_REGISTRY_IMPORTREGISTRYFILE "²ìïîðòóº òåêñòîâèé ôàéë äî ðåºñòðó"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
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_CONNECTNETWORKREGISTRY
|
||||||
"ϳäêëþ÷àºòüñÿ äî ðåºñòðó â³ääàëåíîãî êîìï'þòåðà"
|
"ϳäêëþ÷àºòüñÿ äî ðåºñòðó â³ääàëåíîãî êîìï'þòåðà"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -333,6 +347,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "̳é êîìï'þòåð"
|
IDS_MY_COMPUTER "̳é êîìï'þòåð"
|
||||||
IDS_IMPORT_REG_FILE "²ìïîðòóâàòè ôàéë ðåºñòðó"
|
IDS_IMPORT_REG_FILE "²ìïîðòóâàòè ôàéë ðåºñòðó"
|
||||||
IDS_EXPORT_REG_FILE "Åêñïîðòóâàòè ôàéë ðåºñòðó"
|
IDS_EXPORT_REG_FILE "Åêñïîðòóâàòè ôàéë ðåºñòðó"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(Íåïðàâèëüíå çíà÷åííÿ DWORD)"
|
IDS_INVALID_DWORD "(Íåïðàâèëüíå çíà÷åííÿ DWORD)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,16 @@ END
|
||||||
/*
|
/*
|
||||||
* Dialog
|
* 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
|
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
|
||||||
|
@ -276,6 +286,10 @@ BEGIN
|
||||||
ID_REGISTRY_IMPORTREGISTRYFILE "将文件导入到注册表中。"
|
ID_REGISTRY_IMPORTREGISTRYFILE "将文件导入到注册表中。"
|
||||||
ID_REGISTRY_EXPORTREGISTRYFILE
|
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_CONNECTNETWORKREGISTRY
|
||||||
"连接到远程计算机的注册表。"
|
"连接到远程计算机的注册表。"
|
||||||
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
|
||||||
|
@ -332,6 +346,8 @@ BEGIN
|
||||||
IDS_MY_COMPUTER "My Computer"
|
IDS_MY_COMPUTER "My Computer"
|
||||||
IDS_IMPORT_REG_FILE "导入注册表文件"
|
IDS_IMPORT_REG_FILE "导入注册表文件"
|
||||||
IDS_EXPORT_REG_FILE "导出注册表文件"
|
IDS_EXPORT_REG_FILE "导出注册表文件"
|
||||||
|
IDS_LOAD_HIVE "Load Hive"
|
||||||
|
IDS_UNLOAD_HIVE "Unload Hive"
|
||||||
IDS_INVALID_DWORD "(不正确的 DWORD 值)"
|
IDS_INVALID_DWORD "(不正确的 DWORD 值)"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -556,18 +556,12 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
|
||||||
/* } */
|
/* } */
|
||||||
/* dwValSize = max_val_size; */
|
/* dwValSize = max_val_size; */
|
||||||
while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) {
|
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. */
|
/* Add a terminating 0 character. Usually this is only necessary for strings. */
|
||||||
ValBuf[dwValSize] = 0;
|
ValBuf[dwValSize] = 0;
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
ValBuf[dwValSize + 1] = 0;
|
ValBuf[dwValSize + 1] = 0;
|
||||||
#endif
|
#endif
|
||||||
AddEntryToList(hwndLV, pLastBl, dwValType, ValBuf, dwValSize, -1, TRUE);
|
AddEntryToList(hwndLV, ValName, dwValType, ValBuf, dwValSize, -1, TRUE);
|
||||||
dwValNameLen = max_val_name_len;
|
dwValNameLen = max_val_name_len;
|
||||||
dwValSize = max_val_size;
|
dwValSize = max_val_size;
|
||||||
dwValType = 0L;
|
dwValType = 0L;
|
||||||
|
|
|
@ -58,6 +58,7 @@ typedef struct {
|
||||||
HWND hTreeWnd;
|
HWND hTreeWnd;
|
||||||
HWND hListWnd;
|
HWND hListWnd;
|
||||||
HWND hAddressBarWnd;
|
HWND hAddressBarWnd;
|
||||||
|
HWND hAddressBtnWnd;
|
||||||
int nFocusPanel; /* 0: left 1: right */
|
int nFocusPanel; /* 0: left 1: right */
|
||||||
int nSplitPos;
|
int nSplitPos;
|
||||||
WINDOWPLACEMENT pos;
|
WINDOWPLACEMENT pos;
|
||||||
|
@ -88,6 +89,9 @@ extern void ShowAboutBox(HWND hWnd);
|
||||||
/* childwnd.c */
|
/* childwnd.c */
|
||||||
extern LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);
|
extern LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
|
/* error.c */
|
||||||
|
extern void ErrorMessageBox(HWND hWnd, LPCTSTR title, DWORD code);
|
||||||
|
|
||||||
/* find.c */
|
/* find.c */
|
||||||
extern void FindDialog(HWND hWnd);
|
extern void FindDialog(HWND hWnd);
|
||||||
extern BOOL FindNext(HWND hWnd);
|
extern BOOL FindNext(HWND hWnd);
|
||||||
|
|
|
@ -137,9 +137,11 @@
|
||||||
#define IDS_ERR_RENVAL_CAPTION 32856
|
#define IDS_ERR_RENVAL_CAPTION 32856
|
||||||
#define IDS_ERR_RENVAL_TOEMPTY 32857
|
#define IDS_ERR_RENVAL_TOEMPTY 32857
|
||||||
#define IDS_BAD_KEY 32858
|
#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_MULTISTRINGVALUE 32861
|
||||||
#define ID_EDIT_NEW_EXPANDABLESTRINGVALUE 32861
|
#define ID_EDIT_NEW_EXPANDABLESTRINGVALUE 32862
|
||||||
|
|
||||||
#define ID_SWITCH_PANELS 32871
|
#define ID_SWITCH_PANELS 32871
|
||||||
#define ID_EDIT_PERMISSIONS 32872
|
#define ID_EDIT_PERMISSIONS 32872
|
||||||
|
@ -199,6 +201,8 @@
|
||||||
#define IDC_EXPORT_BRANCH 2009
|
#define IDC_EXPORT_BRANCH 2009
|
||||||
#define IDC_EXPORT_BRANCH_TEXT 2010
|
#define IDC_EXPORT_BRANCH_TEXT 2010
|
||||||
|
|
||||||
|
#define IDD_LOADHIVE 2500
|
||||||
|
#define IDC_EDIT_KEY 2501
|
||||||
|
|
||||||
#define IDC_FAVORITENAME 2011
|
#define IDC_FAVORITENAME 2011
|
||||||
#define IDC_FAVORITESLIST 2012
|
#define IDC_FAVORITESLIST 2012
|
||||||
|
|
|
@ -633,7 +633,7 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
|
||||||
TVITEM tvi;
|
TVITEM tvi;
|
||||||
|
|
||||||
/* Total no-good hack */
|
/* Total no-good hack */
|
||||||
if (!_tcsncmp(keyPath, _T("My Computer\\"), 12))
|
if (!_tcsnicmp(keyPath, _T("My Computer\\"), 12))
|
||||||
keyPath += 12;
|
keyPath += 12;
|
||||||
|
|
||||||
hRoot = TreeView_GetRoot(hwndTV);
|
hRoot = TreeView_GetRoot(hwndTV);
|
||||||
|
@ -647,17 +647,17 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
|
||||||
/* Special case for root to expand root key abbreviations */
|
/* Special case for root to expand root key abbreviations */
|
||||||
if (hItem == hRoot)
|
if (hItem == hRoot)
|
||||||
{
|
{
|
||||||
if (!_tcscmp(szPathPart, TEXT("HKCR")))
|
if (!_tcsicmp(szPathPart, TEXT("HKCR")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
|
_tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKCU")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKCU")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
|
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKLM")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKLM")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
|
_tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKU")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKU")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_USERS"));
|
_tcscpy(szPathPart, TEXT("HKEY_USERS"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKCC")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKCC")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
|
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
|
||||||
else if (!_tcscmp(szPathPart, TEXT("HKDD")))
|
else if (!_tcsicmp(szPathPart, TEXT("HKDD")))
|
||||||
_tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
|
_tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,7 +672,7 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
|
||||||
|
|
||||||
(void)TreeView_GetItem(hwndTV, &tvi);
|
(void)TreeView_GetItem(hwndTV, &tvi);
|
||||||
|
|
||||||
if (!_tcscmp(szBuffer, szPathPart))
|
if (!_tcsicmp(szBuffer, szPathPart))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -641,10 +641,10 @@ BEGIN
|
||||||
IDS_MSG_UNABLEDEBUGPROCESS "Отладка процесса невозможна"
|
IDS_MSG_UNABLEDEBUGPROCESS "Отладка процесса невозможна"
|
||||||
IDS_MSG_WARNINGDEBUG "ВНИМАНИЕ: Отладка этого процесса может закончиться потерей данных.\nВы уверены, что можно продолжать?"
|
IDS_MSG_WARNINGDEBUG "ВНИМАНИЕ: Отладка этого процесса может закончиться потерей данных.\nВы уверены, что можно продолжать?"
|
||||||
IDS_MSG_TASKMGRWARNING "Ошибка Менеджера задач"
|
IDS_MSG_TASKMGRWARNING "Ошибка Менеджера задач"
|
||||||
IDS_MSG_WARNINGTERMINATING "ВНИМАНИЕ: Завершение процесса может повлеч неустойчивую работу системы и потерю данных\nСохраните важные данные перед продолжением.\nПродолжить завершение процесса?"
|
IDS_MSG_WARNINGTERMINATING "ВНИМАНИЕ: Завершение процесса может повлечь неустойчивую работу системы и потерю данных\nСохраните важные данные перед продолжением.\nПродолжить завершение процесса?"
|
||||||
IDS_MSG_UNABLETERMINATEPRO "Не удалось завершить процесс"
|
IDS_MSG_UNABLETERMINATEPRO "Не удалось завершить процесс"
|
||||||
IDS_MSG_UNABLECHANGEPRIORITY "Не удалось изменить приоритет"
|
IDS_MSG_UNABLECHANGEPRIORITY "Не удалось изменить приоритет"
|
||||||
IDS_MSG_WARNINGCHANGEPRIORITY "ВНИМАНИЕ: Изменение приоритета может повлеч неустойчивую работу и потерю данных.\nВы уверены, что можно продолжать?"
|
IDS_MSG_WARNINGCHANGEPRIORITY "ВНИМАНИЕ: Изменение приоритета может повлечь неустойчивую работу и потерю данных.\nВы уверены, что можно продолжать?"
|
||||||
IDS_MSG_TRAYICONCPUUSAGE "Загрузка ЦП: %d%%"
|
IDS_MSG_TRAYICONCPUUSAGE "Загрузка ЦП: %d%%"
|
||||||
IDS_STATUS_MEMUSAGE "Выделение памяти: %dK / %dK"
|
IDS_STATUS_MEMUSAGE "Выделение памяти: %dK / %dK"
|
||||||
IDS_STATUS_CPUUSAGE "Загрузка ЦП: %3d%%"
|
IDS_STATUS_CPUUSAGE "Загрузка ЦП: %3d%%"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* TRANSLATOR: M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
|
/* TRANSLATOR: M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
|
||||||
* DATE OF TR: 22-01-2008
|
* DATE OF TR: 22-01-2008
|
||||||
* Encoding : Latin II (852)
|
* Encoding : Latin II (852)
|
||||||
* LastChange: 31-05-2010
|
* LastChange: 05-09-2010
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -993,13 +993,13 @@ static MUI_ENTRY skSKBootLoaderEntries[] =
|
||||||
{
|
{
|
||||||
8,
|
8,
|
||||||
12,
|
12,
|
||||||
"Install bootloader on the harddisk (MBR and VBR).",
|
"Nainçtalovaś zav dzaź syst‚mu na pevně disk (MBR a VBR).",
|
||||||
TEXT_STYLE_NORMAL
|
TEXT_STYLE_NORMAL
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
8,
|
8,
|
||||||
13,
|
13,
|
||||||
"Install bootloader on the harddisk (VBR only).",
|
"Nainçtalovaś zav dzaź syst‚mu na pevně disk (iba VBR).",
|
||||||
TEXT_STYLE_NORMAL
|
TEXT_STYLE_NORMAL
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
/* Slovak translation for CMD
|
/* Slovak translation for CMD
|
||||||
* TRANSLATOR: Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
|
* TRANSLATOR: Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
|
||||||
* DATE OF TR: 21-03-2009
|
* 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
|
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
|
||||||
|
@ -118,7 +118,7 @@ dec hex name dec hex name\n\
|
||||||
6 6 Yellow 14 E Bright Yellow\n\
|
6 6 Yellow 14 E Bright Yellow\n\
|
||||||
7 7 White 15 F Bright White\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\
|
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\
|
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_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\
|
DATE [/T][date]\n\n\
|
||||||
/T display only\n\n\
|
/T display only\n\n\
|
||||||
Type DATE without parameters to display the current date setting and\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\
|
TITLE [string]\n\n\
|
||||||
string Specifies the title for the command prompt window.\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\
|
TIME [/T][time]\n\n\
|
||||||
/T display only\n\n\
|
/T display only\n\n\
|
||||||
Type TIME with no parameters to display the current time setting and a prompt\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\
|
WINDOW [/POS[=]left,top,width,heigth]\n\
|
||||||
[MIN|MAX|RESTORE] ['title']\n\n\
|
[MIN|MAX|RESTORE] ['title']\n\n\
|
||||||
/POS specify window placement and dimensions\n\
|
/POS specify window placement and dimensions\n\
|
||||||
MIN minimize the window\n\
|
MIN minimalizova<EFBFBD> okno\n\
|
||||||
MAX maximize the window\n\
|
MAX maximalizujte okno\n\
|
||||||
RESTORE restore the window"
|
RESTORE obnovi<EFBFBD> okno"
|
||||||
|
|
||||||
STRING_WINDOW_HELP2, "change console window aspect\n\n\
|
STRING_WINDOW_HELP2, "change console window aspect\n\n\
|
||||||
ACTIVATE 'window' [/POS[=]left,top,width,heigth]\n\
|
ACTIVATE 'window' [/POS[=]left,top,width,heigth]\n\
|
||||||
[MIN|MAX|RESTORE] ['title']\n\n\
|
[MIN|MAX|RESTORE] ['title']\n\n\
|
||||||
window tile of window on which perform actions\n\
|
window tile of window on which perform actions\n\
|
||||||
/POS specify window placement and dimensions\n\
|
/POS specify window placement and dimensions\n\
|
||||||
MIN minimize the window\n\
|
MIN minimalizova<EFBFBD> okno\n\
|
||||||
MAX maximize the window\n\
|
MAX maximalizujte okno\n\
|
||||||
RESTORE restore the window\n\
|
RESTORE obnovi<EFBFBD> okno\n\
|
||||||
title new title\n"
|
title new title\n"
|
||||||
|
|
||||||
|
|
||||||
|
@ -576,7 +576,7 @@ CLS Vyma
|
||||||
CMD Starts a new instance of the ReactOS command interpreter.\n\
|
CMD Starts a new instance of the ReactOS command interpreter.\n\
|
||||||
COLOR Sets the default console foreground and background colors.\n\
|
COLOR Sets the default console foreground and background colors.\n\
|
||||||
COPY Skopíruje jeden alebo viac súborov na iné umiestnenie.\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\
|
DELETE Deletes one or more files.\n\
|
||||||
DIR Displays a list of files and subdirectories in a directory.\n\
|
DIR Displays a list of files and subdirectories in a directory.\n\
|
||||||
ECHO Displays messages, or turns command echoing on or off.\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\
|
HISTORY List all commands which has been used\n\
|
||||||
IF Performs conditional processing in batch programs.\n\
|
IF Performs conditional processing in batch programs.\n\
|
||||||
LABEL Creates, changes, or deletes the volume label of a disk.\n\
|
LABEL Creates, changes, or deletes the volume label of a disk.\n\
|
||||||
MD Creates a directory.\n\
|
MD Vytvorí adresár.\n\
|
||||||
MKDIR Creates a directory.\n\
|
MKDIR Vytvorí adresár.\n\
|
||||||
MKLINK Creates a filesystem link object.\n\
|
MKLINK Creates a filesystem link object.\n\
|
||||||
MOVE Moves one or more files from one directory to another\n\
|
MOVE Moves one or more files from one directory to another\n\
|
||||||
directory.\n\
|
directory.\n\
|
||||||
|
@ -603,8 +603,8 @@ PROMPT Changes the command prompt.\n\
|
||||||
PUSHD Saves the current directory then changes it.\n\
|
PUSHD Saves the current directory then changes it.\n\
|
||||||
RD Removes a directory.\n\
|
RD Removes a directory.\n\
|
||||||
REM Records comments (remarks) in batch files.\n\
|
REM Records comments (remarks) in batch files.\n\
|
||||||
REN Renames a file or files.\n\
|
REN Premenuje súbor alebo súbory.\n\
|
||||||
RENAME Renames a file or files.\n\
|
RENAME Premenuje súbor alebo súbory.\n\
|
||||||
REPLACE Replaces files.\n\
|
REPLACE Replaces files.\n\
|
||||||
RMDIR Removes a directory.\n\
|
RMDIR Removes a directory.\n\
|
||||||
SCREEN Move cursor and optionally print text.\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"
|
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\
|
STRING_HELP2, "START Starts a separate window to run a specified program or command.\n\
|
||||||
Executes 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\
|
TIMER Allow the use of ten stopwatches.\n\
|
||||||
TITLE Sets the window title for a CMD.EXE session.\n\
|
TITLE Sets the window title for a CMD.EXE session.\n\
|
||||||
TYPE Displays the contents of a text file.\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_COPY_ERROR4, "Chyba: Zatia¾ neimplementované!\n" //Not implemented yet
|
||||||
STRING_DATE_ERROR, "Neplatný dátum."
|
STRING_DATE_ERROR, "Neplatný dátum."
|
||||||
STRING_DEL_ERROR5, "The file %s will be deleted! "
|
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_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_ERROR_ERROR2, "Syntax error"
|
||||||
STRING_FOR_ERROR1, "'in' missing in for statement."
|
STRING_FOR_ERROR1, "'in' missing in for statement."
|
||||||
STRING_FOR_ERROR2, "no brackets found."
|
STRING_FOR_ERROR2, "no brackets found."
|
||||||
|
@ -675,47 +675,47 @@ STRING_TIME_ERROR1, "Neplatn
|
||||||
|
|
||||||
STRING_TYPE_ERROR1, "Invalid option '/%s'\n"
|
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_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_TOO_MANY_PARAMETERS, "Príliš ve¾a parametrov - %s\n"
|
||||||
STRING_ERROR_PATH_NOT_FOUND, "Path not found\n"
|
STRING_ERROR_PATH_NOT_FOUND, "Cesta sa nenašla\n"
|
||||||
STRING_ERROR_FILE_NOT_FOUND, "File not found\n"
|
STRING_ERROR_FILE_NOT_FOUND, "Súbor sa nenašiel\n"
|
||||||
STRING_ERROR_REQ_PARAM_MISSING, "Required parameter missing\n"
|
STRING_ERROR_REQ_PARAM_MISSING, "Required parameter missing\n"
|
||||||
STRING_ERROR_INVALID_DRIVE, "Invalid drive specification\n"
|
STRING_ERROR_INVALID_DRIVE, "Invalid drive specification\n"
|
||||||
STRING_ERROR_INVALID_PARAM_FORMAT, "Invalid parameter format - %s\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_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_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_PATH_ERROR, "CMD: Not in environment '%s'\n"
|
||||||
|
|
||||||
STRING_REPLACE_ERROR1, "Invalid switch - %s\n"
|
STRING_REPLACE_ERROR1, "Neplatný prepínaè - %s\n"
|
||||||
STRING_REPLACE_ERROR2, "Path not found - %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_ERROR3, "The filename, directory name, or volume label syntax is incorrect.\n"
|
||||||
STRING_REPLACE_ERROR4, "Invalid parameter combination\n"
|
STRING_REPLACE_ERROR4, "Invalid parameter combination\n"
|
||||||
STRING_REPLACE_ERROR5, "Access denied - %s\n"
|
STRING_REPLACE_ERROR5, "Prístup zamietnutý - %s\n"
|
||||||
STRING_REPLACE_ERROR6, "No files found - %s\n"
|
STRING_REPLACE_ERROR6, "Žiadne súbory sa nenašli - %s\n"
|
||||||
STRING_REPLACE_ERROR7, "Extended Error 32\n"
|
STRING_REPLACE_ERROR7, "Extended Error 32\n"
|
||||||
|
|
||||||
STRING_REACTOS_VERSION, "Operaèný systém ReactOS [Verzia %s-%s]\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_VERSION_RUNVER, " running on %s"
|
||||||
STRING_COPY_FILE , " %d súbor(ov) skopírovaný(ch)\n"
|
STRING_COPY_FILE , " %d súbor(ov) skopírovaný(ch)\n"
|
||||||
STRING_DELETE_WIPE, "wiped"
|
STRING_DELETE_WIPE, "wiped"
|
||||||
STRING_FOR_ERROR, "bad variable specification."
|
STRING_FOR_ERROR, "bad variable specification."
|
||||||
STRING_SCREEN_COL, "invalid value for col"
|
STRING_SCREEN_COL, "neplatná hodnota pre ståpec"
|
||||||
STRING_SCREEN_ROW, "invalid value for row"
|
STRING_SCREEN_ROW, "neplatná hodnota pre riadok"
|
||||||
STRING_TIMER_TIME "Timer %d is %s: "
|
STRING_TIMER_TIME "Timer %d is %s: "
|
||||||
STRING_MKLINK_CREATED_SYMBOLIC, "Symbolic link created for %s <<===>> %s\n"
|
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_HARD, "Hard link created for %s <<===>> %s\n"
|
||||||
STRING_MKLINK_CREATED_JUNCTION, "Junction created for %s <<===>> %s\n"
|
STRING_MKLINK_CREATED_JUNCTION, "Junction created for %s <<===>> %s\n"
|
||||||
STRING_MORE, "Viac? " //"More? "
|
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_INVALID_OPERAND, "Invalid operand."
|
||||||
STRING_EXPECTED_CLOSE_PAREN, "Oèakávaná ')'."
|
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
|
// PrintWin32Error
|
||||||
|
@ -171,7 +184,7 @@ FormatExCallback (
|
||||||
|
|
||||||
case PROGRESS:
|
case PROGRESS:
|
||||||
percent = (PDWORD) Argument;
|
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);
|
_tprintf(szMsg, *percent);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -184,7 +197,7 @@ FormatExCallback (
|
||||||
status = (PBOOLEAN) Argument;
|
status = (PBOOLEAN) Argument;
|
||||||
if( *status == FALSE ) {
|
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);
|
_tprintf("%s", szMsg);
|
||||||
Error = TRUE;
|
Error = TRUE;
|
||||||
}
|
}
|
||||||
|
@ -203,7 +216,7 @@ FormatExCallback (
|
||||||
case UNKNOWND:
|
case UNKNOWND:
|
||||||
case STRUCTUREPROGRESS:
|
case STRUCTUREPROGRESS:
|
||||||
case CLUSTERSIZETOOSMALL:
|
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);
|
_tprintf("%s", szMsg);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -261,7 +274,7 @@ static VOID Usage( LPTSTR ProgramName )
|
||||||
BYTE dummy;
|
BYTE dummy;
|
||||||
BOOLEAN lastestVersion;
|
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())
|
if (!LoadFMIFSEntryPoints())
|
||||||
{
|
{
|
||||||
_tprintf(szMsg, ProgramName, _T(""));
|
_tprintf(szMsg, ProgramName, _T(""));
|
||||||
|
@ -319,7 +332,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
// Get function pointers
|
// Get function pointers
|
||||||
//
|
//
|
||||||
if( !LoadFMIFSEntryPoints()) {
|
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);
|
_tprintf("%s", szMsg);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -329,7 +342,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
//
|
//
|
||||||
if( (badArg = ParseCommandLine( argc, 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] );
|
_tprintf(szMsg, argv[badArg] );
|
||||||
|
|
||||||
Usage(argv[0]);
|
Usage(argv[0]);
|
||||||
|
@ -341,7 +354,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
//
|
//
|
||||||
if( !Drive ) {
|
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);
|
_tprintf(szMsg);
|
||||||
Usage( argv[0] );
|
Usage( argv[0] );
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -359,7 +372,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
driveType = GetDriveType( RootDirectory );
|
driveType = GetDriveType( RootDirectory );
|
||||||
|
|
||||||
if( driveType == 0 ) {
|
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());
|
PrintWin32Error( szMsg, GetLastError());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -371,7 +384,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
if( driveType != DRIVE_FIXED ) {
|
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] );
|
_tprintf(szMsg, RootDirectory[0] );
|
||||||
_fgetts( input, sizeof(input)/2, stdin );
|
_fgetts( input, sizeof(input)/2, stdin );
|
||||||
|
|
||||||
|
@ -386,7 +399,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
&serialNumber, &maxComponent, &flags,
|
&serialNumber, &maxComponent, &flags,
|
||||||
fileSystem, sizeof(fileSystem)/2)) {
|
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());
|
PrintWin32Error( szMsg, GetLastError());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -396,11 +409,11 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
&totalNumberOfBytes,
|
&totalNumberOfBytes,
|
||||||
&totalNumberOfFreeBytes )) {
|
&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());
|
PrintWin32Error( szMsg, GetLastError());
|
||||||
return -1;
|
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 );
|
_tprintf(szMsg, fileSystem );
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -412,7 +425,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
|
|
||||||
while(1 ) {
|
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] );
|
_tprintf(szMsg, RootDirectory[0] );
|
||||||
_fgetts( input, sizeof(input)/2, stdin );
|
_fgetts( input, sizeof(input)/2, stdin );
|
||||||
input[ _tcslen( input ) - 1] = 0;
|
input[ _tcslen( input ) - 1] = 0;
|
||||||
|
@ -421,15 +434,15 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
|
|
||||||
break;
|
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);
|
_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] );
|
_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 ) {
|
while( 1 ) {
|
||||||
_fgetts( input, sizeof(input)/2, stdin );
|
_fgetts( input, sizeof(input)/2, stdin );
|
||||||
|
@ -460,7 +473,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
}
|
}
|
||||||
} else {
|
} 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 ) {
|
if( totalNumberOfBytes.QuadPart > 1024*1024*10 ) {
|
||||||
|
|
||||||
_tprintf(_T("%s %luM\n"),szMsg, (DWORD) (totalNumberOfBytes.QuadPart/(1024*1024)));
|
_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,
|
_tprintf(_T("%s %.2fM\n"),szMsg,
|
||||||
((float)(LONGLONG)totalNumberOfBytes.QuadPart)/(float)(1024.0*1024.0));
|
((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);
|
_tprintf("%s", szMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -488,7 +501,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
ClusterSize, FormatExCallback );
|
ClusterSize, FormatExCallback );
|
||||||
#endif
|
#endif
|
||||||
if( Error ) return -1;
|
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);
|
_tprintf("%s", szMsg);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -503,7 +516,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
if( !EnableVolumeCompression( RootDirectory, TRUE )) {
|
if( !EnableVolumeCompression( RootDirectory, TRUE )) {
|
||||||
#endif
|
#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);
|
_tprintf("%s", szMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -520,7 +533,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
input[ _tcslen(input)-1] = 0;
|
input[ _tcslen(input)-1] = 0;
|
||||||
if( !SetVolumeLabel( RootDirectory, input )) {
|
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());
|
PrintWin32Error(szMsg, GetLastError());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -531,7 +544,7 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
&serialNumber, &maxComponent, &flags,
|
&serialNumber, &maxComponent, &flags,
|
||||||
fileSystem, sizeof(fileSystem)/2)) {
|
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());
|
PrintWin32Error( szMsg, GetLastError());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -544,12 +557,12 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
&totalNumberOfBytes,
|
&totalNumberOfBytes,
|
||||||
&totalNumberOfFreeBytes )) {
|
&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());
|
PrintWin32Error(szMsg, GetLastError());
|
||||||
return -1;
|
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 );
|
_tprintf(szMsg, totalNumberOfBytes.QuadPart, totalNumberOfFreeBytes.QuadPart );
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -560,11 +573,11 @@ _tmain(int argc, TCHAR *argv[])
|
||||||
&serialNumber, &maxComponent, &flags,
|
&serialNumber, &maxComponent, &flags,
|
||||||
fileSystem, sizeof(fileSystem)/2)) {
|
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());
|
PrintWin32Error( szMsg, GetLastError());
|
||||||
return -1;
|
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),
|
_tprintf(szMsg, (unsigned int)(serialNumber >> 16),
|
||||||
(unsigned int)(serialNumber & 0xFFFF) );
|
(unsigned int)(serialNumber & 0xFFFF) );
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* TRANSLATOR : M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
|
/* TRANSLATOR : M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
|
||||||
* DATE OF TR.: 15-02-2008
|
* DATE OF TR.: 15-02-2008
|
||||||
* LAST CHANGE: 08-08-2008
|
* LAST CHANGE: 10-08-2010
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "resource.h"
|
#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\
|
-FS:syst‚m s£borov UrŸuje typ s£borov‚ho syst‚mu (%s).\n\
|
||||||
-V:menovka UrŸuje menovku zv„zku.\n\
|
-V:menovka UrŸuje menovku zv„zku.\n\
|
||||||
-Q Vykon va rìchle form tovanie.\n\
|
-Q Vykon va rìchle form tovanie.\n\
|
||||||
-A:ve–kosœ Overrides the default allocation unit size. Default settings\n\
|
-A:ve–kosś Prepˇçe predvolenŁ ve–kosś alokaźnej jednotky. Pre vçeobecn‚\n\
|
||||||
are strongly recommended for general use\n\
|
pou§itie sŁ d“razne odporŁźan‚ predvolen‚ nastavenia\n\
|
||||||
NTFS supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.\n\
|
NTFS podporuje 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.\n\
|
||||||
FAT supports 8192, 16K, 32K, 64K, 128K, 256K.\n\
|
FAT podporuje 8192, 16K, 32K, 64K, 128K, 256K.\n\
|
||||||
NTFS compression is not supported for allocation unit sizes\n\
|
NTFS kompresia nie je podporovan pre ve–kosti alokaźnej\n\
|
||||||
above 4096.\n\
|
jednotky nad 4096.\n\
|
||||||
-C Files created on the new volume will be compressed by\n\
|
-C SŁbory vytvoren‚ na novom zv„zku budŁ automaticky\n\
|
||||||
default.\n\n"
|
komprimovan‚.\n\n"
|
||||||
|
|
||||||
STRING_COMPLETE "DokonŸen‚ na %lu percent.\r"
|
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_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_UNKNOW_ARG "Nezn my argument: %s\n"
|
||||||
|
|
||||||
STRING_DRIVE_PARM "Chìba nevyhnutnì parameter jednotky.\n\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_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"
|
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_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\
|
STRING_YN_FORMAT "\nUPOZORNENIE: VćETKY éDAJE NA NIE_VYMENITE•NEJ DISKOVEJ\n\
|
||||||
DRIVE %C: WILL BE LOST!\nProceed with Format (A/N)? "
|
JEDNOTKE %C: BUDé STRATEN<45>!\nPokraźovaś s form tovanˇm (A/N)? "
|
||||||
|
|
||||||
STRING_YES_NO_FAQ "AN"
|
STRING_YES_NO_FAQ "AN"
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,19 @@ ULONG BaudRate = 115200;
|
||||||
|
|
||||||
BOOLEAN DebugStartOfLine = TRUE;
|
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)
|
VOID DebugInit(VOID)
|
||||||
{
|
{
|
||||||
if (DebugPort & RS232)
|
if (DebugPort & RS232)
|
||||||
|
|
|
@ -1,34 +1,19 @@
|
||||||
/*
|
/*
|
||||||
* KSUSER.DLL - ReactOS
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
*
|
* PROJECT: ReactOS Kernel Streaming
|
||||||
* Copyright 2008 Magnus Olsen and Dmitry Chapyshev
|
* FILE: dll/directx/ksuser/ksuser.c
|
||||||
*
|
* PURPOSE: KS USER functions
|
||||||
* This library is free software; you can redistribute it and/or
|
* PROGRAMMER: Magnus Olsen and Dmitry Chapyshev and Johannes Anderwald
|
||||||
* 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
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "ksuser.h"
|
#include "ksuser.h"
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
NTSTATUS NTAPI KsiCreateObjectType( HANDLE hHandle, PVOID guidstr, PVOID Buffer, ULONG BufferSize, ACCESS_MASK DesiredAccess, PHANDLE phHandle);
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
KsiCreateObjectType( HANDLE hHandle,
|
KsiCreateObjectType( HANDLE hHandle,
|
||||||
PVOID IID,
|
LPWSTR ObjectType,
|
||||||
PVOID Buffer,
|
PVOID Buffer,
|
||||||
ULONG BufferSize,
|
ULONG BufferSize,
|
||||||
ACCESS_MASK DesiredAccess,
|
ACCESS_MASK DesiredAccess,
|
||||||
|
@ -42,31 +27,56 @@ KsiCreateObjectType( HANDLE hHandle,
|
||||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
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);
|
pStr = HeapAlloc(GetProcessHeap(), 0, TotalSize);
|
||||||
if (!pStr)
|
if (!pStr)
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
{
|
||||||
pStr[0] = L'\\';
|
/* out of memory */
|
||||||
wcscpy(&pStr[1], (LPWSTR)IID);
|
return ERROR_NOT_ENOUGH_MEMORY;
|
||||||
pStr[Length+1] = L'\\';
|
}
|
||||||
memcpy(&pStr[Length+2], Buffer, BufferSize);
|
|
||||||
pStr[Length+3+(BufferSize/sizeof(WCHAR))] = L'\0';
|
|
||||||
|
|
||||||
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;
|
ObjectName.Length = ObjectName.MaximumLength = TotalSize;
|
||||||
|
|
||||||
|
/* initialize object attributes */
|
||||||
InitializeObjectAttributes(&ObjectAttributes, &ObjectName, OBJ_CASE_INSENSITIVE, hHandle, NULL);
|
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);
|
Status = NtCreateFile(phHandle, DesiredAccess, &ObjectAttributes, &IoStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL, 0, 1, 0, NULL, 0);
|
||||||
|
|
||||||
|
/* free buffer */
|
||||||
HeapFree(GetProcessHeap(), 0, pStr);
|
HeapFree(GetProcessHeap(), 0, pStr);
|
||||||
|
|
||||||
|
/* check for success */
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
/* failed zero handle */
|
||||||
*phHandle = INVALID_HANDLE_VALUE;
|
*phHandle = INVALID_HANDLE_VALUE;
|
||||||
|
|
||||||
|
/* convert error code */
|
||||||
Status = RtlNtStatusToDosError(Status);
|
Status = RtlNtStatusToDosError(Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* done */
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -256,7 +256,7 @@ LdrpQueryAppPaths(IN PCWSTR ImageName)
|
||||||
/* Copy it to the heap allocd memory */
|
/* Copy it to the heap allocd memory */
|
||||||
Path = RtlAllocateHeap(RtlGetProcessHeap(),
|
Path = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||||
0,
|
0,
|
||||||
wcslen(SearchPathBuffer) * sizeof(WCHAR));
|
(wcslen(SearchPathBuffer) + 1) * sizeof(WCHAR));
|
||||||
|
|
||||||
if (!Path)
|
if (!Path)
|
||||||
{
|
{
|
||||||
|
|
|
@ -143,18 +143,37 @@ LsaDelete(IN LSA_HANDLE ObjectHandle)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
WINAPI
|
WINAPI
|
||||||
LsaAddAccountRights(
|
LsaAddAccountRights(IN LSA_HANDLE PolicyHandle,
|
||||||
LSA_HANDLE PolicyHandle,
|
IN PSID AccountSid,
|
||||||
PSID AccountSid,
|
IN PLSA_UNICODE_STRING UserRights,
|
||||||
PLSA_UNICODE_STRING UserRights,
|
IN ULONG CountOfRights)
|
||||||
ULONG CountOfRights)
|
|
||||||
{
|
{
|
||||||
FIXME("(%p,%p,%p,0x%08x) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights);
|
LSAPR_USER_RIGHT_SET UserRightSet;
|
||||||
return STATUS_OBJECT_NAME_NOT_FOUND;
|
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;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -291,16 +311,16 @@ LsaDeleteTrustedDomain(IN LSA_HANDLE PolicyHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
WINAPI
|
WINAPI
|
||||||
LsaEnumerateAccountRights(
|
LsaEnumerateAccountRights(IN LSA_HANDLE PolicyHandle,
|
||||||
LSA_HANDLE PolicyHandle,
|
IN PSID AccountSid,
|
||||||
PSID AccountSid,
|
OUT PLSA_UNICODE_STRING *UserRights,
|
||||||
PLSA_UNICODE_STRING *UserRights,
|
OUT PULONG CountOfRights)
|
||||||
PULONG CountOfRights)
|
|
||||||
{
|
{
|
||||||
LSAPR_USER_RIGHT_SET UserRightsSet;
|
LSAPR_USER_RIGHT_SET UserRightsSet;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
@ -333,6 +353,7 @@ LsaEnumerateAccountRights(
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -385,17 +406,19 @@ LsaEnumerateTrustedDomainsEx(
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
WINAPI
|
WINAPI
|
||||||
LsaFreeMemory(PVOID Buffer)
|
LsaFreeMemory(IN PVOID Buffer)
|
||||||
{
|
{
|
||||||
TRACE("(%p)\n", Buffer);
|
TRACE("(%p)\n", Buffer);
|
||||||
return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
|
return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -446,6 +469,7 @@ LsaLookupNames(IN LSA_HANDLE PolicyHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
|
@ -470,8 +494,9 @@ LsaLookupNames2(
|
||||||
return STATUS_NONE_MAPPED;
|
return STATUS_NONE_MAPPED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unmplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
WINAPI
|
WINAPI
|
||||||
|
@ -504,6 +529,7 @@ LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -535,6 +561,7 @@ LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -591,6 +618,7 @@ LsaLookupSids(IN LSA_HANDLE PolicyHandle,
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* LsaNtStatusToWinError
|
* LsaNtStatusToWinError
|
||||||
*
|
*
|
||||||
|
@ -599,7 +627,8 @@ LsaLookupSids(IN LSA_HANDLE PolicyHandle,
|
||||||
*
|
*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
ULONG WINAPI
|
ULONG
|
||||||
|
WINAPI
|
||||||
LsaNtStatusToWinError(IN NTSTATUS Status)
|
LsaNtStatusToWinError(IN NTSTATUS Status)
|
||||||
{
|
{
|
||||||
TRACE("(%lx)\n", Status);
|
TRACE("(%lx)\n", Status);
|
||||||
|
@ -747,6 +776,7 @@ LsaQueryForestTrustInformation(
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
@ -782,20 +812,6 @@ LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle,
|
||||||
return Status;
|
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
|
* @unimplemented
|
||||||
|
@ -812,22 +828,78 @@ LsaQueryTrustedDomainInfo(
|
||||||
return STATUS_OBJECT_NAME_NOT_FOUND;
|
return STATUS_OBJECT_NAME_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
WINAPI
|
WINAPI
|
||||||
LsaRemoveAccountRights(
|
LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle,
|
||||||
LSA_HANDLE PolicyHandle,
|
IN PLSA_UNICODE_STRING TrustedDomainName,
|
||||||
PSID AccountSid,
|
IN TRUSTED_INFORMATION_CLASS InformationClass,
|
||||||
BOOLEAN AllRights,
|
OUT PVOID *Buffer)
|
||||||
PLSA_UNICODE_STRING UserRights,
|
|
||||||
ULONG CountOfRights)
|
|
||||||
{
|
{
|
||||||
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;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @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("Delphi Exception at address: %p\n", ExceptionRecord.ExceptionInformation[0]);
|
||||||
DPRINT1("Exception-Object: %p\n", ExceptionRecord.ExceptionInformation[1]);
|
DPRINT1("Exception-Object: %p\n", ExceptionRecord.ExceptionInformation[1]);
|
||||||
|
|
|
@ -2860,7 +2860,7 @@ Initialize(TcpipConfNotifyImpl * This)
|
||||||
}
|
}
|
||||||
pCurSettings->AutoconfigActive = pPerInfo->AutoconfigActive;
|
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,
|
PCWSTR pszFilter, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags,
|
||||||
HMACHINE hMachine)
|
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);
|
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];
|
WCHAR szResult[128];
|
||||||
LONGLONG Result;
|
LONGLONG Result;
|
||||||
#ifdef IOCTL_DISK_GET_LENGTH_INFO_IMPLEMENTED
|
|
||||||
HANDLE hVolume;
|
HANDLE hVolume;
|
||||||
DWORD BytesReturned = 0;
|
DWORD BytesReturned = 0;
|
||||||
|
|
||||||
|
@ -404,16 +403,13 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive)
|
||||||
if (hVolume != INVALID_HANDLE_VALUE)
|
if (hVolume != INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
ret = DeviceIoControl(hVolume, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, (LPVOID)&TotalNumberOfBytes, sizeof(ULARGE_INTEGER), &BytesReturned, NULL);
|
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);
|
SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);
|
||||||
|
|
||||||
CloseHandle(hVolume);
|
CloseHandle(hVolume);
|
||||||
}
|
}
|
||||||
TRACE("szResult %s hVOlume %p ret %d LengthInformation %ul Bytesreturned %d\n", debugstr_w(szResult), hVolume, ret, LengthInformation.Length.QuadPart, BytesReturned);
|
|
||||||
#else
|
TRACE("szResult %s hVOlume %p ret %d LengthInformation %ul Bytesreturned %d\n", debugstr_w(szResult), hVolume, ret, TotalNumberOfBytes.QuadPart, BytesReturned);
|
||||||
if (ret && StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
|
|
||||||
SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
|
if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
|
||||||
SendDlgItemMessageW(hwndDlg, 14003, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);
|
SendDlgItemMessageW(hwndDlg, 14003, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);
|
||||||
|
|
|
@ -46,6 +46,7 @@ add_importlibs(shlwapi
|
||||||
version
|
version
|
||||||
shell32
|
shell32
|
||||||
kernel32
|
kernel32
|
||||||
|
msvcrt
|
||||||
ntdll)
|
ntdll)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -154,49 +154,18 @@ CallMsgFilterA(
|
||||||
LPMSG lpMsg,
|
LPMSG lpMsg,
|
||||||
int nCode)
|
int nCode)
|
||||||
{
|
{
|
||||||
BOOL ret = FALSE;
|
MSG Msg;
|
||||||
|
if (NtCurrentTeb()->Win32ThreadInfo && IsThreadHooked(GetWin32ClientInfo()))
|
||||||
if (nCode != HCBT_CREATEWND) ret = NtUserCallMsgFilter((LPMSG) lpMsg, nCode);
|
{
|
||||||
else
|
if ( lpMsg->message & ~WM_MAXIMUM )
|
||||||
{
|
{
|
||||||
UNICODE_STRING usBuffer;
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
CBT_CREATEWNDA *cbtcwA = (CBT_CREATEWNDA *)lpMsg->lParam;
|
return FALSE;
|
||||||
CBT_CREATEWNDW cbtcwW;
|
|
||||||
CREATESTRUCTW csW;
|
|
||||||
MSG Msg;
|
|
||||||
|
|
||||||
Msg.hwnd = lpMsg->hwnd;
|
|
||||||
Msg.message = lpMsg->message;
|
|
||||||
Msg.time = lpMsg->time;
|
|
||||||
Msg.pt = lpMsg->pt;
|
|
||||||
Msg.wParam = lpMsg->wParam;
|
|
||||||
|
|
||||||
cbtcwW.lpcs = &csW;
|
|
||||||
cbtcwW.hwndInsertAfter = cbtcwA->hwndInsertAfter;
|
|
||||||
csW = *(CREATESTRUCTW *)cbtcwA->lpcs;
|
|
||||||
|
|
||||||
if (HIWORD(cbtcwA->lpcs->lpszName))
|
|
||||||
{
|
|
||||||
RtlCreateUnicodeStringFromAsciiz(&usBuffer,cbtcwA->lpcs->lpszName);
|
|
||||||
csW.lpszName = usBuffer.Buffer;
|
|
||||||
}
|
|
||||||
if (HIWORD(cbtcwA->lpcs->lpszClass))
|
|
||||||
{
|
|
||||||
RtlCreateUnicodeStringFromAsciiz(&usBuffer,cbtcwA->lpcs->lpszClass);
|
|
||||||
csW.lpszClass = usBuffer.Buffer;
|
|
||||||
}
|
|
||||||
Msg.lParam =(LPARAM) &cbtcwW;
|
|
||||||
|
|
||||||
ret = NtUserCallMsgFilter((LPMSG)&Msg, nCode);
|
|
||||||
|
|
||||||
lpMsg->time = Msg.time;
|
|
||||||
lpMsg->pt = Msg.pt;
|
|
||||||
|
|
||||||
cbtcwA->hwndInsertAfter = cbtcwW.hwndInsertAfter;
|
|
||||||
if (HIWORD(csW.lpszName)) HeapFree( GetProcessHeap(), 0, (LPWSTR)csW.lpszName );
|
|
||||||
if (HIWORD(csW.lpszClass)) HeapFree( GetProcessHeap(), 0, (LPWSTR)csW.lpszClass );
|
|
||||||
}
|
}
|
||||||
return ret;
|
RtlCopyMemory(&Msg, lpMsg, sizeof(MSG));
|
||||||
|
return NtUserCallMsgFilter( &Msg, nCode);
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -209,7 +178,18 @@ CallMsgFilterW(
|
||||||
LPMSG lpMsg,
|
LPMSG lpMsg,
|
||||||
int nCode)
|
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;
|
PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra = NULL;
|
||||||
KBDLLHOOKSTRUCT KeyboardLlData, *pKeyboardLlData;
|
KBDLLHOOKSTRUCT KeyboardLlData, *pKeyboardLlData;
|
||||||
MSLLHOOKSTRUCT MouseLlData, *pMouseLlData;
|
MSLLHOOKSTRUCT MouseLlData, *pMouseLlData;
|
||||||
MSG Msg, *pMsg;
|
MSG *pcMsg, *pMsg;
|
||||||
PMOUSEHOOKSTRUCT pMHook;
|
PMOUSEHOOKSTRUCT pMHook;
|
||||||
CWPSTRUCT CWP, *pCWP;
|
CWPSTRUCT CWP, *pCWP;
|
||||||
CWPRETSTRUCT CWPR, *pCWPR;
|
CWPRETSTRUCT CWPR, *pCWPR;
|
||||||
|
@ -471,18 +451,18 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
||||||
{
|
{
|
||||||
case WH_CBT:
|
case WH_CBT:
|
||||||
{
|
{
|
||||||
|
//ERR("WH_CBT: Code %d\n", Common->Code);
|
||||||
switch(Common->Code)
|
switch(Common->Code)
|
||||||
{
|
{
|
||||||
case HCBT_CREATEWND:
|
case HCBT_CREATEWND:
|
||||||
CbtCreatewndExtra = (PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS)
|
CbtCreatewndExtra = (PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS)
|
||||||
((PCHAR) Common + Common->lParam);
|
((PCHAR) Common + Common->lParam);
|
||||||
Csw = CbtCreatewndExtra->Cs;
|
RtlCopyMemory(&Csw, &CbtCreatewndExtra->Cs, sizeof(CREATESTRUCTW));
|
||||||
Csw.lpszName = CbtCreatewndExtra->Cs.lpszName;
|
|
||||||
Csw.lpszClass = CbtCreatewndExtra->Cs.lpszClass;
|
|
||||||
wParam = Common->wParam;
|
|
||||||
CbtCreatewndw.lpcs = &Csw;
|
CbtCreatewndw.lpcs = &Csw;
|
||||||
CbtCreatewndw.hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter;
|
CbtCreatewndw.hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter;
|
||||||
|
wParam = Common->wParam;
|
||||||
lParam = (LPARAM) &CbtCreatewndw;
|
lParam = (LPARAM) &CbtCreatewndw;
|
||||||
|
//ERR("HCBT_CREATEWND: hWnd 0x%x Name 0x%x Class 0x%x\n", Common->wParam, Csw.lpszName, Csw.lpszClass);
|
||||||
break;
|
break;
|
||||||
case HCBT_CLICKSKIPPED:
|
case HCBT_CLICKSKIPPED:
|
||||||
pMHook = (PMOUSEHOOKSTRUCT)((PCHAR) Common + Common->lParam);
|
pMHook = (PMOUSEHOOKSTRUCT)((PCHAR) Common + Common->lParam);
|
||||||
|
@ -524,7 +504,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
||||||
}
|
}
|
||||||
else
|
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)
|
switch(Common->Code)
|
||||||
{
|
{
|
||||||
|
@ -539,12 +519,13 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WH_KEYBOARD_LL:
|
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);
|
pKeyboardLlData = (PKBDLLHOOKSTRUCT)((PCHAR) Common + Common->lParam);
|
||||||
RtlCopyMemory(&KeyboardLlData, pKeyboardLlData, sizeof(KBDLLHOOKSTRUCT));
|
RtlCopyMemory(&KeyboardLlData, pKeyboardLlData, sizeof(KBDLLHOOKSTRUCT));
|
||||||
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &KeyboardLlData);
|
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &KeyboardLlData);
|
||||||
break;
|
break;
|
||||||
case WH_MOUSE_LL:
|
case WH_MOUSE_LL:
|
||||||
|
//ERR("WH_MOUSE_LL: Code %d, wParam %d\n",Common->Code,Common->wParam);
|
||||||
pMouseLlData = (PMSLLHOOKSTRUCT)((PCHAR) Common + Common->lParam);
|
pMouseLlData = (PMSLLHOOKSTRUCT)((PCHAR) Common + Common->lParam);
|
||||||
RtlCopyMemory(&MouseLlData, pMouseLlData, sizeof(MSLLHOOKSTRUCT));
|
RtlCopyMemory(&MouseLlData, pMouseLlData, sizeof(MSLLHOOKSTRUCT));
|
||||||
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &MouseLlData);
|
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &MouseLlData);
|
||||||
|
@ -562,7 +543,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
break;
|
break;
|
||||||
case WH_CALLWNDPROC:
|
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);
|
pCWP = (PCWPSTRUCT)((PCHAR) Common + Common->lParam);
|
||||||
RtlCopyMemory(&CWP, pCWP, sizeof(CWPSTRUCT));
|
RtlCopyMemory(&CWP, pCWP, sizeof(CWPSTRUCT));
|
||||||
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &CWP);
|
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);
|
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &CWPR);
|
||||||
break;
|
break;
|
||||||
case WH_MSGFILTER: /* All SEH support */
|
case WH_MSGFILTER: /* All SEH support */
|
||||||
ERR("WH_MSGFILTER: Code %d, wParam %d\n",Common->Code,Common->wParam);
|
|
||||||
case WH_SYSMSGFILTER:
|
case WH_SYSMSGFILTER:
|
||||||
case WH_GETMESSAGE:
|
case WH_GETMESSAGE:
|
||||||
pMsg = (PMSG)((PCHAR) Common + Common->lParam);
|
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
|
_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)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
|
@ -588,11 +570,14 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
if (!Hit && Common->HookId == WH_GETMESSAGE)
|
if (!Hit && Common->HookId == WH_GETMESSAGE)
|
||||||
RtlCopyMemory(pMsg, &Msg, sizeof(MSG));
|
RtlCopyMemory(pMsg, pcMsg, sizeof(MSG));
|
||||||
|
HeapFree( GetProcessHeap(), 0, pcMsg );
|
||||||
break;
|
break;
|
||||||
case WH_FOREGROUNDIDLE: /* <-- SEH support */
|
|
||||||
case WH_KEYBOARD:
|
case WH_KEYBOARD:
|
||||||
case WH_SHELL:
|
case WH_SHELL:
|
||||||
|
Result = Common->Proc(Common->Code, Common->wParam, Common->lParam);
|
||||||
|
break;
|
||||||
|
case WH_FOREGROUNDIDLE: /* <-- SEH support */
|
||||||
_SEH2_TRY
|
_SEH2_TRY
|
||||||
{
|
{
|
||||||
Result = Common->Proc(Common->Code, Common->wParam, Common->lParam);
|
Result = Common->Proc(Common->Code, Common->wParam, Common->lParam);
|
||||||
|
|
|
@ -171,7 +171,7 @@ WdmAudGetCapabilitiesByLegacy(
|
||||||
{
|
{
|
||||||
case MIXER_DEVICE_TYPE:
|
case MIXER_DEVICE_TYPE:
|
||||||
{
|
{
|
||||||
LPMIXERCAPS MixerCaps = (LPMIXERCAPS) Capabilities;
|
LPMIXERCAPSW MixerCaps = (LPMIXERCAPSW) Capabilities;
|
||||||
|
|
||||||
DeviceInfo.u.MixCaps.szPname[MAXPNAMELEN-1] = L'\0';
|
DeviceInfo.u.MixCaps.szPname[MAXPNAMELEN-1] = L'\0';
|
||||||
CopyWideString(MixerCaps->szPname, DeviceInfo.u.MixCaps.szPname);
|
CopyWideString(MixerCaps->szPname, DeviceInfo.u.MixCaps.szPname);
|
||||||
|
@ -185,13 +185,13 @@ WdmAudGetCapabilitiesByLegacy(
|
||||||
}
|
}
|
||||||
case WAVE_OUT_DEVICE_TYPE :
|
case WAVE_OUT_DEVICE_TYPE :
|
||||||
{
|
{
|
||||||
LPWAVEOUTCAPS WaveOutCaps = (LPWAVEOUTCAPS) Capabilities;
|
LPWAVEOUTCAPSW WaveOutCaps = (LPWAVEOUTCAPSW) Capabilities;
|
||||||
|
|
||||||
DeviceInfo.u.WaveOutCaps.szPname[MAXPNAMELEN-1] = L'\0';
|
DeviceInfo.u.WaveOutCaps.szPname[MAXPNAMELEN-1] = L'\0';
|
||||||
WaveOutCaps->wMid = DeviceInfo.u.WaveOutCaps.wMid;
|
WaveOutCaps->wMid = DeviceInfo.u.WaveOutCaps.wMid;
|
||||||
WaveOutCaps->wPid = DeviceInfo.u.WaveOutCaps.wPid;
|
WaveOutCaps->wPid = DeviceInfo.u.WaveOutCaps.wPid;
|
||||||
|
|
||||||
WaveOutCaps->vDriverVersion = 0x0001;
|
WaveOutCaps->vDriverVersion = DeviceInfo.u.WaveOutCaps.vDriverVersion;
|
||||||
CopyWideString(WaveOutCaps->szPname, DeviceInfo.u.WaveOutCaps.szPname);
|
CopyWideString(WaveOutCaps->szPname, DeviceInfo.u.WaveOutCaps.szPname);
|
||||||
|
|
||||||
WaveOutCaps->dwFormats = DeviceInfo.u.WaveOutCaps.dwFormats;
|
WaveOutCaps->dwFormats = DeviceInfo.u.WaveOutCaps.dwFormats;
|
||||||
|
@ -208,7 +208,7 @@ WdmAudGetCapabilitiesByLegacy(
|
||||||
WaveInCaps->wMid = DeviceInfo.u.WaveInCaps.wMid;
|
WaveInCaps->wMid = DeviceInfo.u.WaveInCaps.wMid;
|
||||||
WaveInCaps->wPid = DeviceInfo.u.WaveInCaps.wPid;
|
WaveInCaps->wPid = DeviceInfo.u.WaveInCaps.wPid;
|
||||||
|
|
||||||
WaveInCaps->vDriverVersion = 0x0001;
|
WaveInCaps->vDriverVersion = DeviceInfo.u.WaveInCaps.vDriverVersion;
|
||||||
CopyWideString(WaveInCaps->szPname, DeviceInfo.u.WaveInCaps.szPname);
|
CopyWideString(WaveInCaps->szPname, DeviceInfo.u.WaveInCaps.szPname);
|
||||||
|
|
||||||
WaveInCaps->dwFormats = DeviceInfo.u.WaveInCaps.dwFormats;
|
WaveInCaps->dwFormats = DeviceInfo.u.WaveInCaps.dwFormats;
|
||||||
|
@ -216,6 +216,34 @@ WdmAudGetCapabilitiesByLegacy(
|
||||||
WaveInCaps->wReserved1 = 0;
|
WaveInCaps->wReserved1 = 0;
|
||||||
break;
|
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;
|
return MMSYSERR_NOERROR;
|
||||||
|
|
|
@ -655,17 +655,46 @@ WdmAudSetWaveStateByMMixer(
|
||||||
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
|
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
|
||||||
IN BOOL bStart)
|
IN BOOL bStart)
|
||||||
{
|
{
|
||||||
if (bStart)
|
MMDEVICE_TYPE DeviceType;
|
||||||
|
PSOUND_DEVICE SoundDevice;
|
||||||
|
MMRESULT Result;
|
||||||
|
|
||||||
|
Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice);
|
||||||
|
SND_ASSERT( Result == MMSYSERR_NOERROR );
|
||||||
|
|
||||||
|
|
||||||
|
Result = GetSoundDeviceType(SoundDevice, &DeviceType);
|
||||||
|
SND_ASSERT( Result == MMSYSERR_NOERROR );
|
||||||
|
|
||||||
|
if (DeviceType == WAVE_IN_DEVICE_TYPE || DeviceType == WAVE_OUT_DEVICE_TYPE)
|
||||||
{
|
{
|
||||||
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
|
if (bStart)
|
||||||
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
|
{
|
||||||
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_RUN);
|
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
|
||||||
|
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
|
||||||
|
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_RUN);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
|
||||||
|
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
|
||||||
|
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_STOP);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (DeviceType == MIDI_IN_DEVICE_TYPE || DeviceType == MIDI_OUT_DEVICE_TYPE)
|
||||||
{
|
{
|
||||||
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
|
if (bStart)
|
||||||
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
|
{
|
||||||
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_STOP);
|
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;
|
return MMSYSERR_NOERROR;
|
||||||
|
|
|
@ -90,6 +90,12 @@ PopulateWdmDeviceList(
|
||||||
FuncTable.CommitWaveBuffer = WriteFileEx_Remixer;
|
FuncTable.CommitWaveBuffer = WriteFileEx_Remixer;
|
||||||
#endif
|
#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);
|
SetSoundDeviceFunctionTable(SoundDevice, &FuncTable);
|
||||||
}
|
}
|
||||||
|
|
|
@ -661,6 +661,11 @@ KsProbeStreamIrp(
|
||||||
|
|
||||||
if (Irp->RequestorMode == KernelMode || Irp->AssociatedIrp.SystemBuffer)
|
if (Irp->RequestorMode == KernelMode || Irp->AssociatedIrp.SystemBuffer)
|
||||||
{
|
{
|
||||||
|
if (Irp->RequestorMode == KernelMode)
|
||||||
|
{
|
||||||
|
/* no need to allocate stream header */
|
||||||
|
Irp->AssociatedIrp.SystemBuffer = Irp->UserBuffer;
|
||||||
|
}
|
||||||
AllocMdl:
|
AllocMdl:
|
||||||
/* check if alloc mdl flag is passed */
|
/* check if alloc mdl flag is passed */
|
||||||
if (!(ProbeFlags & KSPROBE_ALLOCATEMDL))
|
if (!(ProbeFlags & KSPROBE_ALLOCATEMDL))
|
||||||
|
@ -724,7 +729,16 @@ ProbeMdl:
|
||||||
Mdl = Irp->MdlAddress;
|
Mdl = Irp->MdlAddress;
|
||||||
|
|
||||||
/* determine operation */
|
/* 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
|
do
|
||||||
{
|
{
|
||||||
|
@ -859,7 +873,8 @@ ProbeMdl:
|
||||||
if (StreamHeader->FrameExtent)
|
if (StreamHeader->FrameExtent)
|
||||||
{
|
{
|
||||||
/* allocate an mdl */
|
/* 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)
|
if (!Mdl)
|
||||||
{
|
{
|
||||||
/* not enough memory */
|
/* not enough memory */
|
||||||
|
@ -880,18 +895,14 @@ ProbeMdl:
|
||||||
|
|
||||||
/* now probe the allocated mdl's */
|
/* now probe the allocated mdl's */
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("Status %x\n", Status);
|
DPRINT("Status %x\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
goto ProbeMdl;
|
goto ProbeMdl;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
// HACK for MS PORTCLS
|
|
||||||
HeaderSize = Length;
|
|
||||||
#endif
|
|
||||||
/* probe user mode buffers */
|
/* probe user mode buffers */
|
||||||
if (Length && ( (!HeaderSize) || (Length % HeaderSize == 0) || ((ProbeFlags & KSPROBE_ALLOWFORMATCHANGE) && (Length == sizeof(KSSTREAM_HEADER))) ) )
|
if (Length && ( (!HeaderSize) || (Length % HeaderSize == 0) || ((ProbeFlags & KSPROBE_ALLOWFORMATCHANGE) && (Length == sizeof(KSSTREAM_HEADER))) ) )
|
||||||
{
|
{
|
||||||
|
@ -904,6 +915,9 @@ ProbeMdl:
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
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
|
_SEH2_TRY
|
||||||
{
|
{
|
||||||
if (ProbeFlags & KSPROBE_STREAMWRITE)
|
if (ProbeFlags & KSPROBE_STREAMWRITE)
|
||||||
|
@ -917,6 +931,9 @@ ProbeMdl:
|
||||||
{
|
{
|
||||||
/* stream reads means writing */
|
/* stream reads means writing */
|
||||||
ProbeForWrite(Irp->UserBuffer, Length, sizeof(UCHAR));
|
ProbeForWrite(Irp->UserBuffer, Length, sizeof(UCHAR));
|
||||||
|
|
||||||
|
/* set input operation flags */
|
||||||
|
Irp->Flags |= IRP_INPUT_OPERATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy stream buffer */
|
/* copy stream buffer */
|
||||||
|
@ -1360,7 +1377,7 @@ KsRemoveIrpFromCancelableQueue(
|
||||||
PLIST_ENTRY CurEntry;
|
PLIST_ENTRY CurEntry;
|
||||||
KIRQL OldIrql;
|
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 */
|
/* check parameters */
|
||||||
if (!QueueHead || !SpinLock)
|
if (!QueueHead || !SpinLock)
|
||||||
|
@ -1619,19 +1636,32 @@ KsAddIrpToCancelableQueue(
|
||||||
PIO_STACK_LOCATION IoStack;
|
PIO_STACK_LOCATION IoStack;
|
||||||
KIRQL OldLevel;
|
KIRQL OldLevel;
|
||||||
|
|
||||||
DPRINT("KsAddIrpToCancelableQueue QueueHead %p SpinLock %p Irp %p ListLocation %x DriverCancel %p\n", QueueHead, SpinLock, Irp, ListLocation, DriverCancel);
|
|
||||||
/* check for required parameters */
|
/* check for required parameters */
|
||||||
if (!QueueHead || !SpinLock || !Irp)
|
if (!QueueHead || !SpinLock || !Irp)
|
||||||
return;
|
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)
|
if (!DriverCancel)
|
||||||
{
|
{
|
||||||
/* default to KsCancelRoutine */
|
/* default to KsCancelRoutine */
|
||||||
DriverCancel = KsCancelRoutine;
|
DriverCancel = KsCancelRoutine;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get current irp stack */
|
|
||||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
|
||||||
|
|
||||||
/* acquire spinlock */
|
/* acquire spinlock */
|
||||||
KeAcquireSpinLock(SpinLock, &OldLevel);
|
KeAcquireSpinLock(SpinLock, &OldLevel);
|
||||||
|
@ -1720,22 +1750,24 @@ FindMatchingCreateItem(
|
||||||
PLIST_ENTRY Entry;
|
PLIST_ENTRY Entry;
|
||||||
PCREATE_ITEM_ENTRY CreateItemEntry;
|
PCREATE_ITEM_ENTRY CreateItemEntry;
|
||||||
UNICODE_STRING RefString;
|
UNICODE_STRING RefString;
|
||||||
|
LPWSTR pStr;
|
||||||
|
|
||||||
|
/* get terminator */
|
||||||
|
pStr = wcschr(Buffer, L'\\');
|
||||||
|
|
||||||
#ifndef MS_KSUSER
|
/* sanity check */
|
||||||
/* remove '\' slash */
|
ASSERT(pStr != NULL);
|
||||||
Buffer++;
|
|
||||||
BufferSize -= sizeof(WCHAR);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!wcschr(Buffer, L'\\'))
|
if (pStr == Buffer)
|
||||||
{
|
{
|
||||||
RtlInitUnicodeString(&RefString, Buffer);
|
// skip slash
|
||||||
|
RtlInitUnicodeString(&RefString, ++pStr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// request is for pin / node / allocator
|
||||||
RefString.Buffer = Buffer;
|
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 */
|
/* point to first entry */
|
||||||
|
@ -1963,12 +1995,6 @@ KsSetMajorFunctionHandler(
|
||||||
IN ULONG MajorFunction)
|
IN ULONG MajorFunction)
|
||||||
{
|
{
|
||||||
DPRINT("KsSetMajorFunctionHandler Function %x\n", MajorFunction);
|
DPRINT("KsSetMajorFunctionHandler Function %x\n", MajorFunction);
|
||||||
#if 1
|
|
||||||
// HACK
|
|
||||||
// for MS PORTCLS
|
|
||||||
//
|
|
||||||
DriverObject->MajorFunction[IRP_MJ_CREATE] = KspCreate;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch ( MajorFunction )
|
switch ( MajorFunction )
|
||||||
{
|
{
|
||||||
|
@ -2006,7 +2032,7 @@ KsDispatchIrp(
|
||||||
PKSIDEVICE_HEADER DeviceHeader;
|
PKSIDEVICE_HEADER DeviceHeader;
|
||||||
PDEVICE_EXTENSION DeviceExtension;
|
PDEVICE_EXTENSION DeviceExtension;
|
||||||
|
|
||||||
//DPRINT("KsDispatchIrp DeviceObject %p Irp %p\n", DeviceObject, Irp);
|
DPRINT("KsDispatchIrp DeviceObject %p Irp %p\n", DeviceObject, Irp);
|
||||||
|
|
||||||
/* get device extension */
|
/* get device extension */
|
||||||
DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||||
|
|
|
@ -95,7 +95,7 @@ KspCopyCreateRequest(
|
||||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
|
||||||
/* get object class length */
|
/* get object class length */
|
||||||
ObjectLength = (wcslen(ObjectClass) + 2) * sizeof(WCHAR);
|
ObjectLength = (wcslen(ObjectClass) + 1) * sizeof(WCHAR);
|
||||||
|
|
||||||
/* check for minium length requirement */
|
/* check for minium length requirement */
|
||||||
if (ObjectLength + *Size > IoStack->FileObject->FileName.MaximumLength)
|
if (ObjectLength + *Size > IoStack->FileObject->FileName.MaximumLength)
|
||||||
|
|
|
@ -27,7 +27,7 @@ KspCreateObjectType(
|
||||||
|
|
||||||
/* calculate request length */
|
/* calculate request length */
|
||||||
Name.Length = 0;
|
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);
|
Name.MaximumLength += sizeof(WCHAR);
|
||||||
/* acquire request buffer */
|
/* acquire request buffer */
|
||||||
Name.Buffer = AllocateItem(NonPagedPool, Name.MaximumLength);
|
Name.Buffer = AllocateItem(NonPagedPool, Name.MaximumLength);
|
||||||
|
@ -38,11 +38,10 @@ KspCreateObjectType(
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
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 pins the parent is the reference string used in registration
|
||||||
* For clocks it is full path for pin\{ClockGuid}\ClockCreateParams
|
* For clocks it is full path for pin\{ClockGuid}\ClockCreateParams
|
||||||
*/
|
*/
|
||||||
RtlAppendUnicodeToString(&Name, L"\\");
|
|
||||||
RtlAppendUnicodeToString(&Name, ObjectType);
|
RtlAppendUnicodeToString(&Name, ObjectType);
|
||||||
RtlAppendUnicodeToString(&Name, L"\\");
|
RtlAppendUnicodeToString(&Name, L"\\");
|
||||||
/* append create parameters */
|
/* append create parameters */
|
||||||
|
|
|
@ -2808,6 +2808,53 @@ Return Value:
|
||||||
// Fall through and let the class driver process the request.
|
// 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:
|
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_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 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_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_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}};
|
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_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_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_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_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}};
|
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_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_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_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 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}};
|
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_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_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 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_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_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}};
|
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 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 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_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_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 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_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
|
/// undocumented guids
|
||||||
|
|
||||||
|
|
|
@ -319,9 +319,11 @@ DECLARE_INTERFACE_(IIrpQueue, IUnknown)
|
||||||
DEFINE_ABSTRACT_UNKNOWN()
|
DEFINE_ABSTRACT_UNKNOWN()
|
||||||
|
|
||||||
STDMETHOD_(NTSTATUS, Init)(THIS_
|
STDMETHOD_(NTSTATUS, Init)(THIS_
|
||||||
IN KSPIN_CONNECT *ConnectDetails,
|
IN PKSPIN_CONNECT ConnectDetails,
|
||||||
|
IN PKSPIN_DESCRIPTOR Descriptor,
|
||||||
IN ULONG FrameSize,
|
IN ULONG FrameSize,
|
||||||
IN ULONG Alignment) PURE;
|
IN ULONG Alignment,
|
||||||
|
IN ULONG TagSupportEnabled) PURE;
|
||||||
|
|
||||||
STDMETHOD_(NTSTATUS, AddMapping)(THIS_
|
STDMETHOD_(NTSTATUS, AddMapping)(THIS_
|
||||||
IN PIRP Irp,
|
IN PIRP Irp,
|
||||||
|
@ -360,9 +362,11 @@ DECLARE_INTERFACE_(IIrpQueue, IUnknown)
|
||||||
|
|
||||||
#define IMP_IIrpQueue \
|
#define IMP_IIrpQueue \
|
||||||
STDMETHODIMP_(NTSTATUS) Init(THIS_ \
|
STDMETHODIMP_(NTSTATUS) Init(THIS_ \
|
||||||
IN KSPIN_CONNECT *ConnectDetails, \
|
IN PKSPIN_CONNECT ConnectDetails, \
|
||||||
|
IN PKSPIN_DESCRIPTOR Descriptor, \
|
||||||
IN ULONG FrameSize, \
|
IN ULONG FrameSize, \
|
||||||
IN ULONG Alignment); \
|
IN ULONG Alignment, \
|
||||||
|
IN ULONG TagSupportEnabled); \
|
||||||
\
|
\
|
||||||
STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
|
STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
|
||||||
IN PIRP Irp, \
|
IN PIRP Irp, \
|
||||||
|
|
|
@ -232,21 +232,21 @@ CInterruptSync::Connect()
|
||||||
if (IsListEmpty(&m_ServiceRoutines))
|
if (IsListEmpty(&m_ServiceRoutines))
|
||||||
return STATUS_UNSUCCESSFUL;
|
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,
|
Status = IoConnectInterrupt(&m_Interrupt,
|
||||||
IInterruptServiceRoutine,
|
IInterruptServiceRoutine,
|
||||||
(PVOID)this,
|
(PVOID)this,
|
||||||
&m_Lock,
|
NULL, //&m_Lock,
|
||||||
Descriptor->u.Interrupt.Vector,
|
Descriptor->u.Interrupt.Vector,
|
||||||
(KIRQL)Descriptor->u.Interrupt.Level,
|
(KIRQL)Descriptor->u.Interrupt.Level,
|
||||||
(KIRQL)Descriptor->u.Interrupt.Level,
|
(KIRQL)Descriptor->u.Interrupt.Level,
|
||||||
(KINTERRUPT_MODE)(Descriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED),
|
(KINTERRUPT_MODE)(Descriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED),
|
||||||
(Descriptor->Flags != CM_RESOURCE_INTERRUPT_LATCHED),
|
(Descriptor->ShareDisposition != CmResourceShareDeviceExclusive),
|
||||||
Descriptor->u.Interrupt.Affinity,
|
Descriptor->u.Interrupt.Affinity,
|
||||||
FALSE);
|
FALSE);
|
||||||
|
|
||||||
DPRINT("CInterruptSync::Connect result %x\n", Status);
|
DPRINT1("CInterruptSync::Connect result %x\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,31 +35,40 @@ public:
|
||||||
virtual ~CIrpQueue(){}
|
virtual ~CIrpQueue(){}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
volatile ULONG m_CurrentOffset;
|
|
||||||
LONG m_NumMappings;
|
|
||||||
ULONG m_NumDataAvailable;
|
|
||||||
PKSPIN_CONNECT m_ConnectDetails;
|
PKSPIN_CONNECT m_ConnectDetails;
|
||||||
|
PKSPIN_DESCRIPTOR m_Descriptor;
|
||||||
|
|
||||||
KSPIN_LOCK m_IrpListLock;
|
KSPIN_LOCK m_IrpListLock;
|
||||||
LIST_ENTRY m_IrpList;
|
LIST_ENTRY m_IrpList;
|
||||||
LIST_ENTRY m_FreeIrpList;
|
LIST_ENTRY m_FreeIrpList;
|
||||||
PIRP m_Irp;
|
|
||||||
|
|
||||||
ULONG m_OutOfMapping;
|
ULONG m_OutOfMapping;
|
||||||
ULONG m_MaxFrameSize;
|
ULONG m_MaxFrameSize;
|
||||||
ULONG m_Alignment;
|
ULONG m_Alignment;
|
||||||
|
ULONG m_TagSupportEnabled;
|
||||||
|
ULONG m_NumDataAvailable;
|
||||||
|
volatile ULONG m_CurrentOffset;
|
||||||
|
|
||||||
|
PIRP m_Irp;
|
||||||
|
|
||||||
|
|
||||||
LONG m_Ref;
|
LONG m_Ref;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define OFFSET_HEADERINDEX (0)
|
typedef struct
|
||||||
#define OFFSET_STREAMHEADER (2)
|
{
|
||||||
#define OFFSET_HEADERCOUNT (3)
|
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 STREAM_DATA_OFFSET (0)
|
||||||
#define STREAMHEADER_COUNT(Irp) (PtrToUlong(Irp->Tail.Overlay.DriverContext[OFFSET_HEADERCOUNT]))
|
|
||||||
#define STREAMHEADER_CURRENT(Irp) (Irp->Tail.Overlay.DriverContext[OFFSET_STREAMHEADER])
|
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -81,13 +90,17 @@ CIrpQueue::QueryInterface(
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
CIrpQueue::Init(
|
CIrpQueue::Init(
|
||||||
IN KSPIN_CONNECT *ConnectDetails,
|
IN PKSPIN_CONNECT ConnectDetails,
|
||||||
|
IN PKSPIN_DESCRIPTOR Descriptor,
|
||||||
IN ULONG FrameSize,
|
IN ULONG FrameSize,
|
||||||
IN ULONG Alignment)
|
IN ULONG Alignment,
|
||||||
|
IN ULONG TagSupportEnabled)
|
||||||
{
|
{
|
||||||
m_ConnectDetails = ConnectDetails;
|
m_ConnectDetails = ConnectDetails;
|
||||||
|
m_Descriptor = Descriptor;
|
||||||
m_MaxFrameSize = FrameSize;
|
m_MaxFrameSize = FrameSize;
|
||||||
m_Alignment = Alignment;
|
m_Alignment = Alignment;
|
||||||
|
m_TagSupportEnabled = TagSupportEnabled;
|
||||||
|
|
||||||
InitializeListHead(&m_IrpList);
|
InitializeListHead(&m_IrpList);
|
||||||
InitializeListHead(&m_FreeIrpList);
|
InitializeListHead(&m_FreeIrpList);
|
||||||
|
@ -103,110 +116,158 @@ CIrpQueue::AddMapping(
|
||||||
OUT PULONG Data)
|
OUT PULONG Data)
|
||||||
{
|
{
|
||||||
PKSSTREAM_HEADER Header;
|
PKSSTREAM_HEADER Header;
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_UNSUCCESSFUL;
|
||||||
PIO_STACK_LOCATION IoStack;
|
PIO_STACK_LOCATION IoStack;
|
||||||
ULONG NumHeaders, NumData, Index;
|
ULONG Index, Length;
|
||||||
PMDL Mdl;
|
PMDL Mdl;
|
||||||
|
PKSSTREAM_DATA StreamData;
|
||||||
|
|
||||||
PC_ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
|
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
|
// get current irp stack location
|
||||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
|
||||||
if (!Irp->MdlAddress)
|
// lets probe the irp
|
||||||
|
if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_WRITE_STREAM)
|
||||||
{
|
{
|
||||||
// ioctl from KsStudio
|
// probe IOCTL_KS_WRITE_STREAM
|
||||||
// Wdmaud already probes buffers, therefore no need to probe it again
|
Status = KsProbeStreamIrp(Irp, KSSTREAM_WRITE | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS, 0);
|
||||||
// probe the stream irp
|
}
|
||||||
if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_WRITE_STREAM)
|
else if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_READ_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);
|
Status = KsProbeStreamIrp(Irp, KSSTREAM_READ | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS, 0);
|
||||||
else
|
}
|
||||||
PC_ASSERT(0);
|
|
||||||
|
|
||||||
// check for success
|
// check for success
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("KsProbeStreamIrp failed with %x\n", Status);
|
// irp probing failed
|
||||||
return Status;
|
FreeItem(StreamData, TAG_PORTCLASS);
|
||||||
}
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get first stream header
|
// get first stream header
|
||||||
|
Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
|
||||||
|
|
||||||
if (Irp->RequestorMode == UserMode)
|
// store header
|
||||||
Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
|
StreamData->CurStreamHeader = Header;
|
||||||
else
|
|
||||||
Header = (PKSSTREAM_HEADER)Irp->UserBuffer;
|
|
||||||
|
|
||||||
// sanity check
|
// sanity check
|
||||||
PC_ASSERT(Header);
|
PC_ASSERT(Header);
|
||||||
|
|
||||||
// calculate num headers
|
// first calculate the numbers of stream headers
|
||||||
NumHeaders = IoStack->Parameters.DeviceIoControl.OutputBufferLength / Header->Size;
|
Length = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
|
||||||
|
|
||||||
// assume headers of same length
|
do
|
||||||
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
|
/* subtract size */
|
||||||
PC_ASSERT(Header);
|
Length -= Header->Size;
|
||||||
PC_ASSERT(Mdl);
|
|
||||||
|
|
||||||
if (Irp->RequestorMode == UserMode)
|
/* increment header count */
|
||||||
|
StreamData->StreamHeaderCount++;
|
||||||
|
|
||||||
|
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
|
||||||
{
|
{
|
||||||
Header->Data = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
|
// irp sink
|
||||||
|
StreamData->TotalStreamData += Header->DataUsed;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// irp source
|
||||||
|
StreamData->TotalStreamData += Header->FrameExtent;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Header->Data)
|
/* move to next header */
|
||||||
{
|
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
|
||||||
// insufficient resources
|
|
||||||
ExFreePool(Irp->AssociatedIrp.SystemBuffer);
|
|
||||||
Irp->AssociatedIrp.SystemBuffer = NULL;
|
|
||||||
// complete and forget request
|
|
||||||
Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
|
|
||||||
Irp->IoStatus.Information = 0;
|
|
||||||
|
|
||||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
}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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
// done
|
||||||
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 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;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
// increment num mappings
|
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
|
||||||
InterlockedIncrement(&m_NumMappings);
|
{
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
|
||||||
// increment available data
|
// move to next header / mdl
|
||||||
InterlockedExchangeAdd((PLONG)&m_NumDataAvailable,
|
Mdl = Mdl->Next;
|
||||||
(max(Header->DataUsed, Header->FrameExtent)));
|
|
||||||
|
|
||||||
NumData += max(Header->DataUsed, Header->FrameExtent);
|
|
||||||
|
|
||||||
// move to next header
|
|
||||||
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
|
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
|
||||||
|
|
||||||
// move to next mdl
|
|
||||||
Mdl = Mdl->Next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("StreamHeaders %u NumData %u FrameSize %u NumDataAvailable %u\n", NumHeaders, NumData, m_MaxFrameSize, m_NumDataAvailable);
|
// store stream data
|
||||||
*Data = NumData;
|
Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET] = (PVOID)StreamData;
|
||||||
|
|
||||||
|
*Data = StreamData->TotalStreamData;
|
||||||
|
|
||||||
// mark irp as pending
|
// mark irp as pending
|
||||||
IoMarkIrpPending(Irp);
|
IoMarkIrpPending(Irp);
|
||||||
|
@ -218,7 +279,7 @@ CIrpQueue::AddMapping(
|
||||||
m_OutOfMapping = FALSE;
|
m_OutOfMapping = FALSE;
|
||||||
|
|
||||||
// done
|
// done
|
||||||
return Status;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -229,8 +290,7 @@ CIrpQueue::GetMapping(
|
||||||
{
|
{
|
||||||
PIRP Irp;
|
PIRP Irp;
|
||||||
ULONG Offset;
|
ULONG Offset;
|
||||||
//PIO_STACK_LOCATION IoStack;
|
PKSSTREAM_DATA StreamData;
|
||||||
PKSSTREAM_HEADER StreamHeader;
|
|
||||||
|
|
||||||
// check if there is an irp in the partially processed
|
// check if there is an irp in the partially processed
|
||||||
if (m_Irp)
|
if (m_Irp)
|
||||||
|
@ -247,6 +307,7 @@ CIrpQueue::GetMapping(
|
||||||
m_Irp->IoStatus.Status = STATUS_CANCELLED;
|
m_Irp->IoStatus.Status = STATUS_CANCELLED;
|
||||||
IoCompleteRequest(m_Irp, IO_NO_INCREMENT);
|
IoCompleteRequest(m_Irp, IO_NO_INCREMENT);
|
||||||
m_Irp = Irp = NULL;
|
m_Irp = Irp = NULL;
|
||||||
|
m_CurrentOffset = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -259,26 +320,32 @@ CIrpQueue::GetMapping(
|
||||||
if (!Irp)
|
if (!Irp)
|
||||||
{
|
{
|
||||||
// no irp buffer available
|
// no irp buffer available
|
||||||
DPRINT("NoIrp\n");
|
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get stream header
|
// get stream data
|
||||||
StreamHeader = (PKSSTREAM_HEADER)Irp->Tail.Overlay.DriverContext[2];
|
StreamData = (PKSSTREAM_DATA)Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
|
||||||
|
|
||||||
// sanity check
|
// sanity check
|
||||||
PC_ASSERT(StreamHeader);
|
PC_ASSERT(StreamData);
|
||||||
|
|
||||||
// store buffersize
|
// get buffer size
|
||||||
if (StreamHeader->DataUsed)
|
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
|
||||||
*BufferSize = StreamHeader->DataUsed - Offset;
|
{
|
||||||
|
// sink pin
|
||||||
|
*BufferSize = StreamData->CurStreamHeader->DataUsed - Offset;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
*BufferSize = StreamHeader->FrameExtent - Offset;
|
{
|
||||||
|
// source pin
|
||||||
|
*BufferSize = StreamData->CurStreamHeader->FrameExtent - Offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
// sanity check
|
||||||
PC_ASSERT(*BufferSize);
|
PC_ASSERT(*BufferSize);
|
||||||
|
|
||||||
// store buffer
|
// store buffer
|
||||||
*Buffer = &((PUCHAR)StreamHeader->Data)[Offset];
|
*Buffer = &((PUCHAR)StreamData->Data[StreamData->StreamHeaderIndex])[Offset];
|
||||||
|
|
||||||
// unset flag that no irps are available
|
// unset flag that no irps are available
|
||||||
m_OutOfMapping = FALSE;
|
m_OutOfMapping = FALSE;
|
||||||
|
@ -291,107 +358,119 @@ NTAPI
|
||||||
CIrpQueue::UpdateMapping(
|
CIrpQueue::UpdateMapping(
|
||||||
IN ULONG BytesWritten)
|
IN ULONG BytesWritten)
|
||||||
{
|
{
|
||||||
PKSSTREAM_HEADER StreamHeader;
|
PKSSTREAM_DATA StreamData;
|
||||||
ULONG Size, NumData, Index;
|
ULONG Size;
|
||||||
|
PIO_STACK_LOCATION IoStack;
|
||||||
if (!m_Irp)
|
|
||||||
{
|
|
||||||
// silence buffer was used
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get stream header
|
|
||||||
StreamHeader = (PKSSTREAM_HEADER)STREAMHEADER_CURRENT(m_Irp);
|
|
||||||
|
|
||||||
// sanity check
|
// 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
|
// add to current offset
|
||||||
InterlockedExchangeAdd((volatile PLONG)&m_CurrentOffset, (LONG)BytesWritten);
|
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
|
// decrement available data counter
|
||||||
m_NumDataAvailable -= BytesWritten;
|
m_NumDataAvailable -= BytesWritten;
|
||||||
|
|
||||||
if (StreamHeader->DataUsed)
|
// get audio buffer size
|
||||||
Size = StreamHeader->DataUsed;
|
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_OUT)
|
||||||
|
Size = StreamData->CurStreamHeader->FrameExtent;
|
||||||
else
|
else
|
||||||
Size = StreamHeader->FrameExtent;
|
Size = StreamData->CurStreamHeader->DataUsed;
|
||||||
|
|
||||||
|
// sanity check
|
||||||
PC_ASSERT(Size);
|
PC_ASSERT(Size);
|
||||||
|
|
||||||
if (m_CurrentOffset >= 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
|
// move to next stream header
|
||||||
m_Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(STREAMHEADER_INDEX(m_Irp) + 1);
|
StreamData->CurStreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamData->CurStreamHeader + StreamData->CurStreamHeader->Size);
|
||||||
|
|
||||||
// get next stream header
|
// increment stream header index
|
||||||
StreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamHeader + StreamHeader->Size);
|
StreamData->StreamHeaderIndex++;
|
||||||
|
|
||||||
// store next stream header
|
// reset offset
|
||||||
STREAMHEADER_CURRENT(m_Irp) = (PVOID)StreamHeader;
|
|
||||||
|
|
||||||
// reset current offset
|
|
||||||
m_CurrentOffset = 0;
|
m_CurrentOffset = 0;
|
||||||
|
|
||||||
// done
|
// done
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// irp has been processed completly
|
//
|
||||||
|
// all stream buffers have been played
|
||||||
NumData = 0;
|
// check if this is a looped buffer
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_ConnectDetails->Interface.Id == KSINTERFACE_STANDARD_LOOPED_STREAMING)
|
if (m_ConnectDetails->Interface.Id == KSINTERFACE_STANDARD_LOOPED_STREAMING)
|
||||||
{
|
{
|
||||||
// looped streaming repeat the buffers untill
|
// looped streaming repeat the buffers untill
|
||||||
// the caller decides to stop the streams
|
// the caller decides to stop the streams
|
||||||
|
|
||||||
// reset stream header index
|
// 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
|
// re-insert irp
|
||||||
KsAddIrpToCancelableQueue(&m_IrpList, &m_IrpListLock, m_Irp, KsListEntryTail, NULL);
|
KsAddIrpToCancelableQueue(&m_IrpList, &m_IrpListLock, m_Irp, KsListEntryTail, NULL);
|
||||||
|
|
||||||
// clear current irp
|
// clear current irp
|
||||||
m_Irp = NULL;
|
m_Irp = NULL;
|
||||||
|
|
||||||
// reset offset
|
// reset offset
|
||||||
m_CurrentOffset = 0;
|
m_CurrentOffset = 0;
|
||||||
// increment available data
|
|
||||||
InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, NumData);
|
|
||||||
// done
|
// done
|
||||||
return;
|
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.Status = STATUS_SUCCESS;
|
||||||
m_Irp->IoStatus.Information = NumData;
|
|
||||||
|
// store operation length
|
||||||
|
m_Irp->IoStatus.Information = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
|
||||||
|
|
||||||
// complete the request
|
// complete the request
|
||||||
IoCompleteRequest(m_Irp, IO_SOUND_INCREMENT);
|
IoCompleteRequest(m_Irp, IO_SOUND_INCREMENT);
|
||||||
|
|
||||||
// remove irp as it is complete
|
// remove irp as it is complete
|
||||||
m_Irp = NULL;
|
m_Irp = NULL;
|
||||||
|
|
||||||
|
// reset offset
|
||||||
m_CurrentOffset = 0;
|
m_CurrentOffset = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -408,6 +487,8 @@ BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
CIrpQueue::CancelBuffers()
|
CIrpQueue::CancelBuffers()
|
||||||
{
|
{
|
||||||
|
//TODO: own cancel routine
|
||||||
|
|
||||||
// is there an active irp
|
// is there an active irp
|
||||||
if (m_Irp)
|
if (m_Irp)
|
||||||
{
|
{
|
||||||
|
@ -419,8 +500,7 @@ CIrpQueue::CancelBuffers()
|
||||||
|
|
||||||
// cancel all irps
|
// cancel all irps
|
||||||
KsCancelIo(&m_IrpList, &m_IrpListLock);
|
KsCancelIo(&m_IrpList, &m_IrpListLock);
|
||||||
// reset number of mappings
|
|
||||||
m_NumMappings = 0;
|
|
||||||
// reset number of data available
|
// reset number of data available
|
||||||
m_NumDataAvailable = 0;
|
m_NumDataAvailable = 0;
|
||||||
|
|
||||||
|
@ -437,44 +517,83 @@ CIrpQueue::GetMappingWithTag(
|
||||||
OUT PULONG ByteCount,
|
OUT PULONG ByteCount,
|
||||||
OUT PULONG Flags)
|
OUT PULONG Flags)
|
||||||
{
|
{
|
||||||
PKSSTREAM_HEADER StreamHeader;
|
PKSSTREAM_DATA StreamData;
|
||||||
PIRP Irp;
|
|
||||||
|
|
||||||
*Flags = 0;
|
/* sanity checks */
|
||||||
PC_ASSERT(Tag != NULL);
|
PC_ASSERT(Tag != NULL);
|
||||||
|
PC_ASSERT(PhysicalAddress);
|
||||||
|
PC_ASSERT(VirtualAddress);
|
||||||
|
PC_ASSERT(ByteCount);
|
||||||
|
PC_ASSERT(Flags);
|
||||||
|
|
||||||
// get an irp from the queue
|
if (!m_Irp)
|
||||||
Irp = KsRemoveIrpFromCancelableQueue(&m_IrpList, &m_IrpListLock, KsListEntryHead, KsAcquireAndRemoveOnlySingleItem);
|
{
|
||||||
|
// get an irp from the queue
|
||||||
|
m_Irp = KsRemoveIrpFromCancelableQueue(&m_IrpList, &m_IrpListLock, KsListEntryHead, KsAcquireAndRemoveOnlySingleItem);
|
||||||
|
}
|
||||||
|
|
||||||
// check if there is an irp
|
// check if there is an irp
|
||||||
if (!Irp)
|
if (!m_Irp)
|
||||||
{
|
{
|
||||||
// no irp available
|
// no irp available
|
||||||
m_OutOfMapping = TRUE;
|
m_OutOfMapping = TRUE;
|
||||||
return STATUS_NOT_FOUND;
|
return STATUS_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME support more than one stream header
|
// get stream data
|
||||||
PC_ASSERT(STREAMHEADER_COUNT(Irp) == 1);
|
StreamData = (PKSSTREAM_DATA)m_Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
|
||||||
|
|
||||||
// HACK get stream header
|
// sanity check
|
||||||
StreamHeader = (PKSSTREAM_HEADER)Irp->Tail.Overlay.DriverContext[2];
|
PC_ASSERT(StreamData->StreamHeaderIndex < StreamData->StreamHeaderCount);
|
||||||
|
|
||||||
// store mapping in the free list
|
// setup mapping
|
||||||
ExInterlockedInsertTailList(&m_FreeIrpList, &Irp->Tail.Overlay.ListEntry, &m_IrpListLock);
|
*PhysicalAddress = MmGetPhysicalAddress(StreamData->Data[StreamData->StreamHeaderIndex]);
|
||||||
|
*VirtualAddress = StreamData->Data[StreamData->StreamHeaderIndex];
|
||||||
// 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;
|
|
||||||
|
|
||||||
// store tag in irp
|
// 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
|
// done
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
@ -487,34 +606,123 @@ CIrpQueue::ReleaseMappingWithTag(
|
||||||
{
|
{
|
||||||
PIRP Irp;
|
PIRP Irp;
|
||||||
PLIST_ENTRY CurEntry;
|
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
|
// remove irp from used list
|
||||||
CurEntry = ExInterlockedRemoveHeadList(&m_FreeIrpList, &m_IrpListLock);
|
CurEntry = ExInterlockedRemoveHeadList(&m_FreeIrpList, &m_IrpListLock);
|
||||||
|
|
||||||
// sanity check
|
// sanity check
|
||||||
PC_ASSERT(CurEntry);
|
PC_ASSERT(CurEntry);
|
||||||
|
|
||||||
// get irp from list entry
|
// get irp from list entry
|
||||||
Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
|
Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
|
||||||
|
|
||||||
// HACK get stream header
|
// get stream data
|
||||||
StreamHeader = (PKSSTREAM_HEADER)Irp->Tail.Overlay.DriverContext[2];
|
StreamData = (PKSSTREAM_DATA)Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
|
||||||
|
|
||||||
// driver must release items in the same order
|
// sanity check
|
||||||
PC_ASSERT(Irp->Tail.Overlay.DriverContext[3] == Tag);
|
PC_ASSERT(StreamData->StreamHeaderIndex + 1 == StreamData->StreamHeaderCount);
|
||||||
|
|
||||||
// irp has been processed completly
|
// check if the released mapping is one of these
|
||||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
for(Index = 0; Index < StreamData->StreamHeaderCount; Index++)
|
||||||
|
{
|
||||||
|
if (StreamData->Tags[Index] == Tag)
|
||||||
|
{
|
||||||
|
// mark mapping as released
|
||||||
|
StreamData->Tags[Index] = NULL;
|
||||||
|
|
||||||
// frame extend contains the original request size, DataUsed contains the real buffer size
|
// done
|
||||||
// is different when kmixer performs channel conversion, upsampling etc
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Irp->IoStatus.Information = StreamHeader->FrameExtent;
|
// 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
|
||||||
|
|
||||||
// complete the request
|
// reset stream header index
|
||||||
IoCompleteRequest(Irp, IO_SOUND_INCREMENT);
|
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;
|
||||||
|
|
||||||
|
// store operation length
|
||||||
|
Irp->IoStatus.Information = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
|
||||||
|
|
||||||
|
// complete the request
|
||||||
|
IoCompleteRequest(Irp, IO_SOUND_INCREMENT);
|
||||||
|
}
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -542,38 +750,18 @@ CIrpQueue::GetAcquiredTagRange(
|
||||||
{
|
{
|
||||||
KIRQL OldLevel;
|
KIRQL OldLevel;
|
||||||
BOOLEAN Ret = FALSE;
|
BOOLEAN Ret = FALSE;
|
||||||
PIRP Irp;
|
//PIRP Irp;
|
||||||
PLIST_ENTRY CurEntry;
|
//PLIST_ENTRY CurEntry;
|
||||||
|
//PKSSTREAM_DATA StreamData;
|
||||||
|
|
||||||
|
// lock list
|
||||||
KeAcquireSpinLock(&m_IrpListLock, &OldLevel);
|
KeAcquireSpinLock(&m_IrpListLock, &OldLevel);
|
||||||
|
|
||||||
if (!IsListEmpty(&m_FreeIrpList))
|
// initialize to zero
|
||||||
{
|
*FirstTag = NULL;
|
||||||
// get first entry
|
*LastTag = NULL;
|
||||||
CurEntry = RemoveHeadList(&m_FreeIrpList);
|
|
||||||
// get irp from list entry
|
|
||||||
Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
|
|
||||||
|
|
||||||
// get tag of first acquired buffer
|
UNIMPLEMENTED;
|
||||||
*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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// release lock
|
// release lock
|
||||||
KeReleaseSpinLock(&m_IrpListLock, OldLevel);
|
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))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IrpQueue_Init failed with %x\n", Status);
|
DPRINT("IrpQueue_Init failed with %x\n", Status);
|
||||||
|
|
|
@ -699,15 +699,15 @@ CPortPinWaveCyclic::UpdateCommonBuffer(
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Gap = Position - m_CommonBufferOffset;
|
Gap = Position - m_CommonBufferOffset;
|
||||||
if (Gap > m_FrameSize)
|
if (Gap > BufferLength)
|
||||||
{
|
{
|
||||||
// insert silence samples
|
// 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_Stream->Silence((PUCHAR)m_CommonBuffer + m_CommonBufferOffset, BufferLength);
|
||||||
|
|
||||||
m_CommonBufferOffset += BufferLength;
|
m_CommonBufferOffset += BufferLength;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
BytesToCopy = min(BufferLength, BufferSize);
|
BytesToCopy = min(BufferLength, BufferSize);
|
||||||
|
@ -758,10 +758,10 @@ CPortPinWaveCyclic::UpdateCommonBufferOverlap(
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Gap = m_CommonBufferSize - m_CommonBufferOffset + Position;
|
Gap = m_CommonBufferSize - m_CommonBufferOffset + Position;
|
||||||
if (Gap > m_FrameSize)
|
if (Gap > BufferLength)
|
||||||
{
|
{
|
||||||
// insert silence samples
|
// 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_Stream->Silence((PUCHAR)m_CommonBuffer + m_CommonBufferOffset, BufferLength);
|
||||||
|
|
||||||
m_CommonBufferOffset += BufferLength;
|
m_CommonBufferOffset += BufferLength;
|
||||||
|
@ -1290,7 +1290,7 @@ CPortPinWaveCyclic::Init(
|
||||||
PC_ASSERT(NT_SUCCESS(Status));
|
PC_ASSERT(NT_SUCCESS(Status));
|
||||||
PC_ASSERT(m_FrameSize);
|
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 */
|
/* set up allocator framing */
|
||||||
|
@ -1303,7 +1303,7 @@ CPortPinWaveCyclic::Init(
|
||||||
|
|
||||||
m_Stream->Silence(m_CommonBuffer, m_CommonBufferSize);
|
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))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
m_IrpQueue->Release();
|
m_IrpQueue->Release();
|
||||||
|
|
|
@ -919,7 +919,7 @@ CPortPinWavePci::Init(
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize irp queue
|
// 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))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
// this should never happen
|
// this should never happen
|
||||||
|
|
|
@ -283,7 +283,7 @@ NTAPI
|
||||||
CPortPinWaveRT::HandleKsStream(
|
CPortPinWaveRT::HandleKsStream(
|
||||||
IN PIRP Irp)
|
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;
|
return STATUS_PENDING;
|
||||||
}
|
}
|
||||||
|
@ -587,7 +587,7 @@ CPortPinWaveRT::Init(
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = m_IrpQueue->Init(ConnectDetails, 0, 0);
|
Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, 0, 0, FALSE);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -624,7 +624,7 @@ CPortPinWaveRT::Init(
|
||||||
// delay of 10 milisec
|
// delay of 10 milisec
|
||||||
m_Delay = Int32x32To64(10, -10000);
|
m_Delay = Int32x32To64(10, -10000);
|
||||||
|
|
||||||
Status = m_Stream->AllocateAudioBuffer(16384 * 11, &m_Mdl, &m_CommonBufferSize, &m_CommonBufferOffset, &m_CacheType);
|
Status = m_Stream->AllocateAudioBuffer(16384 * 11, &m_Mdl, &m_CommonBufferSize, &m_CommonBufferOffset, &m_CacheType);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("AllocateAudioBuffer failed with %x\n", Status);
|
DPRINT("AllocateAudioBuffer failed with %x\n", Status);
|
||||||
|
|
|
@ -39,10 +39,8 @@ public:
|
||||||
virtual ~CPortWaveCyclic(){}
|
virtual ~CPortWaveCyclic(){}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BOOL m_bInitialized;
|
|
||||||
PDEVICE_OBJECT m_pDeviceObject;
|
PDEVICE_OBJECT m_pDeviceObject;
|
||||||
PMINIPORTWAVECYCLIC m_pMiniport;
|
PMINIPORTWAVECYCLIC m_pMiniport;
|
||||||
PRESOURCELIST m_pResourceList;
|
|
||||||
PPINCOUNT m_pPinCount;
|
PPINCOUNT m_pPinCount;
|
||||||
PPOWERNOTIFY m_pPowerNotify;
|
PPOWERNOTIFY m_pPowerNotify;
|
||||||
PPCFILTER_DESCRIPTOR m_pDescriptor;
|
PPCFILTER_DESCRIPTOR m_pDescriptor;
|
||||||
|
@ -202,12 +200,6 @@ CPortWaveCyclic::GetDeviceProperty(
|
||||||
{
|
{
|
||||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
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);
|
return IoGetDeviceProperty(m_pDeviceObject, DeviceRegistryProperty, BufferLength, PropertyBuffer, ReturnLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,12 +220,6 @@ CPortWaveCyclic::Init(
|
||||||
DPRINT("IPortWaveCyclic_Init entered %p\n", this);
|
DPRINT("IPortWaveCyclic_Init entered %p\n", this);
|
||||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
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);
|
Status = UnknownMiniport->QueryInterface(IID_IMiniportWaveCyclic, (PVOID*)&Miniport);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -244,22 +230,13 @@ CPortWaveCyclic::Init(
|
||||||
// Initialize port object
|
// Initialize port object
|
||||||
m_pMiniport = Miniport;
|
m_pMiniport = Miniport;
|
||||||
m_pDeviceObject = DeviceObject;
|
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);
|
Status = Miniport->Init(UnknownAdapter, ResourceList, this);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IMiniportWaveCyclic_Init failed with %x\n", Status);
|
DPRINT("IMiniportWaveCyclic_Init failed with %x\n", Status);
|
||||||
Miniport->Release();
|
Miniport->Release();
|
||||||
m_bInitialized = FALSE;
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,7 +247,6 @@ CPortWaveCyclic::Init(
|
||||||
{
|
{
|
||||||
DPRINT("failed to get description\n");
|
DPRINT("failed to get description\n");
|
||||||
Miniport->Release();
|
Miniport->Release();
|
||||||
m_bInitialized = FALSE;
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,7 +270,6 @@ CPortWaveCyclic::Init(
|
||||||
{
|
{
|
||||||
DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
|
DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
|
||||||
Miniport->Release();
|
Miniport->Release();
|
||||||
m_bInitialized = FALSE;
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,11 +310,6 @@ CPortWaveCyclic::NewRegistryKey(
|
||||||
{
|
{
|
||||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
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);
|
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);
|
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);
|
Status = PcDmaMasterDescription(ResourceList, (Dma32BitAddresses | Dma64BitAddresses), Dma32BitAddresses, 0, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, 0, &DeviceDescription);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -397,12 +361,6 @@ CPortWaveCyclic::NewSlaveDmaChannel(
|
||||||
|
|
||||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||||
|
|
||||||
if (!m_bInitialized)
|
|
||||||
{
|
|
||||||
DPRINT("IPortWaveCyclic_fnNewSlaveDmaChannel called w/o initialized\n");
|
|
||||||
return STATUS_UNSUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME
|
// FIXME
|
||||||
// Check for F-Type DMA Support
|
// Check for F-Type DMA Support
|
||||||
//
|
//
|
||||||
|
|
|
@ -43,8 +43,6 @@ protected:
|
||||||
|
|
||||||
PMINIPORTWAVEPCI m_Miniport;
|
PMINIPORTWAVEPCI m_Miniport;
|
||||||
PDEVICE_OBJECT m_pDeviceObject;
|
PDEVICE_OBJECT m_pDeviceObject;
|
||||||
BOOL m_bInitialized;
|
|
||||||
PRESOURCELIST m_pResourceList;
|
|
||||||
PSERVICEGROUP m_ServiceGroup;
|
PSERVICEGROUP m_ServiceGroup;
|
||||||
PPINCOUNT m_pPinCount;
|
PPINCOUNT m_pPinCount;
|
||||||
PPOWERNOTIFY m_pPowerNotify;
|
PPOWERNOTIFY m_pPowerNotify;
|
||||||
|
@ -233,12 +231,6 @@ CPortWavePci::Init(
|
||||||
this, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
|
this, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
|
||||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
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);
|
Status = UnknownMiniport->QueryInterface(IID_IMiniportWavePci, (PVOID*)&Miniport);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -249,30 +241,20 @@ CPortWavePci::Init(
|
||||||
// Initialize port object
|
// Initialize port object
|
||||||
m_Miniport = Miniport;
|
m_Miniport = Miniport;
|
||||||
m_pDeviceObject = DeviceObject;
|
m_pDeviceObject = DeviceObject;
|
||||||
m_bInitialized = TRUE;
|
|
||||||
m_pResourceList = ResourceList;
|
|
||||||
InitializeListHead(&m_EventList);
|
InitializeListHead(&m_EventList);
|
||||||
KeInitializeSpinLock(&m_EventListLock);
|
KeInitializeSpinLock(&m_EventListLock);
|
||||||
|
|
||||||
// increment reference on miniport adapter
|
// increment reference on miniport adapter
|
||||||
Miniport->AddRef();
|
Miniport->AddRef();
|
||||||
|
|
||||||
|
|
||||||
if (ResourceList)
|
|
||||||
{
|
|
||||||
// increment reference on resource list
|
|
||||||
ResourceList->AddRef();
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = Miniport->Init(UnknownAdapter, ResourceList, this, &ServiceGroup);
|
Status = Miniport->Init(UnknownAdapter, ResourceList, this, &ServiceGroup);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IPortWavePci_fnInit failed with %x\n", Status);
|
DPRINT("IPortWavePci_fnInit failed with %x\n", Status);
|
||||||
m_bInitialized = FALSE;
|
|
||||||
// release reference on miniport adapter
|
// release reference on miniport adapter
|
||||||
Miniport->Release();
|
Miniport->Release();
|
||||||
// increment reference on resource list
|
|
||||||
ResourceList->Release();
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,7 +264,6 @@ CPortWavePci::Init(
|
||||||
{
|
{
|
||||||
DPRINT("failed to get description\n");
|
DPRINT("failed to get description\n");
|
||||||
Miniport->Release();
|
Miniport->Release();
|
||||||
m_bInitialized = FALSE;
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,7 +288,6 @@ CPortWavePci::Init(
|
||||||
{
|
{
|
||||||
DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
|
DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
|
||||||
Miniport->Release();
|
Miniport->Release();
|
||||||
m_bInitialized = FALSE;
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,12 +341,6 @@ CPortWavePci::NewRegistryKey(
|
||||||
DPRINT("IPortWavePci_fnNewRegistryKey entered\n");
|
DPRINT("IPortWavePci_fnNewRegistryKey entered\n");
|
||||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
||||||
|
|
||||||
if (!m_bInitialized)
|
|
||||||
{
|
|
||||||
DPRINT("IPortWavePci_fnNewRegistryKey called w/o initiazed\n");
|
|
||||||
return STATUS_UNSUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return PcNewRegistryKey(OutRegistryKey,
|
return PcNewRegistryKey(OutRegistryKey,
|
||||||
OuterUnknown,
|
OuterUnknown,
|
||||||
RegistryKeyType,
|
RegistryKeyType,
|
||||||
|
@ -389,12 +363,6 @@ CPortWavePci::GetDeviceProperty(
|
||||||
DPRINT("IPortWavePci_fnGetDeviceProperty entered\n");
|
DPRINT("IPortWavePci_fnGetDeviceProperty entered\n");
|
||||||
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
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);
|
return IoGetDeviceProperty(m_pDeviceObject, DeviceRegistryProperty, BufferLength, PropertyBuffer, ReturnLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,8 +402,6 @@ NTAPI
|
||||||
CPortWavePci::Notify(
|
CPortWavePci::Notify(
|
||||||
IN PSERVICEGROUP ServiceGroup)
|
IN PSERVICEGROUP ServiceGroup)
|
||||||
{
|
{
|
||||||
//IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
|
|
||||||
|
|
||||||
//DPRINT("IPortWavePci_fnNotify entered %p, ServiceGroup %p\n", This, ServiceGroup);
|
//DPRINT("IPortWavePci_fnNotify entered %p, ServiceGroup %p\n", This, ServiceGroup);
|
||||||
|
|
||||||
if (ServiceGroup)
|
if (ServiceGroup)
|
||||||
|
@ -492,8 +458,6 @@ NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
CPortWavePci::ReleaseChildren()
|
CPortWavePci::ReleaseChildren()
|
||||||
{
|
{
|
||||||
//IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblSubDevice);
|
|
||||||
|
|
||||||
UNIMPLEMENTED
|
UNIMPLEMENTED
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#include "interfaces.hpp"
|
#include "interfaces.hpp"
|
||||||
#include <ks.h>
|
#include <ks.h>
|
||||||
#include <ksmedia.h>
|
#include <ksmedia.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
//#include <intrin.h>
|
//#include <intrin.h>
|
||||||
|
|
||||||
#define TAG_PORTCLASS 'SLCP'
|
#define TAG_PORTCLASS 'SLCP'
|
||||||
|
|
|
@ -27,6 +27,12 @@ WdmAudControlOpen(
|
||||||
return WdmAudControlOpenWave(DeviceObject, Irp, DeviceInfo, ClientInfo);
|
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));
|
return SetIrpIoStatus(Irp, STATUS_NOT_SUPPORTED, sizeof(WDMAUD_DEVICE_INFO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +61,15 @@ WdmAudControlDeviceType(
|
||||||
{
|
{
|
||||||
Result = WdmAudGetWaveOutDeviceCount();
|
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 */
|
/* store result count */
|
||||||
DeviceInfo->DeviceCount = Result;
|
DeviceInfo->DeviceCount = Result;
|
||||||
|
@ -121,6 +136,10 @@ WdmAudCapabilities(
|
||||||
{
|
{
|
||||||
Status = WdmAudWaveCapabilities(DeviceObject, DeviceInfo, ClientInfo, DeviceExtension);
|
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));
|
return SetIrpIoStatus(Irp, Status, sizeof(WDMAUD_DEVICE_INFO));
|
||||||
}
|
}
|
||||||
|
@ -219,80 +238,38 @@ WdmAudGetDeviceInterface(
|
||||||
/* get device interface string input length */
|
/* get device interface string input length */
|
||||||
Size = DeviceInfo->u.Interface.DeviceInterfaceStringSize;
|
Size = DeviceInfo->u.Interface.DeviceInterfaceStringSize;
|
||||||
|
|
||||||
if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE || DeviceInfo->DeviceType == WAVE_OUT_DEVICE_TYPE)
|
/* get mixer info */
|
||||||
|
Status = WdmAudGetPnpNameByIndexAndType(DeviceInfo->DeviceIndex, DeviceInfo->DeviceType, &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)
|
||||||
{
|
{
|
||||||
/* get wave info */
|
/* store device interface size */
|
||||||
Status = WdmAudGetPnpNameByIndexAndType(DeviceInfo->DeviceIndex, DeviceInfo->DeviceType, &Device);
|
DeviceInfo->u.Interface.DeviceInterfaceStringSize = Length;
|
||||||
|
|
||||||
/* 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
FreeItem(Device);
|
|
||||||
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
|
|
||||||
}
|
}
|
||||||
else if (DeviceInfo->DeviceType == MIXER_DEVICE_TYPE)
|
else if (Size < Length)
|
||||||
{
|
{
|
||||||
if (DeviceInfo->DeviceIndex >= WdmAudGetMixerDeviceCount())
|
/* buffer too small */
|
||||||
{
|
DeviceInfo->u.Interface.DeviceInterfaceStringSize = Length;
|
||||||
/* invalid device id */
|
return SetIrpIoStatus(Irp, STATUS_BUFFER_OVERFLOW, sizeof(WDMAUD_DEVICE_INFO));
|
||||||
return SetIrpIoStatus(Irp, STATUS_INVALID_PARAMETER, sizeof(WDMAUD_DEVICE_INFO));
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
Status = WdmAudGetMixerPnpNameByIndex(DeviceInfo->DeviceIndex, &Device);
|
//FIXME SEH
|
||||||
/* check for success */
|
RtlMoveMemory(DeviceInfo->u.Interface.DeviceInterfaceString, Device, Length);
|
||||||
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));
|
FreeItem(Device);
|
||||||
|
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -407,6 +384,93 @@ WdmAudDeviceControl(
|
||||||
return SetIrpIoStatus(Irp, STATUS_NOT_IMPLEMENTED, 0);
|
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
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -421,6 +485,20 @@ WdmAudReadWrite(
|
||||||
ULONG Length;
|
ULONG Length;
|
||||||
PMDL Mdl;
|
PMDL Mdl;
|
||||||
BOOLEAN Read = TRUE;
|
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 */
|
/* get current irp stack location */
|
||||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
@ -437,6 +515,11 @@ WdmAudReadWrite(
|
||||||
/* store outputbuffer length */
|
/* store outputbuffer length */
|
||||||
IoStack->Parameters.DeviceIoControl.OutputBufferLength = 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 */
|
/* store mdl address */
|
||||||
Mdl = Irp->MdlAddress;
|
Mdl = Irp->MdlAddress;
|
||||||
|
|
||||||
|
@ -464,9 +547,6 @@ WdmAudReadWrite(
|
||||||
return SetIrpIoStatus(Irp, Status, 0);
|
return SetIrpIoStatus(Irp, Status, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now free the mdl */
|
|
||||||
IoFreeMdl(Mdl);
|
|
||||||
|
|
||||||
/* get device info */
|
/* get device info */
|
||||||
DeviceInfo = (PWDMAUD_DEVICE_INFO)Irp->AssociatedIrp.SystemBuffer;
|
DeviceInfo = (PWDMAUD_DEVICE_INFO)Irp->AssociatedIrp.SystemBuffer;
|
||||||
ASSERT(DeviceInfo);
|
ASSERT(DeviceInfo);
|
||||||
|
@ -499,6 +579,9 @@ WdmAudReadWrite(
|
||||||
IoStack->Parameters.Write.Length = Length;
|
IoStack->Parameters.Write.Length = Length;
|
||||||
IoStack->MajorFunction = IRP_MJ_WRITE;
|
IoStack->MajorFunction = IRP_MJ_WRITE;
|
||||||
|
|
||||||
|
IoSetCompletionRoutine(Irp, IoCompletion, (PVOID)Context, TRUE, TRUE, TRUE);
|
||||||
|
|
||||||
|
|
||||||
/* mark irp as pending */
|
/* mark irp as pending */
|
||||||
// IoMarkIrpPending(Irp);
|
// IoMarkIrpPending(Irp);
|
||||||
/* call the driver */
|
/* call the driver */
|
||||||
|
|
|
@ -42,6 +42,8 @@ typedef struct
|
||||||
WAVEOUTCAPSW WaveOutCaps;
|
WAVEOUTCAPSW WaveOutCaps;
|
||||||
AUXCAPSW AuxCaps;
|
AUXCAPSW AuxCaps;
|
||||||
WAVEINCAPSW WaveInCaps;
|
WAVEINCAPSW WaveInCaps;
|
||||||
|
MIDIINCAPSW MidiInCaps;
|
||||||
|
MIDIOUTCAPSW MidiOutCaps;
|
||||||
ULONGLONG Position;
|
ULONGLONG Position;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
|
|
@ -612,13 +612,16 @@ WdmAudGetWaveOutDeviceCount()
|
||||||
return MMixerGetWaveOutCount(&MixerContext);
|
return MMixerGetWaveOutCount(&MixerContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
ULONG
|
||||||
WdmAudGetMixerPnpNameByIndex(
|
WdmAudGetMidiInDeviceCount()
|
||||||
IN ULONG DeviceIndex,
|
|
||||||
OUT LPWSTR * Device)
|
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED
|
return MMixerGetMidiInCount(&MixerContext);
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
}
|
||||||
|
|
||||||
|
ULONG
|
||||||
|
WdmAudGetMidiOutDeviceCount()
|
||||||
|
{
|
||||||
|
return MMixerGetWaveOutCount(&MixerContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -627,10 +630,26 @@ WdmAudGetPnpNameByIndexAndType(
|
||||||
IN SOUND_DEVICE_TYPE DeviceType,
|
IN SOUND_DEVICE_TYPE DeviceType,
|
||||||
OUT LPWSTR *DevicePath)
|
OUT LPWSTR *DevicePath)
|
||||||
{
|
{
|
||||||
if (MMixerGetWaveDevicePath(&MixerContext, DeviceType == WAVE_IN_DEVICE_TYPE, DeviceIndex, DevicePath) == MM_STATUS_SUCCESS)
|
if (DeviceType == WAVE_IN_DEVICE_TYPE || DeviceType == WAVE_OUT_DEVICE_TYPE)
|
||||||
return STATUS_SUCCESS;
|
{
|
||||||
else
|
if (MMixerGetWaveDevicePath(&MixerContext, DeviceType == WAVE_IN_DEVICE_TYPE, DeviceIndex, DevicePath) == MM_STATUS_SUCCESS)
|
||||||
return STATUS_UNSUCCESSFUL;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -640,7 +659,7 @@ WdmAudWaveCapabilities(
|
||||||
IN PWDMAUD_CLIENT ClientInfo,
|
IN PWDMAUD_CLIENT ClientInfo,
|
||||||
IN PWDMAUD_DEVICE_EXTENSION DeviceExtension)
|
IN PWDMAUD_DEVICE_EXTENSION DeviceExtension)
|
||||||
{
|
{
|
||||||
MIXER_STATUS Status;
|
MIXER_STATUS Status = MM_STATUS_UNSUCCESSFUL;
|
||||||
|
|
||||||
if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE)
|
if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE)
|
||||||
{
|
{
|
||||||
|
@ -652,10 +671,31 @@ WdmAudWaveCapabilities(
|
||||||
/* get capabilities */
|
/* get capabilities */
|
||||||
Status = MMixerWaveOutCapabilities(&MixerContext, DeviceInfo->DeviceIndex, &DeviceInfo->u.WaveOutCaps);
|
Status = MMixerWaveOutCapabilities(&MixerContext, DeviceInfo->DeviceIndex, &DeviceInfo->u.WaveOutCaps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Status == MM_STATUS_SUCCESS)
|
||||||
|
return STATUS_SUCCESS;
|
||||||
else
|
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);
|
/* get capabilities */
|
||||||
return STATUS_UNSUCCESSFUL;
|
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)
|
if (Status == MM_STATUS_SUCCESS)
|
||||||
|
@ -737,3 +777,26 @@ WdmAudControlOpenWave(
|
||||||
else
|
else
|
||||||
return SetIrpIoStatus(Irp, STATUS_NOT_SUPPORTED, sizeof(WDMAUD_DEVICE_INFO));
|
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