Sync trunk (rr49606)

svn path=/branches/cmake-bringup/; revision=49607
This commit is contained in:
Timo Kreuzer 2010-11-16 13:43:39 +00:00
commit 406dfdbc87
324 changed files with 15065 additions and 2892 deletions

View file

@ -1,6 +1,6 @@
/* TRANSLATOR : Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR.: 30-01-2008
* LAST CHANGE: 31-05-2010
* LAST CHANGE: 17-09-2010
* ---------------------------------------
* TODO:
* pridanie navigaèných znaèiek "&" ?
@ -545,9 +545,9 @@ END
STRINGTABLE DISCARDABLE
BEGIN
IDS_ENERGY_15_C_CALORIES "15 °C calories"
IDS_ENERGY_BTUS "British Thermal Units"
IDS_ENERGY_BTUS "Britské termálne jednotky"
IDS_ENERGY_ERGS "Ergs"
IDS_ENERGY_EVS "Electron-Volts"
IDS_ENERGY_EVS "Elektron-Volty"
IDS_ENERGY_FOOT_POUNDS "Foot-Pounds"
IDS_ENERGY_IT_CALORIES "International Table calories"
IDS_ENERGY_IT_KILOCALORIES "International Table kilocalories"
@ -593,7 +593,7 @@ BEGIN
IDS_LENGTH_MILLIMETERS "Milimetre"
IDS_LENGTH_NAUTICAL_MILES "Námorné míle"
IDS_LENGTH_NIEU "Nieu"
IDS_LENGTH_PARSECS "Parsecy"
IDS_LENGTH_PARSECS "Parseky"
IDS_LENGTH_PICAS "Picas"
IDS_LENGTH_RI_JAPAN "Ri (Japonsko)"
IDS_LENGTH_RI_KOREA "Ri (Kórea)"
@ -626,10 +626,10 @@ STRINGTABLE DISCARDABLE
BEGIN
IDS_PRESSURE_ATMOSPHERES "Atmosféry"
IDS_PRESSURE_BARS "Bary"
IDS_PRESSURE_HECTOPASCALS "Hektopascals"
IDS_PRESSURE_KILOPASCALS "Kilopascals"
IDS_PRESSURE_MM_OF_MERCURY "Millimeters of mercury"
IDS_PRESSURE_PASCALS "Pascals"
IDS_PRESSURE_HECTOPASCALS "Hektopascaly"
IDS_PRESSURE_KILOPASCALS "Kilopascaly"
IDS_PRESSURE_MM_OF_MERCURY "Milimetre ortuti"
IDS_PRESSURE_PASCALS "Pascaly"
IDS_PRESSURE_PSI "Libry na štvorcový palec"
END

View file

@ -25,6 +25,17 @@
HINSTANCE hInstance;
HANDLE ProcessHeap;
int LoadStringAndOem(HINSTANCE hInst,
UINT uID,
LPTSTR szNode,
int Siz
)
{
TCHAR szTmp[25];
int res = LoadString(hInst, uID, szTmp, sizeof(szTmp));
CharToOem(szTmp, szNode);
return(res);
}
LPTSTR GetNodeTypeName(UINT NodeType)
{
@ -33,27 +44,27 @@ LPTSTR GetNodeTypeName(UINT NodeType)
switch (NodeType)
{
case 1:
if (!LoadString(hInstance, IDS_BCAST, szNode, sizeof(szNode)))
if (!LoadStringAndOem(hInstance, IDS_BCAST, szNode, sizeof(szNode)))
return NULL;
break;
case 2:
if (!LoadString(hInstance, IDS_P2P, szNode, sizeof(szNode)))
if (!LoadStringAndOem(hInstance, IDS_P2P, szNode, sizeof(szNode)))
return NULL;
break;
case 4:
if (!LoadString(hInstance, IDS_MIXED, szNode, sizeof(szNode)))
if (!LoadStringAndOem(hInstance, IDS_MIXED, szNode, sizeof(szNode)))
return NULL;
break;
case 8:
if (!LoadString(hInstance, IDS_HYBRID, szNode, sizeof(szNode)))
if (!LoadStringAndOem(hInstance, IDS_HYBRID, szNode, sizeof(szNode)))
return NULL;
break;
default :
if (!LoadString(hInstance, IDS_UNKNOWN, szNode, sizeof(szNode)))
if (!LoadStringAndOem(hInstance, IDS_UNKNOWN, szNode, sizeof(szNode)))
return NULL;
break;
}
@ -69,42 +80,42 @@ LPTSTR GetInterfaceTypeName(UINT InterfaceType)
switch (InterfaceType)
{
case MIB_IF_TYPE_OTHER:
if (!LoadString(hInstance, IDS_OTHER, szIntType, sizeof(szIntType)))
if (!LoadStringAndOem(hInstance, IDS_OTHER, szIntType, sizeof(szIntType)))
return NULL;
break;
case MIB_IF_TYPE_ETHERNET:
if (!LoadString(hInstance, IDS_ETH, szIntType, sizeof(szIntType)))
if (!LoadStringAndOem(hInstance, IDS_ETH, szIntType, sizeof(szIntType)))
return NULL;
break;
case MIB_IF_TYPE_TOKENRING:
if (!LoadString(hInstance, IDS_TOKEN, szIntType, sizeof(szIntType)))
if (!LoadStringAndOem(hInstance, IDS_TOKEN, szIntType, sizeof(szIntType)))
return NULL;
break;
case MIB_IF_TYPE_FDDI:
if (!LoadString(hInstance, IDS_FDDI, szIntType, sizeof(szIntType)))
if (!LoadStringAndOem(hInstance, IDS_FDDI, szIntType, sizeof(szIntType)))
return NULL;
break;
case MIB_IF_TYPE_PPP:
if (!LoadString(hInstance, IDS_PPP, szIntType, sizeof(szIntType)))
if (!LoadStringAndOem(hInstance, IDS_PPP, szIntType, sizeof(szIntType)))
return NULL;
break;
case MIB_IF_TYPE_LOOPBACK:
if (!LoadString(hInstance, IDS_LOOP, szIntType, sizeof(szIntType)))
if (!LoadStringAndOem(hInstance, IDS_LOOP, szIntType, sizeof(szIntType)))
return NULL;
break;
case MIB_IF_TYPE_SLIP:
if (!LoadString(hInstance, IDS_SLIP, szIntType, sizeof(szIntType)))
if (!LoadStringAndOem(hInstance, IDS_SLIP, szIntType, sizeof(szIntType)))
return NULL;
break;
default:
if (!LoadString(hInstance, IDS_UNKNOWN, szIntType, sizeof(szIntType)))
if (!LoadStringAndOem(hInstance, IDS_UNKNOWN, szIntType, sizeof(szIntType)))
return NULL;
break;
}
@ -153,6 +164,7 @@ LPTSTR GetConnectionType(LPTSTR lpClass)
{
HKEY hKey = NULL;
LPTSTR ConType = NULL;
LPTSTR ConTypeTmp = NULL;
TCHAR Path[256];
LPTSTR PrePath = _T("SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\");
LPTSTR PostPath = _T("\\Connection");
@ -180,24 +192,34 @@ LPTSTR GetConnectionType(LPTSTR lpClass)
NULL,
&dwDataSize) == ERROR_SUCCESS)
{
ConTypeTmp = (LPTSTR)HeapAlloc(ProcessHeap,
0,
dwDataSize);
ConType = (LPTSTR)HeapAlloc(ProcessHeap,
0,
dwDataSize);
if (ConType)
if (ConType && ConTypeTmp)
{
if(RegQueryValueEx(hKey,
_T("Name"),
NULL,
&dwType,
(PBYTE)ConType,
(PBYTE)ConTypeTmp,
&dwDataSize) != ERROR_SUCCESS)
{
HeapFree(ProcessHeap,
0,
ConType);
HeapFree(ProcessHeap,
0,
ConTypeTmp);
ConType = NULL;
}
if (ConType) CharToOem(ConTypeTmp, ConType);
}
}
}
@ -674,7 +696,7 @@ VOID Usage(VOID)
if (lpUsage == NULL)
return;
if (LoadString(hInstance,
if (LoadStringAndOem(hInstance,
IDS_USAGE,
lpUsage,
Size))

View file

@ -422,7 +422,7 @@ AllocateBuffers(PAPPINFO pInfo)
pInfo->RecvPacket = (PIPv4_HEADER)HeapAlloc(GetProcessHeap(),
0,
sizeof(IPv4_HEADER) + PACKET_SIZE);
MAX_PING_PACKET_SIZE);
if (!pInfo->RecvPacket)
{
HeapFree(GetProcessHeap(),

View file

@ -1,3 +1,6 @@
set_unicode()
list(APPEND SOURCE
aboutdlg.c
available.c

View file

@ -17,5 +17,8 @@ Description = Tool zum Erstellen und Öffnen von 7zip, zip, tar, rar und andrern
[Section.040a]
Description = Utilidad para crear y abrir 7zip, zip, tar, rar y otros archivos comprimidos.
[Section.0415]
Description = Narzędzie do tworzenia i otwierania plików typu 7zip, zip, tar, i innych plików archiwizacyjnych.
[Section.0422]
Description = Утиліта для створення та відкриття 7zip, zip, tar, rar та інших архівних файлів.

View file

@ -14,5 +14,10 @@ CDPath = none
[Section.0407]
Description = Abyss Web Server ermöglicht es Webseiten auf Ihrem Computer zu hosten. Er unterstützt sichere SSL/TLS Verbindungen (HTTPS) sowie eine Vielfalt an Web Technologien. Er kann ebenfalls PHP, Perl, Python, ASP, ASP.NET, und Ruby on Rails Web Anwendungen ausführen, welche von Datenbanken, wie MySQL, SQLite, MS SQL Server, MS Access, oder Oracle unterstützt werden können.
[Section.0415]
Description = Abyss Web Server pozwala Ci na stworzenie serwera WWW na własnym komputerze. Ten program obsługuje zabezpieczone połączenia typu SSL/TLS (HTTPS) i wiele technologii Sieci.
Może także uruchamiać zaawansowane aplikacje internetowe takie jak PHP, Perl, Python, ASP, ASP.NET, i Ruby on Rails.
Mogą one zostać oparte o MySQL, SQLite, MS SQL Server, MS Access, lub Oracle.
[Section.0422]
Description = Abyss Web Server дозволить вам утримувати веб-сайти на вашому комп'ютері. Від підтримує безпечні SSL/TLS з'єднання (HTTPS) та великий ряд веб-технологій. Він також запускає PHP, Perl, Python, ASP, ASP.NET, та Ruby on Rails веб-додатки, які можуть підтримуватись такими базами даних, як MySQL, SQLite, MS SQL Server, MS Access, чи Oracle.

View file

@ -21,7 +21,7 @@ Description = X es necesario para varias aplicaciones.
[Section.0415]
Licence = Nieznana
Description = X jest używana przez część aplikacji.
Description = Microsoft Visual Basic 6.0 Common Controls jest używany przez część aplikacji.
[Section.0422]
Licence = Невідома

View file

@ -17,5 +17,8 @@ Description = DosBlaster ist eine Shell Extension, die es ermöglicht jede DOS A
[Section.040a]
Description = DosBlaster en una extensión Shell que permite abrir cualquier ejecutable DOS en DOSBox desde el botón derecho del ratón. Esta versión contiene DOSBox 0.70, pero puede ser actualizado facilmente instalando una nueva versión de DOSBox en la carpeta de DosBlaster.
[Section.0415]
Description = DosBlaster to rozszerzenie powłoki, które umożliwia otwarcie każdego DOS-owego pliku wykonywalnego w DOSBox za pomocą prawego klawisza myszki. Ta wersja zawiera DosBox 0.70, ale można go łatwo zaktualizować, instalując nowszą wersje DOSBox do folderów DosBlaster.
[Section.0422]
Description = DosBlaster це розширення оболонки, яке дозволяє запустити будь-який виконавчий файл DOS в DOSBox через правий клік. Ця версія містить DOSBox 0.70, але може бути оновлена встановленням новішої версії DOSBox в теки DosBlaster.

View file

@ -14,5 +14,8 @@ CDPath = none
[Section.0407]
Description = Kleiner und einfacher Mediaplayer.
[Section.0415]
Description = Prosty i lekki odtwarzacz audio.
[Section.0422]
Description = Простий та маленький програвач аудіо файлів.

View file

@ -2,47 +2,47 @@
[Section]
Name = Mozilla Firefox 3.6
Version = 3.6.11
Version = 3.6.12
Licence = MPL/GPL/LGPL
Description = The most popular and one of the best free Web Browsers out there.
Size = 8.1M
Category = 5
URLSite = http://www.mozilla.com/en-US/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/en-US/Firefox%20Setup%203.6.11.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/en-US/Firefox%20Setup%203.6.12.exe
CDPath = none
[Section.0407]
Description = Der populärste und einer der besten freien Webbrowser.
Size = 8.0M
URLSite = http://www.mozilla-europe.org/de/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/de/Firefox%20Setup%203.6.11.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/de/Firefox%20Setup%203.6.12.exe
[Section.040a]
Description = El más popular y uno de los mejores navegadores web gratuitos que hay.
Size = 8.0M
URLSite = http://www.mozilla-europe.org/es/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/es-ES/Firefox%20Setup%203.6.11.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/es-ES/Firefox%20Setup%203.6.12.exe
[Section.0414]
Description = Mest populære og best også gratis nettleserene der ute.
Size = 8.0M
URLSite = http://www.mozilla-europe.org/no/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/nb-NO/Firefox%20Setup%203.6.11.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/nb-NO/Firefox%20Setup%203.6.12.exe
[Section.0415]
Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych.
Size = 8.8M
URLSite = http://www.mozilla-europe.org/pl/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/pl/Firefox%20Setup%203.6.11.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/pl/Firefox%20Setup%203.6.12.exe
[Section.0419]
Description = Один из самых популярных и лучших бесплатных браузеров.
Size = 8.4M
URLSite = http://www.mozilla-europe.org/ru/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/ru/Firefox%20Setup%203.6.11.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/ru/Firefox%20Setup%203.6.12.exe
[Section.0422]
Description = Найпопулярніший та один з кращих безплатних веб-браузерів.
Size = 8.4M
URLSite = http://www.mozilla-europe.org/uk/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.11/win32/uk/Firefox%20Setup%203.6.11.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/uk/Firefox%20Setup%203.6.12.exe

View file

@ -18,7 +18,7 @@ Description = Open Source Office Suite, basierend auf Open Office, aber viel bes
Description = La suite de ofimática de código abierto.
[Section.0415]
Description = Otwarty pakiet biurowy.
Description = Otwarty pakiet biurowy, bazujący na Open Office, ale znacznie lepszy.
[Section.0422]
Description = Відкритий офісний пакет.

View file

@ -14,5 +14,8 @@ CDPath = none
[Section.0407]
Description = KDE für Windows.
[Section.0415]
Description = KDE dla Windows.
[Section.0422]
Description = KDE для Windows.

View file

@ -2,13 +2,13 @@
[Section]
Name = Miranda IM
Version = 0.9.8
Version = 0.9.10
Licence = GPL
Description = Open source multiprotocol instant messaging application - May not work completely.
Size = 3.0MB
Category = 5
URLSite = http://www.miranda-im.org/
URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.8-unicode.exe
URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.10-unicode.exe
CDPath = none
[Section.0407]

View file

@ -2,13 +2,13 @@
[Section]
Name = mIRC
Version = 7.14
Version = 7.15
Licence = Shareware
Description = The most popular client for the Internet Relay Chat (IRC).
Size = 2.0M
Category = 5
URLSite = http://www.mirc.com/
URLDownload = http://download.mirc.com/mirc714.exe
URLDownload = http://download.mirc.com/mirc715.exe
CDPath = none
[Section.0407]

View file

@ -2,14 +2,17 @@
[Section]
Name = Mono .net Development Framework
Version = 2.6.7
Version = 2.8
Licence = Unknown
Description = Open Source .net Framework.
Size = 72MB
Size = 78MB
Category = 14
URLSite = http://www.mono-project.com/Main_Page
URLDownload = http://ftp.novell.com/pub/mono/archive/2.6.7/windows-installer/2/mono-2.6.7-gtksharp-2.12.10-win32-2.exe
URLDownload = http://ftp.novell.com/pub/mono/archive/2.8/windows-installer/9/mono-2.8-gtksharp-2.12.10-win32-9.exe
CDPath = none
[Section.0415]
Description = Pakiet Mono .net Framework dla Programistów.
[Section.0422]
Description = Відкритий .net Фреймворк.

View file

@ -20,5 +20,8 @@ Description = Reproductor multimedia.
[Section.0419]
Description = Мультимедийный проигрыватель.
[Section.0415]
Description = Odtwarzacz multimediów.
[Section.0422]
Description = Мультимедійний програвач.

View file

@ -10,3 +10,6 @@ Category = 14
URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3
URLDownload = http://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe
CDPath = none
[Section.0415]
Description = Microsoft .NET Framework Wersja 1.1 - Pakiet Dystrybucyjny.

View file

@ -10,3 +10,6 @@ Category = 14
URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5
URLDownload = http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe
CDPath = none
[Section.0415]
Description = Microsoft .NET Framework Wersja 2.0 - Pakiet Dystrybucyjny.

View file

@ -10,3 +10,6 @@ Category = 14
URLSite = http://www.microsoft.com/downloads/details.aspx?familyid=5B2C0358-915B-4EB5-9B1D-10E506DA9D0F
URLDownload = http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe
CDPath = none
[Section.0415]
Description = Microsoft .NET Framework Wersja 2.0 Service Pack 2.

View file

@ -14,5 +14,9 @@ CDPath = none
[Section.0407]
Description = Eine sehr mächtige, dynamische Programmiersprache.
[Section.0415]
Description = Potęży i dynamiczny język programowania.
[Section.0422]
Description = Дуже потужна динамічна мова програмування.

View file

@ -14,5 +14,8 @@ CDPath = none
[Section.0407]
Description = ReMooD ist ein Port des Doom Legacy Sources. Es versucht das klassische Legacy Erfahrung zusammen mit neuen Features und mehr Stabilität zu bieten. Unterstützt werden Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x und höher; und Linux (x86 und x86_64).
[Section.0415]
Description = Żródłowy port Doom. Jego celem jest zapewnienie rozrywki znanej z klasycznej wersji z nowymi funkcjami, i lepszą stabilnością. Obsługuje Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x i wyższe; i Linux (x86 i x86_64).
[Section.0422]
Description = ReMooD Ñ<> Портом вихідних кодів Doom Legacy. Його метою Ñ” додати нові можливоÑ<C2BE>ÑÑ Ñ‚Ð° Ñ<>ÑабÑльнÑÑ<E28093>ÑÑŒ до доÑ<C2BE>вÑду клаÑ<C2B0>ичного Legacy. Він підтримує Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x та новіші; а також Linux (x86 та x86_64).

View file

@ -2,13 +2,13 @@
[Section]
Name = SciTE
Version = 2.21
Version = 2.22
Licence = Freeware
Description = SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs.
Size = 0.6M
Category = 7
URLSite = http://www.scintilla.org/
URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.21/Sc221.exe
URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.22/Sc222.exe
CDPath = none
[Section.0407]
@ -17,5 +17,8 @@ Description = SciTE ist ein SCIntilla basierter Text Editor. Ursprünglich wurde
[Section.040a]
Description = Editor de texto basado en SCIntilla. Originalmente creado para demostrar Scintilla, a crecido para ser un gran editor con capacidad para crear y ejecutar programas.
[Section.0415]
Description = SciTE to edytor tekstu bazowany na SCIntilla. Oryginalnie stworzony aby pokazać Scintille, stał sie ogólnie przydatnym edytorem z infrastrukturą potrzebną do tworzenia i uruchamiania programów.
[Section.0422]
Description = Текстовий редактор на основі SCIntilla. Був зібраний як презентація Scintilla, але виріс до редактора загального користування з засобами збирання та запуску програм.

View file

@ -2,31 +2,31 @@
[Section]
Name = Mozilla SeaMonkey
Version = 2.0.9
Version = 2.0.10
Licence = MPL/GPL/LGPL
Description = Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need.
Size = 10.1MB
Category = 5
URLSite = http://www.seamonkey-project.org/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/en-US/SeaMonkey%20Setup%202.0.9.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/en-US/SeaMonkey%20Setup%202.0.10.exe
CDPath = none
[Section.0407]
Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen.
Size = 10.0MB
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/de/SeaMonkey%20Setup%202.0.9.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/de/SeaMonkey%20Setup%202.0.10.exe
[Section.040a]
Description = La suite de Mozilla está viva. Es el primero y único navegador web, gestor de correo, lector de noticias, Chat y editor HTML que necesitarás.
Size = 10.0MB
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/es-ES/SeaMonkey%20Setup%202.0.9.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/es-ES/SeaMonkey%20Setup%202.0.10.exe
[Section.0415]
Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz.
Size = 10.8MB
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/pl/SeaMonkey%20Setup%202.0.9.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/pl/SeaMonkey%20Setup%202.0.10.exe
[Section.0419]
Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор.
Size = 10.4MB
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.9/win32/ru/SeaMonkey%20Setup%202.0.9.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/ru/SeaMonkey%20Setup%202.0.10.exe

View file

@ -14,5 +14,8 @@ CDPath = none
[Section.0407]
Description = Die STEAM Spieleplattform, die von viele Spielen verwendet wird.
[Section.0415]
Description = STEAM - platforma, którą używa obecnie wiele gier.
[Section.0422]
Description = Ігрова платформа, що використовується багатьма іграми.

View file

@ -13,3 +13,6 @@ CDPath = none
[Section.0407]
Description = Eine schnelle und effektive Suchanwendung.
[Section.0415]
Description = Szybka i bogata w opcje aplikacja szukająca.

View file

@ -15,6 +15,9 @@ CDPath = none
Licence = Unbekannt
Description = Tahoma Font pack, der von einigen Anwendungen benötigt wird (Steam).
[Section.0415]
Description = Pakiet Czcionki Tahoma wymagany przez niektóre programy (np. Steam).
[Section.0422]
Licence = Невідома
Description = Пакет шрифтів Tahoma, що необхідні деяким програмам (Steam).

View file

@ -2,41 +2,41 @@
[Section]
Name = Mozilla Thunderbird
Version = 3.1.5
Version = 3.1.6
Licence = MPL/GPL/LGPL
Description = The most popular and one of the best free Mail Clients out there.
Size = 9.0M
Category = 5
URLSite = http://www.mozilla-europe.org/en/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/en-US/Thunderbird%20Setup%203.1.5.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/en-US/Thunderbird%20Setup%203.1.6.exe
CDPath = none
[Section.0407]
Description = Der populärste und einer der besten freien Mail-Clients.
Size = 8.8M
URLSite = http://www.mozilla-europe.org/de/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/de/Thunderbird%20Setup%203.1.5.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/de/Thunderbird%20Setup%203.1.6.exe
[Section.040a]
Description = El más popular y uno de los mejores clientes mail que hay.
Size = 8.8M
URLSite = http://www.mozilla-europe.org/es/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/es-ES/Thunderbird%20Setup%203.1.5.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/es-ES/Thunderbird%20Setup%203.1.6.exe
[Section.0415]
Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty.
Size = 9.7M
URLSite = http://www.mozilla-europe.org/pl/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/pl/Thunderbird%20Setup%203.1.5.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/pl/Thunderbird%20Setup%203.1.6.exe
[Section.0419]
Description = Один из самых популярных и лучших бесплатных почтовых клиентов.
Size = 9.2M
URLSite = http://www.mozilla-europe.org/ru/products/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/ru/Thunderbird%20Setup%203.1.5.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/ru/Thunderbird%20Setup%203.1.6.exe
[Section.0422]
Description = Найпопулярніший та один з кращих поштових клієнтів.
Size = 9.2M
URLSite = http://www.mozillamessaging.com/uk/thunderbird/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.5/win32/uk/Thunderbird%20Setup%203.1.5.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/uk/Thunderbird%20Setup%203.1.6.exe

View file

@ -2,17 +2,20 @@
[Section]
Name = UltraVNC
Version = 1.0.8.2
Version = 1.0.9.1
Licence = GPL
Description = Open-source VNC client/server.
Size = 1.9MB
Size = 2.0MB
Category = 5
URLSite = http://www.uvnc.com/
URLDownload = http://support1.uvnc.com/download/1082/UltraVNC_1.0.8.2_Setup.exe
URLDownload = http://support1.uvnc.com/download/109/UltraVNC_1.0.9.1_Setup.exe
CDPath = none
[Section.040a]
Description = Cliente/Servidor VNC de código abierto.
[Section.0415]
Description = Otwarty klient/serwer VNC.
[Section.0422]
Description = Відкритий VNC клієнт/сервер.

View file

@ -2,13 +2,13 @@
[Section]
Name = µTorrent
Version = 2.0.4
Version = 2.2
Licence = Freeware for non-commercial uses
Description = Small and fast BitTorrent Client.
Size = 320K
Size = 385K
Category = 5
URLSite = http://www.utorrent.com/
URLDownload = http://download.utorrent.com/2.0.4/utorrent.exe
URLDownload = http://download.utorrent.com/2.2/utorrent.exe
CDPath = none

View file

@ -2,13 +2,13 @@
[Section]
Name = VLC media player
Version = 1.1.4
Version = 1.1.5
Licence = GPL
Description = A media player.
Size = 18.7MB
Size = 19.1MB
Category = 1
URLSite = http://www.videolan.org/vlc/
URLDownload = http://ignum.dl.sourceforge.net/project/vlc/1.1.4/win32/vlc-1.1.4-win32.exe
URLDownload = http://ignum.dl.sourceforge.net/project/vlc/1.1.5/win32/vlc-1.1.5-win32.exe
CDPath = none
[Section.0407]
@ -20,5 +20,8 @@ Description = Reproductor multimedia.
[Section.0419]
Description = Мультимедийный проигрыватель.
[Section.0415]
Description = Odtwarzacz multimediów.
[Section.0422]
Description = Мультимедійний програвач.

View file

@ -8,6 +8,7 @@ list(APPEND SOURCE
about.c
childwnd.c
edit.c
error.c
find.c
framewnd.c
hexedit.c

View file

@ -67,19 +67,21 @@ static void draw_splitbar(HWND hWnd, int x)
static void ResizeWnd(ChildWnd* pChildWnd, int cx, int cy)
{
HDWP hdwp = BeginDeferWindowPos(2);
RECT rt, rs;
HDWP hdwp = BeginDeferWindowPos(3);
RECT rt, rs, rb;
const int tHeight = 18;
SetRect(&rt, 0, 0, cx, cy);
cy = 0;
if (hStatusBar != NULL) {
GetWindowRect(hStatusBar, &rs);
cy = rs.bottom - rs.top + 8;
cy = rs.bottom - rs.top;
}
GetWindowRect(pChildWnd->hAddressBtnWnd, &rb);
cx = pChildWnd->nSplitPos + SPLIT_WIDTH/2;
DeferWindowPos(hdwp, pChildWnd->hAddressBarWnd, 0, rt.left, rt.top, rt.right-rt.left, 23, SWP_NOZORDER|SWP_NOACTIVATE);
DeferWindowPos(hdwp, pChildWnd->hTreeWnd, 0, rt.left, rt.top + 25, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
DeferWindowPos(hdwp, pChildWnd->hListWnd, 0, rt.left+cx , rt.top + 25, rt.right-cx, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
DeferWindowPos(hdwp, pChildWnd->hAddressBarWnd, 0, rt.left, rt.top, rt.right-rt.left - tHeight-2, tHeight, SWP_NOZORDER|SWP_NOACTIVATE);
DeferWindowPos(hdwp, pChildWnd->hAddressBtnWnd, 0, rt.right - tHeight, rt.top, tHeight, tHeight, SWP_NOZORDER|SWP_NOACTIVATE);
DeferWindowPos(hdwp, pChildWnd->hTreeWnd, 0, rt.left, rt.top + tHeight+2, pChildWnd->nSplitPos-SPLIT_WIDTH/2-rt.left, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
DeferWindowPos(hdwp, pChildWnd->hListWnd, 0, rt.left+cx, rt.top + tHeight+2, rt.right-cx, rt.bottom-rt.top-cy, SWP_NOZORDER|SWP_NOACTIVATE);
EndDeferWindowPos(hdwp);
}
@ -333,20 +335,26 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hWnd, (HMENU)0, hInst, 0);
pChildWnd->hAddressBtnWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Button"), _T("»"), WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP | BS_DEFPUSHBUTTON,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hWnd, (HMENU)0, hInst, 0);
pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW);
pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, pChildWnd->szPath*/);
SetFocus(pChildWnd->hTreeWnd);
/* set the address bar font */
if (pChildWnd->hAddressBarWnd)
/* set the address bar and button font */
if ((pChildWnd->hAddressBarWnd) && (pChildWnd->hAddressBtnWnd))
{
hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
SendMessage(pChildWnd->hAddressBarWnd,
WM_SETFONT,
(WPARAM)hFont,
0);
SendMessage(pChildWnd->hAddressBtnWnd,
WM_SETFONT,
(WPARAM)hFont,
0);
}
/* Subclass the AddressBar */
oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc);
@ -354,7 +362,10 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
break;
}
case WM_COMMAND:
if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
if(HIWORD(wParam) == BN_CLICKED){
PostMessage(pChildWnd->hAddressBarWnd, WM_KEYUP, VK_RETURN, 0);
}
else if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
goto def;
}
break;
@ -477,10 +488,28 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
rootName = get_root_key_name(hRootKey);
fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
if (fullPath) {
/* set (correct) the address bar text */
if(keyPath[0] != '\0')
_stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
else
fullPath = _tcscpy(fullPath, rootName);
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
HeapFree(GetProcessHeap(), 0, fullPath);
/* disable hive manipulation items temporarily (enable only if necessary) */
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_GRAYED);
/* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
if (!(_tcsicmp(rootName, TEXT("HKEY_LOCAL_MACHINE")) &&
_tcsicmp(rootName, TEXT("HKEY_USERS"))))
{
// enable the unload menu item if at the root
// otherwise enable the load menu item if there is no slash in keyPath (ie. immediate child selected)
if(keyPath[0] == '\0')
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_ENABLED);
else if(!_tcschr(keyPath, _T('\\')))
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_ENABLED);
}
{
HKEY hKey;

View file

@ -59,19 +59,10 @@ void error(HWND hwnd, INT resId, ...)
static void error_code_messagebox(HWND hwnd, DWORD error_code)
{
LPTSTR lpMsgBuf;
DWORD status;
TCHAR title[256];
static const TCHAR fallback[] = TEXT("Error displaying error message.\n");
if (!LoadString(hInst, IDS_ERROR, title, COUNT_OF(title)))
lstrcpy(title, TEXT("Error"));
status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, error_code, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
if (!status)
lpMsgBuf = (LPTSTR)fallback;
MessageBox(hwnd, lpMsgBuf, title, MB_OK | MB_ICONERROR);
if (lpMsgBuf != fallback)
LocalFree(lpMsgBuf);
ErrorMessageBox(hwnd, title, error_code);
}
void warning(HWND hwnd, INT resId, ...)

View 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);
}

View file

@ -282,6 +282,105 @@ static BOOL InitOpenFileName(HWND hWnd, OPENFILENAME* pofn)
return TRUE;
}
static INT_PTR CALLBACK LoadHive_KeyNameInHookProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static LPTSTR sKey = NULL;
static INT sLength = 0;
switch(uMsg)
{
case WM_INITDIALOG:
sKey = (LPTSTR)lParam;
sLength = 128; /* FIXME: Ugly hack! */
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
if(GetDlgItemText(hWndDlg, IDC_EDIT_KEY, sKey, sLength))
return EndDialog(hWndDlg, -1);
else
return EndDialog(hWndDlg, 0);
case IDCANCEL:
return EndDialog(hWndDlg, 0);
}
break;
}
return FALSE;
}
static BOOL LoadHive(HWND hWnd)
{
OPENFILENAME ofn;
TCHAR Caption[128];
LPCTSTR pszKeyPath;
TCHAR xPath[128];
HKEY hRootKey;
TCHAR Filter[1024];
FILTERPAIR filter;
/* get the item key to load the hive in */
pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
/* initialize the "open file" dialog */
InitOpenFileName(hWnd, &ofn);
/* build the "All Files" filter up */
filter.DisplayID = IDS_FLT_ALLFILES;
filter.FilterID = IDS_FLT_ALLFILES_FLT;
BuildFilterStrings(Filter, &filter, sizeof(filter));
ofn.lpstrFilter = Filter;
/* load and set the caption and flags for dialog */
LoadString(hInst, IDS_LOAD_HIVE, Caption, COUNT_OF(Caption));
ofn.lpstrTitle = Caption;
ofn.Flags |= OFN_ENABLESIZING;
/* ofn.lCustData = ;*/
/* now load the hive */
if (GetOpenFileName(&ofn))
{
if(DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_LOADHIVE), hWnd, &LoadHive_KeyNameInHookProc, (LPARAM)xPath))
{
LONG regLoadResult = RegLoadKey(hRootKey, xPath, ofn.lpstrFile);
if(regLoadResult == ERROR_SUCCESS)
{
/* refresh tree and list views */
RefreshTreeView(g_pChildWnd->hTreeWnd);
pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
RefreshListView(g_pChildWnd->hListWnd, hRootKey, pszKeyPath);
}
else
{
ErrorMessageBox(hWnd, Caption, regLoadResult);
return FALSE;
}
}
} else {
CheckCommDlgError(hWnd);
}
return TRUE;
}
static BOOL UnloadHive(HWND hWnd)
{
TCHAR Caption[128];
LPCTSTR pszKeyPath;
HKEY hRootKey;
/* get the item key to unload */
pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
/* load and set the caption and flags for dialog */
LoadString(hInst, IDS_UNLOAD_HIVE, Caption, COUNT_OF(Caption));
/* now unload the hive */
LONG regUnloadResult = RegUnLoadKey(hRootKey, pszKeyPath);
if(regUnloadResult == ERROR_SUCCESS)
{
/* refresh tree and list views */
RefreshTreeView(g_pChildWnd->hTreeWnd);
pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey);
RefreshListView(g_pChildWnd->hListWnd, hRootKey, pszKeyPath);
}
else
{
ErrorMessageBox(hWnd, Caption, regUnloadResult);
return FALSE;
}
return TRUE;
}
static BOOL ImportRegistryFile(HWND hWnd)
{
OPENFILENAME ofn;
@ -316,7 +415,6 @@ static BOOL ImportRegistryFile(HWND hWnd)
return TRUE;
}
static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
HWND hwndExportAll;
@ -758,6 +856,12 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
UNREFERENCED_PARAMETER(message);
switch (LOWORD(wParam)) {
case ID_REGISTRY_LOADHIVE:
LoadHive(hWnd);
return TRUE;
case ID_REGISTRY_UNLOADHIVE:
UnloadHive(hWnd);
return TRUE;
case ID_REGISTRY_IMPORTREGISTRYFILE:
ImportRegistryFile(hWnd);
return TRUE;

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -276,6 +286,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Внася словесен файл в регистъра"
ID_REGISTRY_EXPORTREGISTRYFILE
"Изнася целия регистър или части от него в словесен файл"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Свързва се с регистъра на далечен компютър"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -332,6 +346,8 @@ BEGIN
IDS_MY_COMPUTER "Моят компютър"
IDS_IMPORT_REG_FILE "Внос на регистърен файл"
IDS_EXPORT_REG_FILE "Износ на регистърен файл"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(самостоятелна стойност на двойна дума)"
END

View file

@ -175,6 +175,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -274,6 +284,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importuje textový soubor do registru"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exportuje všechny části registru do textového souboru"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Připojí se ke vzdálenému registru jiného počítače"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -330,6 +344,8 @@ BEGIN
IDS_MY_COMPUTER "Tento počítač"
IDS_IMPORT_REG_FILE "Importovat soubor registru"
IDS_EXPORT_REG_FILE "Exportovat do souboru registru"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(Neplatná hodnota DWORD)"
END

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -276,6 +286,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importiert eine Textddatei in die Registry"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exportiert Teile oder die ganze Registry in eine Textdatei"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Verbindet zu einer Registry eines Fremdcomputers"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -332,6 +346,8 @@ BEGIN
IDS_MY_COMPUTER "Arbeitsplatz"
IDS_IMPORT_REG_FILE "Registry importieren"
IDS_EXPORT_REG_FILE "Registry exportieren"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(ungültiger DWORD-Wert)"
END

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -276,6 +286,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "ÅéóÜãåé Ýíá áñ÷åßï êåéìÝíïõ óôç registry"
ID_REGISTRY_EXPORTREGISTRYFILE
"ÅîÜãùç üëç Þ Ýíá êïììÜôé ôçò registry óå Ýíá áñ÷åßï êåéìÝíïõ"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"ÓõíäÝååôáé óôç registry åíüò áðïìáêñõóìÝíïõ õðïëïãéóôÞ"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -332,6 +346,8 @@ BEGIN
IDS_MY_COMPUTER "Ï ÕðïëïãéóôÞò Ìïõ"
IDS_IMPORT_REG_FILE "ÅéóáãùãÞ Áñ÷åßïõ Registry"
IDS_EXPORT_REG_FILE "ÅîáãùãÞ Áñ÷åßïõ Registry"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(ìç Ýãêõñç DWORD ôéìÞ)"
END

View file

@ -274,6 +274,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exports all or part of the registry to a text file"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Connects to a remote computer's registry"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -330,6 +334,8 @@ BEGIN
IDS_MY_COMPUTER "My Computer"
IDS_IMPORT_REG_FILE "Import Registry File"
IDS_EXPORT_REG_FILE "Export Registry File"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(invalid DWORD value)"
END
@ -392,6 +398,20 @@ BEGIN
EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12
END
//
// Dialog resources
//
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_ADDFAVORITES DIALOGEX DISCARDABLE 0, 0, 186, 46
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Add to Favorites"

View file

@ -180,6 +180,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -279,6 +289,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importa un archivo de texto al registro"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exporta todo o parte del registro a un archivo de texto"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Se conecta al registro de un ordenador remoto"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -335,6 +349,8 @@ BEGIN
IDS_MY_COMPUTER "Mi PC"
IDS_IMPORT_REG_FILE "Importa Fichero de Registro"
IDS_EXPORT_REG_FILE "Exporta Fichero de Registro"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(valor DWORD invalido)"
END

View file

@ -180,6 +180,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -279,6 +289,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importe un fichier texte dans les registres"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exporte tout ou une partie des registres dans un fichier texte"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Connecte aux registres d'un ordinateur distant"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -335,6 +349,8 @@ BEGIN
IDS_MY_COMPUTER "Mon ordinateur"
IDS_IMPORT_REG_FILE "Importer un fichier registre"
IDS_EXPORT_REG_FILE "Exporter un fichier registre"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(valeur mot double invalide)"
END

View file

@ -178,6 +178,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -277,6 +287,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exports all or part of the registry to a text file"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Connects to a remote computer's registry"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -333,6 +347,8 @@ BEGIN
IDS_MY_COMPUTER "My Computer"
IDS_IMPORT_REG_FILE "Import Registry File"
IDS_EXPORT_REG_FILE "Export Registry File"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(invalid DWORD value)"
END

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -276,6 +286,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Mengimpor file teks ke dalam registri"
ID_REGISTRY_EXPORTREGISTRYFILE
"Mengekspor semua atau sebagian registri le file teks"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Menyambung ke registri komputer remote"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -332,6 +346,8 @@ BEGIN
IDS_MY_COMPUTER "My Computer"
IDS_IMPORT_REG_FILE "Impor File Registri"
IDS_EXPORT_REG_FILE "Ekspor File Registri"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(nilai DWORD tidak benar)"
END

View file

@ -180,6 +180,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -281,6 +291,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importa un file di testo nel Registro"
ID_REGISTRY_EXPORTREGISTRYFILE
"Esporta tutto o parte del Registro in un file di testo"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Si connette al Registro di un computer remoto"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -337,6 +351,8 @@ BEGIN
IDS_MY_COMPUTER "Il mio Computer"
IDS_IMPORT_REG_FILE "Importa file di Registro"
IDS_EXPORT_REG_FILE "Esporta file di Registro"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(valore DWORD non valido)"
END

View file

@ -175,6 +175,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -274,6 +284,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "テキスト ファイルをレジストリにインポートします。"
ID_REGISTRY_EXPORTREGISTRYFILE
"レジストリの一部または全体をテキスト ファイルにエクスポートします。"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"リモート コンピュータのレジストリに接続します。"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -330,6 +344,8 @@ BEGIN
IDS_MY_COMPUTER "マイ コンピュータ"
IDS_IMPORT_REG_FILE "レジストリ ファイルのインポート"
IDS_EXPORT_REG_FILE "レジストリ ファイルのエクスポート"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(無効な DWORD 値)"
END

View file

@ -162,6 +162,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -261,6 +271,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "텍스트 파일을 레지스트리로 불러 옵니다"
ID_REGISTRY_EXPORTREGISTRYFILE
"텍스트 파일로 레지스트리의 전체나 일부를 내보냅니다"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"원격 컴퓨터의 레지스트리로 접속합니다"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -317,6 +331,8 @@ BEGIN
IDS_MY_COMPUTER "내 컴퓨터"
IDS_IMPORT_REG_FILE "레지스트리 파일 불러오기"
IDS_EXPORT_REG_FILE "레지스트리 파일 내보내기"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(잘못된 DWORD값)"
END

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -276,6 +286,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Een tekstbestand in het register importeren"
ID_REGISTRY_EXPORTREGISTRYFILE
"Het register of een gedeelte ervan naar een tekstbestand exporteren"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Een verbinding maken met het register van een externe computer"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -332,6 +346,8 @@ BEGIN
IDS_MY_COMPUTER "My Computer"
IDS_IMPORT_REG_FILE "Import Registry File"
IDS_EXPORT_REG_FILE "Export Registry File"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(invalid DWORD value)"
END

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -276,6 +286,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importerer en tekstfil inn i Registret"
ID_REGISTRY_EXPORTREGISTRYFILE
"Eksporterer hele eller deler av Registret til en tekstfil"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Kobler til Registret på en annen datamaskin"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -332,6 +346,8 @@ BEGIN
IDS_MY_COMPUTER "Min datamaskin"
IDS_IMPORT_REG_FILE "Importer registerfil"
IDS_EXPORT_REG_FILE "Eksporter registerfil"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(ugyldig DWORD-verdi)"
END

View file

@ -182,6 +182,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -281,6 +291,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importuje plik do rejestru"
ID_REGISTRY_EXPORTREGISTRYFILE
"Eksportuje ca³oœæ lub czêœæ rejestru do pliku"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Po³¹czenie z rejestrem zdalnego komputera"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -337,6 +351,8 @@ BEGIN
IDS_MY_COMPUTER "Mój komputer"
IDS_IMPORT_REG_FILE "Importuj plik rejestru"
IDS_EXPORT_REG_FILE "Eksportuj plik rejestru"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(niew³aœciwa wartoœæ DWORD)"
END

View file

@ -178,6 +178,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -277,6 +287,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importa um arquivo de texto para o registro"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exporta todo ou parte do Registro para um arquivo texto"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Conecta-se ao Registro de um computador remoto"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -333,6 +347,8 @@ BEGIN
IDS_MY_COMPUTER "Meu computador"
IDS_IMPORT_REG_FILE "Importar arquivo do Registro"
IDS_EXPORT_REG_FILE "Exportar arquivo do Registro"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(valor DWORD inválido)"
END

View file

@ -277,6 +277,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importa um arquivo texto para o registro."
ID_REGISTRY_EXPORTREGISTRYFILE
"Exporta todo ou parte do registro para um arquivo texto."
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Conecta a um registro em um computador remoto."
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -333,6 +337,8 @@ BEGIN
IDS_MY_COMPUTER "My Computer"
IDS_IMPORT_REG_FILE "Import Registry File"
IDS_EXPORT_REG_FILE "Export Registry File"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(invalid DWORD value)"
END
@ -384,6 +390,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EXPORTRANGE DIALOGEX DISCARDABLE 50, 50, 370, 50
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
@ -275,6 +285,8 @@ BEGIN
ID_EDIT_NEW_DWORDVALUE "Добавляет новое DWORD-значение"
ID_REGISTRY_IMPORTREGISTRYFILE "Импортирует текстовой файл в реестр"
ID_REGISTRY_EXPORTREGISTRYFILE "Экспортирует весь реестр или его часть в текстовой файл"
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE "Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY "Подключается к реестру удалённого компьютера"
@ -332,6 +344,8 @@ BEGIN
IDS_MY_COMPUTER "Мой компьютер"
IDS_IMPORT_REG_FILE "Импортирование файла реестра"
IDS_EXPORT_REG_FILE "Экспортирование файла реестра"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(неправильное значение DWORD)"
END

View file

@ -162,6 +162,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -261,6 +271,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exports all or part of the registry to a text file"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Connects to a remote computer's registry"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -317,6 +331,8 @@ BEGIN
IDS_MY_COMPUTER "Tento poèítaè"
IDS_IMPORT_REG_FILE "Import Registry File"
IDS_EXPORT_REG_FILE "Export Registry File"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(neplatná DWORD hodnota)"
END

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -276,6 +286,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "V register uvozi datoteko z besedilom"
ID_REGISTRY_EXPORTREGISTRYFILE
"Registrsko datoteko ali njen del izvozi v besedilno datoteko"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Vzpostavi povezavo z registrom oddaljenega raèunalnika"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -332,6 +346,8 @@ BEGIN
IDS_MY_COMPUTER "My Computer"
IDS_IMPORT_REG_FILE "Import Registry File"
IDS_EXPORT_REG_FILE "Export Registry File"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(invalid DWORD value)"
END

View file

@ -175,6 +175,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -274,6 +284,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Importerar en textfil till registret"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exporterar hela eller en del av registret till en textfil"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Ansluter till en annan dators register"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -330,6 +344,8 @@ BEGIN
IDS_MY_COMPUTER "Den här datorn"
IDS_IMPORT_REG_FILE "Importera registerfil"
IDS_EXPORT_REG_FILE "Exportera registerfil"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(felaktigt DWORD-värde)"
END

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -276,6 +286,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exports all or part of the registry to a text file"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Connects to a remote computer's registry"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -332,6 +346,8 @@ BEGIN
IDS_MY_COMPUTER "My Computer"
IDS_IMPORT_REG_FILE "Import Registry File"
IDS_EXPORT_REG_FILE "Export Registry File"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(invalid DWORD value)"
END

View file

@ -178,6 +178,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -277,6 +287,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "²ìïîðòóº òåêñòîâèé ôàéë äî ðåºñòðó"
ID_REGISTRY_EXPORTREGISTRYFILE
"Åêñïîðòóº âåñü ðåºñòð àáî éîãî ÷àñòèíó â òåêñòîâèé ôàéë"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"ϳäêëþ÷àºòüñÿ äî ðåºñòðó â³ääàëåíîãî êîìï'þòåðà"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -333,6 +347,8 @@ BEGIN
IDS_MY_COMPUTER "̳é êîìï'þòåð"
IDS_IMPORT_REG_FILE "²ìïîðòóâàòè ôàéë ðåºñòðó"
IDS_EXPORT_REG_FILE "Åêñïîðòóâàòè ôàéë ðåºñòðó"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(Íåïðàâèëüíå çíà÷åííÿ DWORD)"
END

View file

@ -177,6 +177,16 @@ END
/*
* Dialog
*/
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Load Hive"
FONT 8, "Ms Shell Dlg"
{
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
}
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
@ -276,6 +286,10 @@ BEGIN
ID_REGISTRY_IMPORTREGISTRYFILE "将文件导入到注册表中。"
ID_REGISTRY_EXPORTREGISTRYFILE
"将注册表全部或部分导出到文件中。"
ID_REGISTRY_LOADHIVE
"Loads a hive file into the registry"
ID_REGISTRY_UNLOADHIVE
"Unloads a hive from the registry"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"连接到远程计算机的注册表。"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
@ -332,6 +346,8 @@ BEGIN
IDS_MY_COMPUTER "My Computer"
IDS_IMPORT_REG_FILE "导入注册表文件"
IDS_EXPORT_REG_FILE "导出注册表文件"
IDS_LOAD_HIVE "Load Hive"
IDS_UNLOAD_HIVE "Unload Hive"
IDS_INVALID_DWORD "(不正确的 DWORD 值)"
END

View file

@ -556,18 +556,12 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
/* } */
/* dwValSize = max_val_size; */
while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) {
/* Remove unwanted path from key name */
TCHAR *pLastBl = _tcsrchr(ValName, TEXT('\\'));
if (pLastBl != NULL)
++pLastBl;
else
pLastBl = ValName;
/* Add a terminating 0 character. Usually this is only necessary for strings. */
ValBuf[dwValSize] = 0;
#ifdef UNICODE
ValBuf[dwValSize + 1] = 0;
#endif
AddEntryToList(hwndLV, pLastBl, dwValType, ValBuf, dwValSize, -1, TRUE);
AddEntryToList(hwndLV, ValName, dwValType, ValBuf, dwValSize, -1, TRUE);
dwValNameLen = max_val_name_len;
dwValSize = max_val_size;
dwValType = 0L;

View file

@ -58,6 +58,7 @@ typedef struct {
HWND hTreeWnd;
HWND hListWnd;
HWND hAddressBarWnd;
HWND hAddressBtnWnd;
int nFocusPanel; /* 0: left 1: right */
int nSplitPos;
WINDOWPLACEMENT pos;
@ -88,6 +89,9 @@ extern void ShowAboutBox(HWND hWnd);
/* childwnd.c */
extern LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);
/* error.c */
extern void ErrorMessageBox(HWND hWnd, LPCTSTR title, DWORD code);
/* find.c */
extern void FindDialog(HWND hWnd);
extern BOOL FindNext(HWND hWnd);

View file

@ -137,9 +137,11 @@
#define IDS_ERR_RENVAL_CAPTION 32856
#define IDS_ERR_RENVAL_TOEMPTY 32857
#define IDS_BAD_KEY 32858
#define IDS_LOAD_HIVE 32859
#define IDS_UNLOAD_HIVE 32860
#define ID_EDIT_NEW_MULTISTRINGVALUE 32860
#define ID_EDIT_NEW_EXPANDABLESTRINGVALUE 32861
#define ID_EDIT_NEW_MULTISTRINGVALUE 32861
#define ID_EDIT_NEW_EXPANDABLESTRINGVALUE 32862
#define ID_SWITCH_PANELS 32871
#define ID_EDIT_PERMISSIONS 32872
@ -199,6 +201,8 @@
#define IDC_EXPORT_BRANCH 2009
#define IDC_EXPORT_BRANCH_TEXT 2010
#define IDD_LOADHIVE 2500
#define IDC_EDIT_KEY 2501
#define IDC_FAVORITENAME 2011
#define IDC_FAVORITESLIST 2012

View file

@ -633,7 +633,7 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
TVITEM tvi;
/* Total no-good hack */
if (!_tcsncmp(keyPath, _T("My Computer\\"), 12))
if (!_tcsnicmp(keyPath, _T("My Computer\\"), 12))
keyPath += 12;
hRoot = TreeView_GetRoot(hwndTV);
@ -647,17 +647,17 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
/* Special case for root to expand root key abbreviations */
if (hItem == hRoot)
{
if (!_tcscmp(szPathPart, TEXT("HKCR")))
if (!_tcsicmp(szPathPart, TEXT("HKCR")))
_tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
else if (!_tcscmp(szPathPart, TEXT("HKCU")))
else if (!_tcsicmp(szPathPart, TEXT("HKCU")))
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
else if (!_tcscmp(szPathPart, TEXT("HKLM")))
else if (!_tcsicmp(szPathPart, TEXT("HKLM")))
_tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
else if (!_tcscmp(szPathPart, TEXT("HKU")))
else if (!_tcsicmp(szPathPart, TEXT("HKU")))
_tcscpy(szPathPart, TEXT("HKEY_USERS"));
else if (!_tcscmp(szPathPart, TEXT("HKCC")))
else if (!_tcsicmp(szPathPart, TEXT("HKCC")))
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
else if (!_tcscmp(szPathPart, TEXT("HKDD")))
else if (!_tcsicmp(szPathPart, TEXT("HKDD")))
_tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
}
@ -672,7 +672,7 @@ BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
(void)TreeView_GetItem(hwndTV, &tvi);
if (!_tcscmp(szBuffer, szPathPart))
if (!_tcsicmp(szBuffer, szPathPart))
break;
}

View file

@ -641,10 +641,10 @@ BEGIN
IDS_MSG_UNABLEDEBUGPROCESS "Отладка процесса невозможна"
IDS_MSG_WARNINGDEBUG "ВНИМАНИЕ: Отладка этого процесса может закончиться потерей данных.\nВы уверены, что можно продолжать?"
IDS_MSG_TASKMGRWARNING "Ошибка Менеджера задач"
IDS_MSG_WARNINGTERMINATING "ВНИМАНИЕ: Завершение процесса может повлеч неустойчивую работу системы и потерю данных\nСохраните важные данные перед продолжением.\nПродолжить завершение процесса?"
IDS_MSG_WARNINGTERMINATING "ВНИМАНИЕ: Завершение процесса может повлечь неустойчивую работу системы и потерю данных\nСохраните важные данные перед продолжением.\nПродолжить завершение процесса?"
IDS_MSG_UNABLETERMINATEPRO "Не удалось завершить процесс"
IDS_MSG_UNABLECHANGEPRIORITY "Не удалось изменить приоритет"
IDS_MSG_WARNINGCHANGEPRIORITY "ВНИМАНИЕ: Изменение приоритета может повлеч неустойчивую работу и потерю данных.\nВы уверены, что можно продолжать?"
IDS_MSG_WARNINGCHANGEPRIORITY "ВНИМАНИЕ: Изменение приоритета может повлечь неустойчивую работу и потерю данных.\nВы уверены, что можно продолжать?"
IDS_MSG_TRAYICONCPUUSAGE "Загрузка ЦП: %d%%"
IDS_STATUS_MEMUSAGE "Выделение памяти: %dK / %dK"
IDS_STATUS_CPUUSAGE "Загрузка ЦП: %3d%%"

View file

@ -1,7 +1,7 @@
/* TRANSLATOR: M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR: 22-01-2008
* Encoding : Latin II (852)
* LastChange: 31-05-2010
* LastChange: 05-09-2010
*/
#pragma once
@ -993,13 +993,13 @@ static MUI_ENTRY skSKBootLoaderEntries[] =
{
8,
12,
"Install bootloader on the harddisk (MBR and VBR).",
"Nainçtalovaś zav dzaź systmu na pevně disk (MBR a VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Install bootloader on the harddisk (VBR only).",
"Nainçtalovaś zav dzaź systmu na pevně disk (iba VBR).",
TEXT_STYLE_NORMAL
},
{

View file

@ -1,9 +1,9 @@
/* Slovak translation for CMD
* TRANSLATOR: Mário Kaèmár /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR: 21-03-2009
* LastChange: 21-06-2009
* LastChange: 10-08-2010
* _________________________________________________________________
* NOTE : this file is not really translated (only scrap yet)
* NOTE : this file is not fully translated
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@ -118,7 +118,7 @@ dec hex name dec hex name\n\
6 6 Yellow 14 E Bright Yellow\n\
7 7 White 15 F Bright White\n"
STRING_COPY_HELP1, "Overwrite %s (Yes/No/All)? "
STRING_COPY_HELP1, "Prepísa<EFBFBD> %s (Yes/No/All)? "
STRING_COPY_HELP2, "Skopíruje jeden alebo viac súborov na iné umiestnenie.\n\n\
COPY [/V][/Y|/-Y][/A|/B] source [/A|/B]\n\
@ -141,7 +141,7 @@ STRING_DATE_HELP2, "\nZadajte nov
STRING_DATE_HELP3, "\nZadajte nový dátum (rrrr%cmm%cdd): "
STRING_DATE_HELP4, "Displays or sets the date.\n\n\
STRING_DATE_HELP4, "Zobrazí alebo nastaví dátum.\n\n\
DATE [/T][date]\n\n\
/T display only\n\n\
Type DATE without parameters to display the current date setting and\n\
@ -469,7 +469,7 @@ STRING_TITLE_HELP, "Sets the window title for the command prompt window.\n\n\
TITLE [string]\n\n\
string Specifies the title for the command prompt window.\n"
STRING_TIME_HELP1, "Displays or sets the system time.\n\n\
STRING_TIME_HELP1, "Zobrazí alebo nastaví systémový èas.\n\n\
TIME [/T][time]\n\n\
/T display only\n\n\
Type TIME with no parameters to display the current time setting and a prompt\n\
@ -547,18 +547,18 @@ STRING_WINDOW_HELP1, "change console window aspect\n\n\
WINDOW [/POS[=]left,top,width,heigth]\n\
[MIN|MAX|RESTORE] ['title']\n\n\
/POS specify window placement and dimensions\n\
MIN minimize the window\n\
MAX maximize the window\n\
RESTORE restore the window"
MIN minimalizova<EFBFBD> okno\n\
MAX maximalizujte okno\n\
RESTORE obnovi<EFBFBD> okno"
STRING_WINDOW_HELP2, "change console window aspect\n\n\
ACTIVATE 'window' [/POS[=]left,top,width,heigth]\n\
[MIN|MAX|RESTORE] ['title']\n\n\
window tile of window on which perform actions\n\
/POS specify window placement and dimensions\n\
MIN minimize the window\n\
MAX maximize the window\n\
RESTORE restore the window\n\
MIN minimalizova<EFBFBD> okno\n\
MAX maximalizujte okno\n\
RESTORE obnovi<EFBFBD> okno\n\
title new title\n"
@ -576,7 +576,7 @@ CLS Vyma
CMD Starts a new instance of the ReactOS command interpreter.\n\
COLOR Sets the default console foreground and background colors.\n\
COPY Skopíruje jeden alebo viac súborov na iné umiestnenie.\n\
DATE Displays or sets the date.\n\
DATE Zobrazí alebo nastaví dátum.\n\
DELETE Deletes one or more files.\n\
DIR Displays a list of files and subdirectories in a directory.\n\
ECHO Displays messages, or turns command echoing on or off.\n\
@ -590,8 +590,8 @@ HELP Provides Help information for ReactOS commands.\n\
HISTORY List all commands which has been used\n\
IF Performs conditional processing in batch programs.\n\
LABEL Creates, changes, or deletes the volume label of a disk.\n\
MD Creates a directory.\n\
MKDIR Creates a directory.\n\
MD Vytvorí adresár.\n\
MKDIR Vytvorí adresár.\n\
MKLINK Creates a filesystem link object.\n\
MOVE Moves one or more files from one directory to another\n\
directory.\n\
@ -603,8 +603,8 @@ PROMPT Changes the command prompt.\n\
PUSHD Saves the current directory then changes it.\n\
RD Removes a directory.\n\
REM Records comments (remarks) in batch files.\n\
REN Renames a file or files.\n\
RENAME Renames a file or files.\n\
REN Premenuje súbor alebo súbory.\n\
RENAME Premenuje súbor alebo súbory.\n\
REPLACE Replaces files.\n\
RMDIR Removes a directory.\n\
SCREEN Move cursor and optionally print text.\n\
@ -612,7 +612,7 @@ SET Displays, sets, or removes ReactOS environment variables.\n\
SHIFT Shifts the position of replaceable parameters in batch files.\n"
STRING_HELP2, "START Starts a separate window to run a specified program or command.\n\
Executes command.\n\
TIME Displays or sets the system time.\n\
TIME Zobrazí alebo nastaví systémový èas.\n\
TIMER Allow the use of ten stopwatches.\n\
TITLE Sets the window title for a CMD.EXE session.\n\
TYPE Displays the contents of a text file.\n\
@ -651,9 +651,9 @@ STRING_COPY_ERROR3, "Error writing destination!\n"
STRING_COPY_ERROR4, "Chyba: Zatia¾ neimplementované!\n" //Not implemented yet
STRING_DATE_ERROR, "Neplatný dátum."
STRING_DEL_ERROR5, "The file %s will be deleted! "
STRING_DEL_ERROR6, "Are you sure (Y/N)?"
STRING_DEL_ERROR6, "Ste si istý (Y/N)?"
STRING_DEL_ERROR7, "Deleting: %s\n"
STRING_ERROR_ERROR1, "Unknown error! Error code: 0x%lx\n"
STRING_ERROR_ERROR1, "Neznáma chyba! Kód chyby: 0x%lx\n"
STRING_ERROR_ERROR2, "Syntax error"
STRING_FOR_ERROR1, "'in' missing in for statement."
STRING_FOR_ERROR2, "no brackets found."
@ -675,47 +675,47 @@ STRING_TIME_ERROR1, "Neplatn
STRING_TYPE_ERROR1, "Invalid option '/%s'\n"
STRING_WINDOW_ERROR1, "window not found"
STRING_WINDOW_ERROR1, "okno sa nenašlo"
STRING_ERROR_PARAMETERF_ERROR, "Parameter format not correct - %c\n"
STRING_ERROR_INVALID_SWITCH, "Invalid switch - /%c\n"
STRING_ERROR_INVALID_SWITCH, "Neplatný prepínaè - /%c\n"
STRING_ERROR_TOO_MANY_PARAMETERS, "Príliš ve¾a parametrov - %s\n"
STRING_ERROR_PATH_NOT_FOUND, "Path not found\n"
STRING_ERROR_FILE_NOT_FOUND, "File not found\n"
STRING_ERROR_PATH_NOT_FOUND, "Cesta sa nenašla\n"
STRING_ERROR_FILE_NOT_FOUND, "Súbor sa nenašiel\n"
STRING_ERROR_REQ_PARAM_MISSING, "Required parameter missing\n"
STRING_ERROR_INVALID_DRIVE, "Invalid drive specification\n"
STRING_ERROR_INVALID_PARAM_FORMAT, "Invalid parameter format - %s\n"
STRING_ERROR_BADCOMMAND, "Bad command or filename - %s\n"
STRING_ERROR_BADCOMMAND, "Chybný príkaz alebo názov súboru - %s\n"
STRING_ERROR_OUT_OF_MEMORY, "Chyba (z) nedostatku pamäte.\n" //Out of memory error.
STRING_ERROR_CANNOTPIPE, "Error! Cannot pipe! Cannot open temporary file!\n"
STRING_ERROR_CANNOTPIPE, "Chyba! Cannot pipe! Cannot open temporary file!\n"
STRING_ERROR_D_PAUSEMSG, "Pokraèujte stlaèením ¾ubovo¾ného klávesu ..."
STRING_ERROR_DRIVER_NOT_READY, "Drive not ready"
STRING_ERROR_DRIVER_NOT_READY, "Jednotka nie je pripravená"
STRING_PATH_ERROR, "CMD: Not in environment '%s'\n"
STRING_REPLACE_ERROR1, "Invalid switch - %s\n"
STRING_REPLACE_ERROR2, "Path not found - %s\n"
STRING_REPLACE_ERROR1, "Neplatný prepínaè - %s\n"
STRING_REPLACE_ERROR2, "Cesta sa nenašla - %s\n"
STRING_REPLACE_ERROR3, "The filename, directory name, or volume label syntax is incorrect.\n"
STRING_REPLACE_ERROR4, "Invalid parameter combination\n"
STRING_REPLACE_ERROR5, "Access denied - %s\n"
STRING_REPLACE_ERROR6, "No files found - %s\n"
STRING_REPLACE_ERROR5, "Prístup zamietnutý - %s\n"
STRING_REPLACE_ERROR6, "Žiadne súbory sa nenašli - %s\n"
STRING_REPLACE_ERROR7, "Extended Error 32\n"
STRING_REACTOS_VERSION, "Operaèný systém ReactOS [Verzia %s-%s]\n"
STRING_CMD_SHELLINFO, "\nReactOS Command Line Interpreter\nVerzia %s %s"
STRING_CMD_SHELLINFO, "\nInterpréter príkazového riadku systému ReactOS\nVerzia %s %s"
STRING_VERSION_RUNVER, " running on %s"
STRING_COPY_FILE , " %d súbor(ov) skopírovaný(ch)\n"
STRING_DELETE_WIPE, "wiped"
STRING_FOR_ERROR, "bad variable specification."
STRING_SCREEN_COL, "invalid value for col"
STRING_SCREEN_ROW, "invalid value for row"
STRING_SCREEN_COL, "neplatná hodnota pre ståpec"
STRING_SCREEN_ROW, "neplatná hodnota pre riadok"
STRING_TIMER_TIME "Timer %d is %s: "
STRING_MKLINK_CREATED_SYMBOLIC, "Symbolic link created for %s <<===>> %s\n"
STRING_MKLINK_CREATED_HARD, "Hard link created for %s <<===>> %s\n"
STRING_MKLINK_CREATED_JUNCTION, "Junction created for %s <<===>> %s\n"
STRING_MORE, "Viac? " //"More? "
STRING_CANCEL_BATCH_FILE, "\r\nCtrl-Break pressed. Cancel batch file? (Yes/No/All) "
STRING_CANCEL_BATCH_FILE, "\r\nStlaèené Ctrl-Break. Cancel batch file? (Yes/No/All) "
STRING_INVALID_OPERAND, "Invalid operand."
STRING_EXPECTED_CLOSE_PAREN, "Oèakávaná ')'."

View file

@ -48,6 +48,19 @@ SIZEDEFINITION LegalSizes[] = {
};
int LoadStringAndOem(HINSTANCE hInst,
UINT uID,
LPTSTR szStr,
int Siz
)
{
TCHAR szTmp[RC_STRING_MAX_SIZE];
int res = LoadString(hInst, uID, szTmp, sizeof(szTmp));
CharToOem(szTmp, szStr);
return(res);
}
//----------------------------------------------------------------------
//
// PrintWin32Error
@ -171,7 +184,7 @@ FormatExCallback (
case PROGRESS:
percent = (PDWORD) Argument;
LoadString( GetModuleHandle(NULL), STRING_COMPLETE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_COMPLETE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf(szMsg, *percent);
break;
@ -184,7 +197,7 @@ FormatExCallback (
status = (PBOOLEAN) Argument;
if( *status == FALSE ) {
LoadString( GetModuleHandle(NULL), STRING_FORMAT_FAIL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_FORMAT_FAIL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf("%s", szMsg);
Error = TRUE;
}
@ -203,7 +216,7 @@ FormatExCallback (
case UNKNOWND:
case STRUCTUREPROGRESS:
case CLUSTERSIZETOOSMALL:
LoadString( GetModuleHandle(NULL), STRING_NO_SUPPORT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_SUPPORT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf("%s", szMsg);
return FALSE;
}
@ -261,7 +274,7 @@ static VOID Usage( LPTSTR ProgramName )
BYTE dummy;
BOOLEAN lastestVersion;
LoadString( GetModuleHandle(NULL), STRING_HELP, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_HELP, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
if (!LoadFMIFSEntryPoints())
{
_tprintf(szMsg, ProgramName, _T(""));
@ -319,7 +332,7 @@ _tmain(int argc, TCHAR *argv[])
// Get function pointers
//
if( !LoadFMIFSEntryPoints()) {
LoadString( GetModuleHandle(NULL), STRING_FMIFS_FAIL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_FMIFS_FAIL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf("%s", szMsg);
return -1;
}
@ -329,7 +342,7 @@ _tmain(int argc, TCHAR *argv[])
//
if( (badArg = ParseCommandLine( argc, argv ))) {
LoadString( GetModuleHandle(NULL), STRING_UNKNOW_ARG, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_UNKNOW_ARG, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf(szMsg, argv[badArg] );
Usage(argv[0]);
@ -341,7 +354,7 @@ _tmain(int argc, TCHAR *argv[])
//
if( !Drive ) {
LoadString( GetModuleHandle(NULL), STRING_DRIVE_PARM, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_DRIVE_PARM, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf(szMsg);
Usage( argv[0] );
return -1;
@ -359,7 +372,7 @@ _tmain(int argc, TCHAR *argv[])
driveType = GetDriveType( RootDirectory );
if( driveType == 0 ) {
LoadString( GetModuleHandle(NULL), STRING_ERROR_DRIVE_TYPE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_ERROR_DRIVE_TYPE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
PrintWin32Error( szMsg, GetLastError());
return -1;
}
@ -371,7 +384,7 @@ _tmain(int argc, TCHAR *argv[])
}
if( driveType != DRIVE_FIXED ) {
LoadString( GetModuleHandle(NULL), STRING_INSERT_DISK, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_INSERT_DISK, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf(szMsg, RootDirectory[0] );
_fgetts( input, sizeof(input)/2, stdin );
@ -386,7 +399,7 @@ _tmain(int argc, TCHAR *argv[])
&serialNumber, &maxComponent, &flags,
fileSystem, sizeof(fileSystem)/2)) {
LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
PrintWin32Error( szMsg, GetLastError());
return -1;
}
@ -396,11 +409,11 @@ _tmain(int argc, TCHAR *argv[])
&totalNumberOfBytes,
&totalNumberOfFreeBytes )) {
LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME_SIZE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME_SIZE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
PrintWin32Error( szMsg, GetLastError());
return -1;
}
LoadString( GetModuleHandle(NULL), STRING_FILESYSTEM, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_FILESYSTEM, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf(szMsg, fileSystem );
//
@ -412,7 +425,7 @@ _tmain(int argc, TCHAR *argv[])
while(1 ) {
LoadString( GetModuleHandle(NULL), STRING_LABEL_NAME_EDIT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_LABEL_NAME_EDIT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf(szMsg, RootDirectory[0] );
_fgetts( input, sizeof(input)/2, stdin );
input[ _tcslen( input ) - 1] = 0;
@ -421,15 +434,15 @@ _tmain(int argc, TCHAR *argv[])
break;
}
LoadString( GetModuleHandle(NULL), STRING_ERROR_LABEL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_ERROR_LABEL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf("%s", szMsg);
}
}
LoadString( GetModuleHandle(NULL), STRING_YN_FORMAT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_YN_FORMAT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf(szMsg, RootDirectory[0] );
LoadString( GetModuleHandle(NULL), STRING_YES_NO_FAQ, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_YES_NO_FAQ, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
while( 1 ) {
_fgetts( input, sizeof(input)/2, stdin );
@ -460,7 +473,7 @@ _tmain(int argc, TCHAR *argv[])
}
} else {
LoadString( GetModuleHandle(NULL), STRING_FAST_FMT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_FAST_FMT, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
if( totalNumberOfBytes.QuadPart > 1024*1024*10 ) {
_tprintf(_T("%s %luM\n"),szMsg, (DWORD) (totalNumberOfBytes.QuadPart/(1024*1024)));
@ -470,7 +483,7 @@ _tmain(int argc, TCHAR *argv[])
_tprintf(_T("%s %.2fM\n"),szMsg,
((float)(LONGLONG)totalNumberOfBytes.QuadPart)/(float)(1024.0*1024.0));
}
LoadString( GetModuleHandle(NULL), STRING_CREATE_FSYS, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_CREATE_FSYS, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf("%s", szMsg);
}
@ -488,7 +501,7 @@ _tmain(int argc, TCHAR *argv[])
ClusterSize, FormatExCallback );
#endif
if( Error ) return -1;
LoadString( GetModuleHandle(NULL), STRING_FMT_COMPLETE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_FMT_COMPLETE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf("%s", szMsg);
//
@ -503,7 +516,7 @@ _tmain(int argc, TCHAR *argv[])
if( !EnableVolumeCompression( RootDirectory, TRUE )) {
#endif
LoadString( GetModuleHandle(NULL), STRING_VOL_COMPRESS, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_VOL_COMPRESS, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf("%s", szMsg);
}
}
@ -520,7 +533,7 @@ _tmain(int argc, TCHAR *argv[])
input[ _tcslen(input)-1] = 0;
if( !SetVolumeLabel( RootDirectory, input )) {
LoadString( GetModuleHandle(NULL), STRING_NO_LABEL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_LABEL, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
PrintWin32Error(szMsg, GetLastError());
return -1;
}
@ -531,7 +544,7 @@ _tmain(int argc, TCHAR *argv[])
&serialNumber, &maxComponent, &flags,
fileSystem, sizeof(fileSystem)/2)) {
LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
PrintWin32Error( szMsg, GetLastError());
return -1;
}
@ -544,12 +557,12 @@ _tmain(int argc, TCHAR *argv[])
&totalNumberOfBytes,
&totalNumberOfFreeBytes )) {
LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME_SIZE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME_SIZE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
PrintWin32Error(szMsg, GetLastError());
return -1;
}
LoadString( GetModuleHandle(NULL), STRING_FREE_SPACE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_FREE_SPACE, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf(szMsg, totalNumberOfBytes.QuadPart, totalNumberOfFreeBytes.QuadPart );
//
@ -560,11 +573,11 @@ _tmain(int argc, TCHAR *argv[])
&serialNumber, &maxComponent, &flags,
fileSystem, sizeof(fileSystem)/2)) {
LoadString( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_NO_VOLUME, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
PrintWin32Error( szMsg, GetLastError());
return -1;
}
LoadString( GetModuleHandle(NULL), STRING_SERIAL_NUMBER, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
LoadStringAndOem( GetModuleHandle(NULL), STRING_SERIAL_NUMBER, (LPTSTR) szMsg,RC_STRING_MAX_SIZE);
_tprintf(szMsg, (unsigned int)(serialNumber >> 16),
(unsigned int)(serialNumber & 0xFFFF) );

View file

@ -1,6 +1,6 @@
/* TRANSLATOR : M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
* DATE OF TR.: 15-02-2008
* LAST CHANGE: 08-08-2008
* LAST CHANGE: 10-08-2010
*/
#include "resource.h"
@ -14,14 +14,14 @@ STRING_HELP, "Pou
-FS:systm s£borov UrŸuje typ s£borovho systmu (%s).\n\
-V:menovka UrŸuje menovku zv„zku.\n\
-Q Vykon va rìchle form tovanie.\n\
-A:vekosœ Overrides the default allocation unit size. Default settings\n\
are strongly recommended for general use\n\
NTFS supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.\n\
FAT supports 8192, 16K, 32K, 64K, 128K, 256K.\n\
NTFS compression is not supported for allocation unit sizes\n\
above 4096.\n\
-C Files created on the new volume will be compressed by\n\
default.\n\n"
-A:vekosś Prepˇçe predvolenŁ vekosś alokaźnej jednotky. Pre vçeobecn\n\
pou§itie sŁ d“razne odporŁźan predvolen nastavenia\n\
NTFS podporuje 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.\n\
FAT podporuje 8192, 16K, 32K, 64K, 128K, 256K.\n\
NTFS kompresia nie je podporovan  pre vekosti alokaźnej\n\
jednotky nad 4096.\n\
-C SŁbory vytvoren na novom zv„zku budŁ automaticky\n\
komprimovan.\n\n"
STRING_COMPLETE "DokonŸen na %lu percent.\r"
@ -29,19 +29,19 @@ STRING_FORMAT_FAIL "FormatEx nebol schopn
STRING_NO_SUPPORT "Oper cia nie je podporovan "
STRING_FMIFS_FAIL "Could not located FMIFS entry points.\n\n"
STRING_FMIFS_FAIL "Nepodarilo sa lokalizovaś vstupn body FMIFS.\n\n"
STRING_UNKNOW_ARG "Nezn my argument: %s\n"
STRING_DRIVE_PARM "Chìba nevyhnutnì parameter jednotky.\n\n"
STRING_ERROR_DRIVE_TYPE "Could not get drive type"
STRING_ERROR_DRIVE_TYPE "Nemo§no zˇskaś typ jednotky"
STRING_INSERT_DISK "Vlo§te nov£ disketu do jednotky %C:\na potom stlaŸte ENTER..."
STRING_NO_VOLUME "Could not query volume"
STRING_NO_VOLUME "Nemo§no dotazovaś zv„zok"
STRING_NO_VOLUME_SIZE "Could not query volume size"
STRING_NO_VOLUME_SIZE "Nemo§no dotazovaś vekosś zv„zku"
STRING_FILESYSTEM "Typ systmu s£borov je %s.\n"
@ -49,8 +49,8 @@ STRING_LABEL_NAME_EDIT "Vlo
STRING_ERROR_LABEL "Bola zadan  nespr vna menovka zv„zku pre t£to jednotku.\n"
STRING_YN_FORMAT "\nWARNING, ALL DATA ON NON_REMOVABLE DISK\n\
DRIVE %C: WILL BE LOST!\nProceed with Format (A/N)? "
STRING_YN_FORMAT "\nUPOZORNENIE: VćETKY éDAJE NA NIE_VYMENITE•NEJ DISKOVEJ\n\
JEDNOTKE %C: BUDé STRATEN<45>!\nPokraźovaś s form tovanˇm (A/N)? "
STRING_YES_NO_FAQ "AN"

View file

@ -66,6 +66,19 @@ ULONG BaudRate = 115200;
BOOLEAN DebugStartOfLine = TRUE;
// We need to emulate these, because the original ones don't work in freeldr
int __cdecl wctomb(char *mbchar, wchar_t wchar)
{
*mbchar = wchar;
return 1;
}
int __cdecl mbtowc (wchar_t *wchar, const char *mbchar, size_t count)
{
*wchar = *mbchar;
return 1;
}
VOID DebugInit(VOID)
{
if (DebugPort & RS232)

View file

@ -1,34 +1,19 @@
/*
* KSUSER.DLL - ReactOS
*
* Copyright 2008 Magnus Olsen and Dmitry Chapyshev
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: dll/directx/ksuser/ksuser.c
* PURPOSE: KS USER functions
* PROGRAMMER: Magnus Olsen and Dmitry Chapyshev and Johannes Anderwald
*/
#include "ksuser.h"
#define NDEBUG
#include <debug.h>
NTSTATUS NTAPI KsiCreateObjectType( HANDLE hHandle, PVOID guidstr, PVOID Buffer, ULONG BufferSize, ACCESS_MASK DesiredAccess, PHANDLE phHandle);
NTSTATUS
NTAPI
KsiCreateObjectType( HANDLE hHandle,
PVOID IID,
LPWSTR ObjectType,
PVOID Buffer,
ULONG BufferSize,
ACCESS_MASK DesiredAccess,
@ -42,31 +27,56 @@ KsiCreateObjectType( HANDLE hHandle,
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK IoStatusBlock;
Length = wcslen(IID);
/* get length of object type */
Length = wcslen(ObjectType);
TotalSize = (Length * sizeof(WCHAR)) + BufferSize + 4 * sizeof(WCHAR);
/* get length for request */
TotalSize = (Length * sizeof(WCHAR)) + BufferSize;
/* append space for '\\'*/
TotalSize += sizeof(WCHAR);
/* allocate buffer */
pStr = HeapAlloc(GetProcessHeap(), 0, TotalSize);
if (!pStr)
return STATUS_INSUFFICIENT_RESOURCES;
pStr[0] = L'\\';
wcscpy(&pStr[1], (LPWSTR)IID);
pStr[Length+1] = L'\\';
memcpy(&pStr[Length+2], Buffer, BufferSize);
pStr[Length+3+(BufferSize/sizeof(WCHAR))] = L'\0';
{
/* out of memory */
return ERROR_NOT_ENOUGH_MEMORY;
}
RtlInitUnicodeString(&ObjectName, pStr);
/* copy object type */
wcscpy(pStr, ObjectType);
/* append slash */
pStr[Length] = L'\\';
/* append parameters */
memcpy(&pStr[Length+1], Buffer, BufferSize);
/* initialize object name */
ObjectName.Buffer = pStr;
ObjectName.Length = ObjectName.MaximumLength = TotalSize;
/* initialize object attributes */
InitializeObjectAttributes(&ObjectAttributes, &ObjectName, OBJ_CASE_INSENSITIVE, hHandle, NULL);
/* create the object */
Status = NtCreateFile(phHandle, DesiredAccess, &ObjectAttributes, &IoStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL, 0, 1, 0, NULL, 0);
/* free buffer */
HeapFree(GetProcessHeap(), 0, pStr);
/* check for success */
if (!NT_SUCCESS(Status))
{
/* failed zero handle */
*phHandle = INVALID_HANDLE_VALUE;
/* convert error code */
Status = RtlNtStatusToDosError(Status);
}
/* done */
return Status;
}

View file

@ -256,7 +256,7 @@ LdrpQueryAppPaths(IN PCWSTR ImageName)
/* Copy it to the heap allocd memory */
Path = RtlAllocateHeap(RtlGetProcessHeap(),
0,
wcslen(SearchPathBuffer) * sizeof(WCHAR));
(wcslen(SearchPathBuffer) + 1) * sizeof(WCHAR));
if (!Path)
{

View file

@ -143,18 +143,37 @@ LsaDelete(IN LSA_HANDLE ObjectHandle)
/*
* @unimplemented
* @implemented
*/
NTSTATUS
WINAPI
LsaAddAccountRights(
LSA_HANDLE PolicyHandle,
PSID AccountSid,
PLSA_UNICODE_STRING UserRights,
ULONG CountOfRights)
LsaAddAccountRights(IN LSA_HANDLE PolicyHandle,
IN PSID AccountSid,
IN PLSA_UNICODE_STRING UserRights,
IN ULONG CountOfRights)
{
FIXME("(%p,%p,%p,0x%08x) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights);
return STATUS_OBJECT_NAME_NOT_FOUND;
LSAPR_USER_RIGHT_SET UserRightSet;
NTSTATUS Status;
TRACE("(%p,%p,%p,0x%08x) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights);
UserRightSet.Entries = CountOfRights;
UserRightSet.UserRights = (PRPC_UNICODE_STRING)UserRights;
RpcTryExcept
{
Status = LsarAddAccountRights((LSAPR_HANDLE)PolicyHandle,
(PRPC_SID)AccountSid,
&UserRightSet);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
RpcEndExcept;
return Status;
}
@ -265,6 +284,7 @@ LsaCreateTrustedDomainEx(
return STATUS_SUCCESS;
}
/*
* @implemented
*/
@ -291,16 +311,16 @@ LsaDeleteTrustedDomain(IN LSA_HANDLE PolicyHandle,
return Status;
}
/*
* @implemented
*/
NTSTATUS
WINAPI
LsaEnumerateAccountRights(
LSA_HANDLE PolicyHandle,
PSID AccountSid,
PLSA_UNICODE_STRING *UserRights,
PULONG CountOfRights)
LsaEnumerateAccountRights(IN LSA_HANDLE PolicyHandle,
IN PSID AccountSid,
OUT PLSA_UNICODE_STRING *UserRights,
OUT PULONG CountOfRights)
{
LSAPR_USER_RIGHT_SET UserRightsSet;
NTSTATUS Status;
@ -333,6 +353,7 @@ LsaEnumerateAccountRights(
return Status;
}
/*
* @unimplemented
*/
@ -385,17 +406,19 @@ LsaEnumerateTrustedDomainsEx(
return STATUS_SUCCESS;
}
/*
* @implemented
*/
NTSTATUS
WINAPI
LsaFreeMemory(PVOID Buffer)
LsaFreeMemory(IN PVOID Buffer)
{
TRACE("(%p)\n", Buffer);
return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer);
}
/*
* @implemented
*/
@ -446,6 +469,7 @@ LsaLookupNames(IN LSA_HANDLE PolicyHandle,
return Status;
}
/*
* @unimplemented
*/
@ -470,8 +494,9 @@ LsaLookupNames2(
return STATUS_NONE_MAPPED;
}
/*
* @unmplemented
* @implemented
*/
NTSTATUS
WINAPI
@ -504,6 +529,7 @@ LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle,
return Status;
}
/*
* @implemented
*/
@ -535,6 +561,7 @@ LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle,
return Status;
}
/*
* @implemented
*/
@ -591,6 +618,7 @@ LsaLookupSids(IN LSA_HANDLE PolicyHandle,
return Status;
}
/******************************************************************************
* LsaNtStatusToWinError
*
@ -599,7 +627,8 @@ LsaLookupSids(IN LSA_HANDLE PolicyHandle,
*
* @implemented
*/
ULONG WINAPI
ULONG
WINAPI
LsaNtStatusToWinError(IN NTSTATUS Status)
{
TRACE("(%lx)\n", Status);
@ -747,6 +776,7 @@ LsaQueryForestTrustInformation(
return STATUS_NOT_IMPLEMENTED;
}
/*
* @implemented
*/
@ -782,20 +812,6 @@ LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle,
return Status;
}
/*
* @unimplemented
*/
NTSTATUS
WINAPI
LsaQueryTrustedDomainInfoByName(
LSA_HANDLE PolicyHandle,
PLSA_UNICODE_STRING TrustedDomainName,
TRUSTED_INFORMATION_CLASS InformationClass,
PVOID *Buffer)
{
FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainName, InformationClass, Buffer);
return STATUS_OBJECT_NAME_NOT_FOUND;
}
/*
* @unimplemented
@ -812,22 +828,78 @@ LsaQueryTrustedDomainInfo(
return STATUS_OBJECT_NAME_NOT_FOUND;
}
/*
* @unimplemented
* @implemented
*/
NTSTATUS
WINAPI
LsaRemoveAccountRights(
LSA_HANDLE PolicyHandle,
PSID AccountSid,
BOOLEAN AllRights,
PLSA_UNICODE_STRING UserRights,
ULONG CountOfRights)
LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle,
IN PLSA_UNICODE_STRING TrustedDomainName,
IN TRUSTED_INFORMATION_CLASS InformationClass,
OUT PVOID *Buffer)
{
FIXME("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle, AccountSid, AllRights, UserRights, CountOfRights);
NTSTATUS Status;
TRACE("(%p,%p,%d,%p)\n", PolicyHandle, TrustedDomainName, InformationClass, Buffer);
if (InformationClass == TrustedDomainAuthInformationInternal ||
InformationClass == TrustedDomainFullInformationInternal)
return STATUS_INVALID_INFO_CLASS;
RpcTryExcept
{
Status = LsarQueryTrustedDomainInfoByName((LSAPR_HANDLE)PolicyHandle,
(PRPC_UNICODE_STRING)TrustedDomainName,
InformationClass,
(unsigned long *)Buffer); // Shuld be: (PLSAPR_POLICY_INFORMATION *)Buffer
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
RpcEndExcept;
return Status;
}
/*
* @implemented
*/
NTSTATUS
WINAPI
LsaRemoveAccountRights(IN LSA_HANDLE PolicyHandle,
IN PSID AccountSid,
IN BOOLEAN AllRights,
IN PLSA_UNICODE_STRING UserRights,
IN ULONG CountOfRights)
{
LSAPR_USER_RIGHT_SET UserRightSet;
NTSTATUS Status;
TRACE("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle, AccountSid, AllRights, UserRights, CountOfRights);
UserRightSet.Entries = CountOfRights;
UserRightSet.UserRights = (PRPC_UNICODE_STRING)UserRights;
RpcTryExcept
{
Status = LsarRemoveAccountRights((LSAPR_HANDLE)PolicyHandle,
(PRPC_SID)AccountSid,
AllRights,
&UserRightSet);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
RpcEndExcept;
return STATUS_SUCCESS;
}
/*
* @unimplemented
*/

View file

@ -413,7 +413,7 @@ RaiseException(IN DWORD dwExceptionCode,
}
}
if (dwExceptionCode == 0xeedface)
if (dwExceptionCode == 0xeedface || dwExceptionCode == 0xeedfade)
{
DPRINT1("Delphi Exception at address: %p\n", ExceptionRecord.ExceptionInformation[0]);
DPRINT1("Exception-Object: %p\n", ExceptionRecord.ExceptionInformation[1]);

View file

@ -2860,7 +2860,7 @@ Initialize(TcpipConfNotifyImpl * This)
}
pCurSettings->AutoconfigActive = pPerInfo->AutoconfigActive;
}
CoTaskMemFree(pInfo);
CoTaskMemFree(pPerInfo);
}
}

View file

@ -1987,10 +1987,47 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(
PCWSTR pszFilter, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags,
HMACHINE hMachine)
{
FIXME("%p %p %ld %ld %lx\n",
RPC_BINDING_HANDLE BindingHandle = NULL;
CONFIGRET ret;
TRACE("%p %p %ld %ld %lx\n",
pszFilter, Buffer, BufferLen, ulFlags, hMachine);
memset(Buffer,0,2);
return CR_SUCCESS;
if (Buffer == NULL || BufferLen == 0)
return CR_INVALID_POINTER;
if (ulFlags & ~CM_GETIDLIST_FILTER_BITS)
return CR_INVALID_FLAG;
if (hMachine != NULL)
{
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
if (BindingHandle == NULL)
return CR_FAILURE;
}
else
{
if (!PnpGetLocalHandles(&BindingHandle, NULL))
return CR_FAILURE;
}
*Buffer = 0;
RpcTryExcept
{
ret = PNP_GetDeviceList(BindingHandle,
pszFilter,
Buffer,
&BufferLen,
ulFlags);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
ret = RpcStatusToCmStatus(RpcExceptionCode());
}
RpcEndExcept;
return ret;
}

View file

@ -395,7 +395,6 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive)
{
WCHAR szResult[128];
LONGLONG Result;
#ifdef IOCTL_DISK_GET_LENGTH_INFO_IMPLEMENTED
HANDLE hVolume;
DWORD BytesReturned = 0;
@ -404,16 +403,13 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive)
if (hVolume != INVALID_HANDLE_VALUE)
{
ret = DeviceIoControl(hVolume, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, (LPVOID)&TotalNumberOfBytes, sizeof(ULARGE_INTEGER), &BytesReturned, NULL);
if (ret && StrFormatByteSizeW(LengthInformation.Length.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
if (ret && StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);
CloseHandle(hVolume);
}
TRACE("szResult %s hVOlume %p ret %d LengthInformation %ul Bytesreturned %d\n", debugstr_w(szResult), hVolume, ret, LengthInformation.Length.QuadPart, BytesReturned);
#else
if (ret && StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);
#endif
TRACE("szResult %s hVOlume %p ret %d LengthInformation %ul Bytesreturned %d\n", debugstr_w(szResult), hVolume, ret, TotalNumberOfBytes.QuadPart, BytesReturned);
if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR)))
SendDlgItemMessageW(hwndDlg, 14003, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult);

View file

@ -46,6 +46,7 @@ add_importlibs(shlwapi
version
shell32
kernel32
msvcrt
ntdll)

View file

@ -154,49 +154,18 @@ CallMsgFilterA(
LPMSG lpMsg,
int nCode)
{
BOOL ret = FALSE;
if (nCode != HCBT_CREATEWND) ret = NtUserCallMsgFilter((LPMSG) lpMsg, nCode);
else
{
UNICODE_STRING usBuffer;
CBT_CREATEWNDA *cbtcwA = (CBT_CREATEWNDA *)lpMsg->lParam;
CBT_CREATEWNDW cbtcwW;
CREATESTRUCTW csW;
MSG Msg;
Msg.hwnd = lpMsg->hwnd;
Msg.message = lpMsg->message;
Msg.time = lpMsg->time;
Msg.pt = lpMsg->pt;
Msg.wParam = lpMsg->wParam;
cbtcwW.lpcs = &csW;
cbtcwW.hwndInsertAfter = cbtcwA->hwndInsertAfter;
csW = *(CREATESTRUCTW *)cbtcwA->lpcs;
if (HIWORD(cbtcwA->lpcs->lpszName))
if (NtCurrentTeb()->Win32ThreadInfo && IsThreadHooked(GetWin32ClientInfo()))
{
RtlCreateUnicodeStringFromAsciiz(&usBuffer,cbtcwA->lpcs->lpszName);
csW.lpszName = usBuffer.Buffer;
}
if (HIWORD(cbtcwA->lpcs->lpszClass))
if ( lpMsg->message & ~WM_MAXIMUM )
{
RtlCreateUnicodeStringFromAsciiz(&usBuffer,cbtcwA->lpcs->lpszClass);
csW.lpszClass = usBuffer.Buffer;
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
Msg.lParam =(LPARAM) &cbtcwW;
ret = NtUserCallMsgFilter((LPMSG)&Msg, nCode);
lpMsg->time = Msg.time;
lpMsg->pt = Msg.pt;
cbtcwA->hwndInsertAfter = cbtcwW.hwndInsertAfter;
if (HIWORD(csW.lpszName)) HeapFree( GetProcessHeap(), 0, (LPWSTR)csW.lpszName );
if (HIWORD(csW.lpszClass)) HeapFree( GetProcessHeap(), 0, (LPWSTR)csW.lpszClass );
RtlCopyMemory(&Msg, lpMsg, sizeof(MSG));
return NtUserCallMsgFilter( &Msg, nCode);
}
return ret;
return FALSE;
}
@ -209,7 +178,18 @@ CallMsgFilterW(
LPMSG lpMsg,
int nCode)
{
return NtUserCallMsgFilter((LPMSG) lpMsg, nCode);
MSG Msg;
if (NtCurrentTeb()->Win32ThreadInfo && IsThreadHooked(GetWin32ClientInfo()))
{
if ( lpMsg->message & ~WM_MAXIMUM )
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
RtlCopyMemory(&Msg, lpMsg, sizeof(MSG));
return NtUserCallMsgFilter( &Msg, nCode);
}
return FALSE;
}
@ -454,7 +434,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra = NULL;
KBDLLHOOKSTRUCT KeyboardLlData, *pKeyboardLlData;
MSLLHOOKSTRUCT MouseLlData, *pMouseLlData;
MSG Msg, *pMsg;
MSG *pcMsg, *pMsg;
PMOUSEHOOKSTRUCT pMHook;
CWPSTRUCT CWP, *pCWP;
CWPRETSTRUCT CWPR, *pCWPR;
@ -471,18 +451,18 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
{
case WH_CBT:
{
//ERR("WH_CBT: Code %d\n", Common->Code);
switch(Common->Code)
{
case HCBT_CREATEWND:
CbtCreatewndExtra = (PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS)
((PCHAR) Common + Common->lParam);
Csw = CbtCreatewndExtra->Cs;
Csw.lpszName = CbtCreatewndExtra->Cs.lpszName;
Csw.lpszClass = CbtCreatewndExtra->Cs.lpszClass;
wParam = Common->wParam;
RtlCopyMemory(&Csw, &CbtCreatewndExtra->Cs, sizeof(CREATESTRUCTW));
CbtCreatewndw.lpcs = &Csw;
CbtCreatewndw.hwndInsertAfter = CbtCreatewndExtra->WndInsertAfter;
wParam = Common->wParam;
lParam = (LPARAM) &CbtCreatewndw;
//ERR("HCBT_CREATEWND: hWnd 0x%x Name 0x%x Class 0x%x\n", Common->wParam, Csw.lpszName, Csw.lpszClass);
break;
case HCBT_CLICKSKIPPED:
pMHook = (PMOUSEHOOKSTRUCT)((PCHAR) Common + Common->lParam);
@ -524,7 +504,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
}
else
{
ERR("Common = 0x%x, Proc = 0x%x\n",Common,Common->Proc);
ERR("Null Proc! Common = 0x%x, Proc = 0x%x\n",Common,Common->Proc);
}
switch(Common->Code)
{
@ -539,12 +519,13 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
break;
}
case WH_KEYBOARD_LL:
ERR("WH_KEYBOARD_LL: Code %d, wParam %d\n",Common->Code,Common->wParam);
//ERR("WH_KEYBOARD_LL: Code %d, wParam %d\n",Common->Code,Common->wParam);
pKeyboardLlData = (PKBDLLHOOKSTRUCT)((PCHAR) Common + Common->lParam);
RtlCopyMemory(&KeyboardLlData, pKeyboardLlData, sizeof(KBDLLHOOKSTRUCT));
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &KeyboardLlData);
break;
case WH_MOUSE_LL:
//ERR("WH_MOUSE_LL: Code %d, wParam %d\n",Common->Code,Common->wParam);
pMouseLlData = (PMSLLHOOKSTRUCT)((PCHAR) Common + Common->lParam);
RtlCopyMemory(&MouseLlData, pMouseLlData, sizeof(MSLLHOOKSTRUCT));
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &MouseLlData);
@ -562,7 +543,7 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
_SEH2_END;
break;
case WH_CALLWNDPROC:
ERR("WH_CALLWNDPROC: Code %d, wParam %d\n",Common->Code,Common->wParam);
// ERR("WH_CALLWNDPROC: Code %d, wParam %d\n",Common->Code,Common->wParam);
pCWP = (PCWPSTRUCT)((PCHAR) Common + Common->lParam);
RtlCopyMemory(&CWP, pCWP, sizeof(CWPSTRUCT));
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &CWP);
@ -573,14 +554,15 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &CWPR);
break;
case WH_MSGFILTER: /* All SEH support */
ERR("WH_MSGFILTER: Code %d, wParam %d\n",Common->Code,Common->wParam);
case WH_SYSMSGFILTER:
case WH_GETMESSAGE:
pMsg = (PMSG)((PCHAR) Common + Common->lParam);
RtlCopyMemory(&Msg, pMsg, sizeof(MSG));
pcMsg = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MSG));
RtlCopyMemory(pcMsg, pMsg, sizeof(MSG));
// ERR("pMsg %d pcMsg %d\n",pMsg->message, pcMsg->message);
_SEH2_TRY
{
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) &Msg);
Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) pcMsg);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
@ -588,11 +570,14 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
}
_SEH2_END;
if (!Hit && Common->HookId == WH_GETMESSAGE)
RtlCopyMemory(pMsg, &Msg, sizeof(MSG));
RtlCopyMemory(pMsg, pcMsg, sizeof(MSG));
HeapFree( GetProcessHeap(), 0, pcMsg );
break;
case WH_FOREGROUNDIDLE: /* <-- SEH support */
case WH_KEYBOARD:
case WH_SHELL:
Result = Common->Proc(Common->Code, Common->wParam, Common->lParam);
break;
case WH_FOREGROUNDIDLE: /* <-- SEH support */
_SEH2_TRY
{
Result = Common->Proc(Common->Code, Common->wParam, Common->lParam);

View file

@ -171,7 +171,7 @@ WdmAudGetCapabilitiesByLegacy(
{
case MIXER_DEVICE_TYPE:
{
LPMIXERCAPS MixerCaps = (LPMIXERCAPS) Capabilities;
LPMIXERCAPSW MixerCaps = (LPMIXERCAPSW) Capabilities;
DeviceInfo.u.MixCaps.szPname[MAXPNAMELEN-1] = L'\0';
CopyWideString(MixerCaps->szPname, DeviceInfo.u.MixCaps.szPname);
@ -185,13 +185,13 @@ WdmAudGetCapabilitiesByLegacy(
}
case WAVE_OUT_DEVICE_TYPE :
{
LPWAVEOUTCAPS WaveOutCaps = (LPWAVEOUTCAPS) Capabilities;
LPWAVEOUTCAPSW WaveOutCaps = (LPWAVEOUTCAPSW) Capabilities;
DeviceInfo.u.WaveOutCaps.szPname[MAXPNAMELEN-1] = L'\0';
WaveOutCaps->wMid = DeviceInfo.u.WaveOutCaps.wMid;
WaveOutCaps->wPid = DeviceInfo.u.WaveOutCaps.wPid;
WaveOutCaps->vDriverVersion = 0x0001;
WaveOutCaps->vDriverVersion = DeviceInfo.u.WaveOutCaps.vDriverVersion;
CopyWideString(WaveOutCaps->szPname, DeviceInfo.u.WaveOutCaps.szPname);
WaveOutCaps->dwFormats = DeviceInfo.u.WaveOutCaps.dwFormats;
@ -208,7 +208,7 @@ WdmAudGetCapabilitiesByLegacy(
WaveInCaps->wMid = DeviceInfo.u.WaveInCaps.wMid;
WaveInCaps->wPid = DeviceInfo.u.WaveInCaps.wPid;
WaveInCaps->vDriverVersion = 0x0001;
WaveInCaps->vDriverVersion = DeviceInfo.u.WaveInCaps.vDriverVersion;
CopyWideString(WaveInCaps->szPname, DeviceInfo.u.WaveInCaps.szPname);
WaveInCaps->dwFormats = DeviceInfo.u.WaveInCaps.dwFormats;
@ -216,6 +216,34 @@ WdmAudGetCapabilitiesByLegacy(
WaveInCaps->wReserved1 = 0;
break;
}
case MIDI_IN_DEVICE_TYPE :
{
LPMIDIINCAPSW MidiInCaps = (LPMIDIINCAPSW)Capabilities;
DeviceInfo.u.MidiInCaps.szPname[MAXPNAMELEN-1] = L'\0';
MidiInCaps->vDriverVersion = DeviceInfo.u.MidiInCaps.vDriverVersion;
MidiInCaps->wMid = DeviceInfo.u.MidiInCaps.wMid;
MidiInCaps->wPid = DeviceInfo.u.MidiInCaps.wPid;
MidiInCaps->dwSupport = DeviceInfo.u.MidiInCaps.dwSupport;
CopyWideString(MidiInCaps->szPname, DeviceInfo.u.MidiInCaps.szPname);
break;
}
case MIDI_OUT_DEVICE_TYPE :
{
LPMIDIOUTCAPSW MidiOutCaps = (LPMIDIOUTCAPSW)Capabilities;
DeviceInfo.u.MidiOutCaps.szPname[MAXPNAMELEN-1] = L'\0';
MidiOutCaps->vDriverVersion = DeviceInfo.u.MidiOutCaps.vDriverVersion;
MidiOutCaps->wMid = DeviceInfo.u.MidiOutCaps.wMid;
MidiOutCaps->wPid = DeviceInfo.u.MidiOutCaps.wPid;
MidiOutCaps->dwSupport = DeviceInfo.u.MidiOutCaps.dwSupport;
CopyWideString(MidiOutCaps->szPname, DeviceInfo.u.MidiOutCaps.szPname);
break;
}
}
return MMSYSERR_NOERROR;

View file

@ -655,6 +655,19 @@ WdmAudSetWaveStateByMMixer(
IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance,
IN BOOL bStart)
{
MMDEVICE_TYPE DeviceType;
PSOUND_DEVICE SoundDevice;
MMRESULT Result;
Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice);
SND_ASSERT( Result == MMSYSERR_NOERROR );
Result = GetSoundDeviceType(SoundDevice, &DeviceType);
SND_ASSERT( Result == MMSYSERR_NOERROR );
if (DeviceType == WAVE_IN_DEVICE_TYPE || DeviceType == WAVE_OUT_DEVICE_TYPE)
{
if (bStart)
{
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
@ -667,6 +680,22 @@ WdmAudSetWaveStateByMMixer(
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
MMixerSetWaveStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_STOP);
}
}
else if (DeviceType == MIDI_IN_DEVICE_TYPE || DeviceType == MIDI_OUT_DEVICE_TYPE)
{
if (bStart)
{
MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_RUN);
}
else
{
MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_PAUSE);
MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_ACQUIRE);
MMixerSetMidiStatus(&MixerContext, SoundDeviceInstance->Handle, KSSTATE_STOP);
}
}
return MMSYSERR_NOERROR;
}

View file

@ -90,6 +90,12 @@ PopulateWdmDeviceList(
FuncTable.CommitWaveBuffer = WriteFileEx_Remixer;
#endif
}
else if (DeviceType == MIDI_IN_DEVICE_TYPE || DeviceType == MIDI_OUT_DEVICE_TYPE)
{
FuncTable.SetWaveFormat = FUNC_NAME(WdmAudSetMixerDeviceFormat);
FuncTable.SetState = FUNC_NAME(WdmAudSetWaveState);
FuncTable.GetPos = FUNC_NAME(WdmAudGetWavePosition);
}
SetSoundDeviceFunctionTable(SoundDevice, &FuncTable);
}

View file

@ -661,6 +661,11 @@ KsProbeStreamIrp(
if (Irp->RequestorMode == KernelMode || Irp->AssociatedIrp.SystemBuffer)
{
if (Irp->RequestorMode == KernelMode)
{
/* no need to allocate stream header */
Irp->AssociatedIrp.SystemBuffer = Irp->UserBuffer;
}
AllocMdl:
/* check if alloc mdl flag is passed */
if (!(ProbeFlags & KSPROBE_ALLOCATEMDL))
@ -724,7 +729,16 @@ ProbeMdl:
Mdl = Irp->MdlAddress;
/* determine operation */
Operation = (ProbeFlags & KSPROBE_STREAMWRITE) ? IoWriteAccess : IoReadAccess;
if (!(ProbeFlags & KSPROBE_STREAMWRITE) || (ProbeFlags & KSPROBE_MODIFY))
{
/* operation is read / modify stream, need write access */
Operation = IoWriteAccess;
}
else
{
/* operation is write to device, so we need read access */
Operation = IoReadAccess;
}
do
{
@ -859,7 +873,8 @@ ProbeMdl:
if (StreamHeader->FrameExtent)
{
/* allocate an mdl */
Mdl = IoAllocateMdl(StreamHeader->Data, StreamHeader->FrameExtent, Irp->MdlAddress != NULL, TRUE, Irp);
ASSERT(Irp->MdlAddress == NULL);
Mdl = IoAllocateMdl(StreamHeader->Data, StreamHeader->FrameExtent, FALSE, TRUE, Irp);
if (!Mdl)
{
/* not enough memory */
@ -888,10 +903,6 @@ ProbeMdl:
goto ProbeMdl;
}
#if 0
// HACK for MS PORTCLS
HeaderSize = Length;
#endif
/* probe user mode buffers */
if (Length && ( (!HeaderSize) || (Length % HeaderSize == 0) || ((ProbeFlags & KSPROBE_ALLOWFORMATCHANGE) && (Length == sizeof(KSSTREAM_HEADER))) ) )
{
@ -904,6 +915,9 @@ ProbeMdl:
return STATUS_INSUFFICIENT_RESOURCES;
}
/* mark irp as buffered so that changes the stream headers are propagated back */
Irp->Flags = IRP_DEALLOCATE_BUFFER | IRP_BUFFERED_IO;
_SEH2_TRY
{
if (ProbeFlags & KSPROBE_STREAMWRITE)
@ -917,6 +931,9 @@ ProbeMdl:
{
/* stream reads means writing */
ProbeForWrite(Irp->UserBuffer, Length, sizeof(UCHAR));
/* set input operation flags */
Irp->Flags |= IRP_INPUT_OPERATION;
}
/* copy stream buffer */
@ -1360,7 +1377,7 @@ KsRemoveIrpFromCancelableQueue(
PLIST_ENTRY CurEntry;
KIRQL OldIrql;
//DPRINT("KsRemoveIrpFromCancelableQueue ListHead %p SpinLock %p ListLocation %x RemovalOperation %x\n", QueueHead, SpinLock, ListLocation, RemovalOperation);
DPRINT("KsRemoveIrpFromCancelableQueue ListHead %p SpinLock %p ListLocation %x RemovalOperation %x\n", QueueHead, SpinLock, ListLocation, RemovalOperation);
/* check parameters */
if (!QueueHead || !SpinLock)
@ -1619,19 +1636,32 @@ KsAddIrpToCancelableQueue(
PIO_STACK_LOCATION IoStack;
KIRQL OldLevel;
DPRINT("KsAddIrpToCancelableQueue QueueHead %p SpinLock %p Irp %p ListLocation %x DriverCancel %p\n", QueueHead, SpinLock, Irp, ListLocation, DriverCancel);
/* check for required parameters */
if (!QueueHead || !SpinLock || !Irp)
return;
/* get current irp stack */
IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT("KsAddIrpToCancelableQueue QueueHead %p SpinLock %p Irp %p ListLocation %x DriverCancel %p\n", QueueHead, SpinLock, Irp, ListLocation, DriverCancel);
// HACK for ms portcls
if (IoStack->MajorFunction == IRP_MJ_CREATE)
{
// complete the request
Irp->IoStatus.Status = STATUS_SUCCESS;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return;
}
if (!DriverCancel)
{
/* default to KsCancelRoutine */
DriverCancel = KsCancelRoutine;
}
/* get current irp stack */
IoStack = IoGetCurrentIrpStackLocation(Irp);
/* acquire spinlock */
KeAcquireSpinLock(SpinLock, &OldLevel);
@ -1720,22 +1750,24 @@ FindMatchingCreateItem(
PLIST_ENTRY Entry;
PCREATE_ITEM_ENTRY CreateItemEntry;
UNICODE_STRING RefString;
LPWSTR pStr;
/* get terminator */
pStr = wcschr(Buffer, L'\\');
#ifndef MS_KSUSER
/* remove '\' slash */
Buffer++;
BufferSize -= sizeof(WCHAR);
#endif
/* sanity check */
ASSERT(pStr != NULL);
if (!wcschr(Buffer, L'\\'))
if (pStr == Buffer)
{
RtlInitUnicodeString(&RefString, Buffer);
// skip slash
RtlInitUnicodeString(&RefString, ++pStr);
}
else
{
// request is for pin / node / allocator
RefString.Buffer = Buffer;
RefString.Length = RefString.MaximumLength = ((ULONG_PTR)wcschr(Buffer, L'\\') - (ULONG_PTR)Buffer);
RefString.Length = BufferSize = RefString.MaximumLength = ((ULONG_PTR)pStr - (ULONG_PTR)Buffer);
}
/* point to first entry */
@ -1963,12 +1995,6 @@ KsSetMajorFunctionHandler(
IN ULONG MajorFunction)
{
DPRINT("KsSetMajorFunctionHandler Function %x\n", MajorFunction);
#if 1
// HACK
// for MS PORTCLS
//
DriverObject->MajorFunction[IRP_MJ_CREATE] = KspCreate;
#endif
switch ( MajorFunction )
{
@ -2006,7 +2032,7 @@ KsDispatchIrp(
PKSIDEVICE_HEADER DeviceHeader;
PDEVICE_EXTENSION DeviceExtension;
//DPRINT("KsDispatchIrp DeviceObject %p Irp %p\n", DeviceObject, Irp);
DPRINT("KsDispatchIrp DeviceObject %p Irp %p\n", DeviceObject, Irp);
/* get device extension */
DeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;

View file

@ -95,7 +95,7 @@ KspCopyCreateRequest(
IoStack = IoGetCurrentIrpStackLocation(Irp);
/* get object class length */
ObjectLength = (wcslen(ObjectClass) + 2) * sizeof(WCHAR);
ObjectLength = (wcslen(ObjectClass) + 1) * sizeof(WCHAR);
/* check for minium length requirement */
if (ObjectLength + *Size > IoStack->FileObject->FileName.MaximumLength)

View file

@ -27,7 +27,7 @@ KspCreateObjectType(
/* calculate request length */
Name.Length = 0;
Name.MaximumLength = wcslen(ObjectType) * sizeof(WCHAR) + CreateParametersSize + 2 * sizeof(WCHAR);
Name.MaximumLength = wcslen(ObjectType) * sizeof(WCHAR) + CreateParametersSize + 1 * sizeof(WCHAR);
Name.MaximumLength += sizeof(WCHAR);
/* acquire request buffer */
Name.Buffer = AllocateItem(NonPagedPool, Name.MaximumLength);
@ -38,11 +38,10 @@ KspCreateObjectType(
return STATUS_INSUFFICIENT_RESOURCES;
}
/* build a request which looks like \{ObjectClass}\CreateParameters
/* build a request which looks like {ObjectClass}\CreateParameters
* For pins the parent is the reference string used in registration
* For clocks it is full path for pin\{ClockGuid}\ClockCreateParams
*/
RtlAppendUnicodeToString(&Name, L"\\");
RtlAppendUnicodeToString(&Name, ObjectType);
RtlAppendUnicodeToString(&Name, L"\\");
/* append create parameters */

View file

@ -2808,6 +2808,53 @@ Return Value:
// Fall through and let the class driver process the request.
//
case IOCTL_DISK_GET_LENGTH_INFO:
//
// Validate buffer length.
//
if (irpStack->Parameters.DeviceIoControl.OutputBufferLength <
sizeof(GET_LENGTH_INFORMATION)) {
status = STATUS_BUFFER_TOO_SMALL;
} else {
PGET_LENGTH_INFORMATION lengthInformation = Irp->AssociatedIrp.SystemBuffer;
//
// Update the geometry in case it has changed.
//
status = UpdateRemovableGeometry (DeviceObject, Irp);
if (!NT_SUCCESS(status)) {
//
// Note the drive is not ready.
//
diskData->DriveNotReady = TRUE;
break;
}
//
// Note the drive is now ready.
//
diskData->DriveNotReady = FALSE;
//
// Output data, and return
//
lengthInformation->Length.QuadPart = deviceExtension->PartitionLength.QuadPart;
status = STATUS_SUCCESS;
Irp->IoStatus.Information = sizeof(GET_LENGTH_INFORMATION);
}
break;
default:
//

View file

@ -35,7 +35,6 @@ const GUID CLSID_MiniportDriverUart = {0xb4c90ae1L, 0x5791, 0x11d0, {0x86, 0xf9,
const GUID CLSID_MiniportDriverFmSynth = {0xb4c90ae0L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
const GUID CLSID_MiniportDriverFmSynthWithVol = {0xe5a3c139L, 0xf0f2, 0x11d1, {0x81, 0xaf, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}};
const GUID IID_IPort = {0xb4c90a25L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
const GUID IID_IDrmPort = {0x286D3DF8L, 0xCA22, 0x4E2E, {0xB9, 0xBC, 0x20, 0xB4, 0xF0, 0xE2, 0x01, 0xCE}};
const GUID IID_IDrmPort2 = {0x1ACCE59CL, 0x7311, 0x4B6B, {0x9F, 0xBA, 0xCC, 0x3B, 0xA5, 0x9A, 0xCD, 0xCE}};
@ -46,6 +45,7 @@ const GUID IID_IPortMidi = {0xb4c90a40L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0
const GUID IID_IPortDMus = {0xc096df9cL, 0xfb09, 0x11d1, {0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}};
const GUID IID_IAdapterPowerManagement = {0x793417D0L, 0x35FE, 0x11D1, {0xAD, 0x08, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0xB0}};
const GUID IID_IMiniport = {0xb4c90a24, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
const GUID IID_IMiniportWaveCyclic = {0xb4c90a27L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
const GUID IID_IPortWaveCyclic = {0xb4c90a26L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
const GUID IID_IResourceList = {0x22C6AC60L, 0x851B, 0x11D0, {0x9A, 0x7F, 0x00, 0xAA, 0x00, 0x38, 0xAC, 0xFE}};
@ -59,6 +59,7 @@ const GUID IID_IServiceSink = {0x22C6AC64L, 0x851B, 0x11D0, {0x9A, 0x7F, 0x00, 0
const GUID IID_IPortClsVersion = {0x7D89A7BBL, 0x869B, 0x4567, {0x8D, 0xBE, 0x1E, 0x16, 0x8C, 0xC8, 0x53, 0xDE}};
const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x46}};
const GUID IID_IPortEvents = {0xA80F29C4L, 0x5498, 0x11D2, {0x95, 0xD9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}};
const GUID IID_IMusicTechnology = {0x80396C3C, 0xCBCB, 0x409B, {0x9F, 0x65, 0x4F, 0x1E, 0x74, 0x67, 0xCD, 0xAF}};
const GUID KSNAME_PIN = {0x146F1A80, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
const GUID IID_IDrmAudioStream = {0x1915c967, 0x3299, 0x48cb, {0xa3, 0xe4, 0x69, 0xfd, 0x1d, 0x1b, 0x30, 0x6e}};
@ -69,8 +70,14 @@ const GUID KS_CATEGORY_AUDIO = {0x6994AD04, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00
const GUID KS_CATEGORY_RENDER = {0x65E8773E, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
const GUID KS_CATEGORY_CAPTURE = {0x65E8773D, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
const GUID KS_CATEGORY_TOPOLOGY = {0xDDA54A40, 0x1E4C, 0x11D1, {0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00}};
const GUID KSCATEGORY_AUDIO = {0x6994AD04L, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
const GUID KSNODETYPE_SYNTHESIZER = {0xDFF220F3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
const GUID KSAUDFNAME_DMUSIC_MPU_IN = {0xB2EC0A7D, 0xBAC9, 0x11d2, {0xB7, 0xA8, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1}};
const GUID KSAUDFNAME_MIDI = {0x185FEDF8L, 0x9905, 0x11D1, {0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3}};
const GUID KSAUDFNAME_DMUSIC_MPU_OUT = {0xA4DF0EB5, 0xBAC9, 0x11d2, {0xB7, 0xA8, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1}};
const GUID KSDATAFORMAT_TYPE_AUDIO = {0x73647561L, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
const GUID KSDATAFORMAT_SUBTYPE_PCM = {0x00000001L, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
const GUID KSDATAFORMAT_SPECIFIER_WAVEFORMATEX = {0x05589f81L, 0xc356, 0x11ce, {0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a}};
@ -80,13 +87,16 @@ const GUID KSPROPSETID_Pin = {0x8C134960L, 0x51AD, 0x11CF, {
const GUID KSPROPSETID_Connection = {0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
const GUID KSPROPTYPESETID_General = {0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
const GUID KSPROPSETID_DrmAudioStream = {0x2f2c8ddd, 0x4198, 0x4fac, {0xba, 0x29, 0x61, 0xbb, 0x05, 0xb7, 0xde, 0x06}};
const GUID KSPROPSETID_Synth = {0xfedfae25L, 0xe46e, 0x11d1, {0xaa, 0xce, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12}};
const GUID KSPROPSETID_Audio = {0x45FFAAA0L, 0x6E1B, 0x11D0, {0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}};
const GUID KSEVENTSETID_LoopedStreaming = {0x4682B940L, 0xC6EF, 0x11D0, {0x96, 0xD8, 0x00, 0xAA, 0x00, 0x51, 0xE5, 0x1D}};
const GUID KSEVENTSETID_Connection = {0x7f4bcbe0L, 0x9ea5, 0x11cf, {0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00}};
const GUID IID_IAllocatorMXF = {0xa5f0d62cL, 0xb30f, 0x11d2, {0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}};
const GUID IID_IMXF = {0xc096df9e, 0xfb09, 0x11d1, {0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}};
const GUID KSMUSIC_TECHNOLOGY_PORT = {0x86C92E60, 0x62E8, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
const GUID KSPROPSETID_Audio = {0x45FFAAA0L, 0x6E1B, 0x11D0, {0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}};
///
/// undocumented guids

View file

@ -319,9 +319,11 @@ DECLARE_INTERFACE_(IIrpQueue, IUnknown)
DEFINE_ABSTRACT_UNKNOWN()
STDMETHOD_(NTSTATUS, Init)(THIS_
IN KSPIN_CONNECT *ConnectDetails,
IN PKSPIN_CONNECT ConnectDetails,
IN PKSPIN_DESCRIPTOR Descriptor,
IN ULONG FrameSize,
IN ULONG Alignment) PURE;
IN ULONG Alignment,
IN ULONG TagSupportEnabled) PURE;
STDMETHOD_(NTSTATUS, AddMapping)(THIS_
IN PIRP Irp,
@ -360,9 +362,11 @@ DECLARE_INTERFACE_(IIrpQueue, IUnknown)
#define IMP_IIrpQueue \
STDMETHODIMP_(NTSTATUS) Init(THIS_ \
IN KSPIN_CONNECT *ConnectDetails, \
IN PKSPIN_CONNECT ConnectDetails, \
IN PKSPIN_DESCRIPTOR Descriptor, \
IN ULONG FrameSize, \
IN ULONG Alignment); \
IN ULONG Alignment, \
IN ULONG TagSupportEnabled); \
\
STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
IN PIRP Irp, \

View file

@ -232,21 +232,21 @@ CInterruptSync::Connect()
if (IsListEmpty(&m_ServiceRoutines))
return STATUS_UNSUCCESSFUL;
DPRINT("Vector %u Level %u Flags %x Affinity %x\n", Descriptor->u.Interrupt.Vector, Descriptor->u.Interrupt.Level, Descriptor->Flags, Descriptor->u.Interrupt.Affinity);
DPRINT1("Vector %u Level %u Flags %x Affinity %x\n", Descriptor->u.Interrupt.Vector, Descriptor->u.Interrupt.Level, Descriptor->Flags, Descriptor->u.Interrupt.Affinity);
Status = IoConnectInterrupt(&m_Interrupt,
IInterruptServiceRoutine,
(PVOID)this,
&m_Lock,
NULL, //&m_Lock,
Descriptor->u.Interrupt.Vector,
(KIRQL)Descriptor->u.Interrupt.Level,
(KIRQL)Descriptor->u.Interrupt.Level,
(KINTERRUPT_MODE)(Descriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED),
(Descriptor->Flags != CM_RESOURCE_INTERRUPT_LATCHED),
(Descriptor->ShareDisposition != CmResourceShareDeviceExclusive),
Descriptor->u.Interrupt.Affinity,
FALSE);
DPRINT("CInterruptSync::Connect result %x\n", Status);
DPRINT1("CInterruptSync::Connect result %x\n", Status);
return Status;
}

View file

@ -35,31 +35,40 @@ public:
virtual ~CIrpQueue(){}
protected:
volatile ULONG m_CurrentOffset;
LONG m_NumMappings;
ULONG m_NumDataAvailable;
PKSPIN_CONNECT m_ConnectDetails;
PKSPIN_DESCRIPTOR m_Descriptor;
KSPIN_LOCK m_IrpListLock;
LIST_ENTRY m_IrpList;
LIST_ENTRY m_FreeIrpList;
PIRP m_Irp;
ULONG m_OutOfMapping;
ULONG m_MaxFrameSize;
ULONG m_Alignment;
ULONG m_TagSupportEnabled;
ULONG m_NumDataAvailable;
volatile ULONG m_CurrentOffset;
PIRP m_Irp;
LONG m_Ref;
};
#define OFFSET_HEADERINDEX (0)
#define OFFSET_STREAMHEADER (2)
#define OFFSET_HEADERCOUNT (3)
typedef struct
{
ULONG StreamHeaderCount;
ULONG StreamHeaderIndex;
ULONG TotalStreamData;
PKSSTREAM_HEADER CurStreamHeader;
PVOID * Data;
PVOID * Tags;
}KSSTREAM_DATA, *PKSSTREAM_DATA;
#define STREAMHEADER_INDEX(Irp) (PtrToUlong(Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX]))
#define STREAMHEADER_COUNT(Irp) (PtrToUlong(Irp->Tail.Overlay.DriverContext[OFFSET_HEADERCOUNT]))
#define STREAMHEADER_CURRENT(Irp) (Irp->Tail.Overlay.DriverContext[OFFSET_STREAMHEADER])
#define STREAM_DATA_OFFSET (0)
NTSTATUS
@ -81,13 +90,17 @@ CIrpQueue::QueryInterface(
NTSTATUS
NTAPI
CIrpQueue::Init(
IN KSPIN_CONNECT *ConnectDetails,
IN PKSPIN_CONNECT ConnectDetails,
IN PKSPIN_DESCRIPTOR Descriptor,
IN ULONG FrameSize,
IN ULONG Alignment)
IN ULONG Alignment,
IN ULONG TagSupportEnabled)
{
m_ConnectDetails = ConnectDetails;
m_Descriptor = Descriptor;
m_MaxFrameSize = FrameSize;
m_Alignment = Alignment;
m_TagSupportEnabled = TagSupportEnabled;
InitializeListHead(&m_IrpList);
InitializeListHead(&m_FreeIrpList);
@ -103,110 +116,158 @@ CIrpQueue::AddMapping(
OUT PULONG Data)
{
PKSSTREAM_HEADER Header;
NTSTATUS Status = STATUS_SUCCESS;
NTSTATUS Status = STATUS_UNSUCCESSFUL;
PIO_STACK_LOCATION IoStack;
ULONG NumHeaders, NumData, Index;
ULONG Index, Length;
PMDL Mdl;
PKSSTREAM_DATA StreamData;
PC_ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
// allocate stream data
StreamData = (PKSSTREAM_DATA)AllocateItem(NonPagedPool, sizeof(KSSTREAM_DATA), TAG_PORTCLASS);
if (!StreamData)
{
// not enough memory
return STATUS_INSUFFICIENT_RESOURCES;
}
// get current irp stack location
IoStack = IoGetCurrentIrpStackLocation(Irp);
if (!Irp->MdlAddress)
{
// ioctl from KsStudio
// Wdmaud already probes buffers, therefore no need to probe it again
// probe the stream irp
// lets probe the irp
if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_WRITE_STREAM)
{
// probe IOCTL_KS_WRITE_STREAM
Status = KsProbeStreamIrp(Irp, KSSTREAM_WRITE | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS, 0);
}
else if (IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_READ_STREAM)
{
// probe IOCTL_KS_READ_STREAM
Status = KsProbeStreamIrp(Irp, KSSTREAM_READ | KSPROBE_ALLOCATEMDL | KSPROBE_PROBEANDLOCK | KSPROBE_SYSTEMADDRESS, 0);
else
PC_ASSERT(0);
}
// check for success
if (!NT_SUCCESS(Status))
{
DPRINT("KsProbeStreamIrp failed with %x\n", Status);
// irp probing failed
FreeItem(StreamData, TAG_PORTCLASS);
return Status;
}
}
// get first stream header
if (Irp->RequestorMode == UserMode)
Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
// store header
StreamData->CurStreamHeader = Header;
// sanity check
PC_ASSERT(Header);
// first calculate the numbers of stream headers
Length = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
do
{
/* subtract size */
Length -= Header->Size;
/* increment header count */
StreamData->StreamHeaderCount++;
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
{
// irp sink
StreamData->TotalStreamData += Header->DataUsed;
}
else
Header = (PKSSTREAM_HEADER)Irp->UserBuffer;
// sanity check
PC_ASSERT(Header);
// calculate num headers
NumHeaders = IoStack->Parameters.DeviceIoControl.OutputBufferLength / Header->Size;
// assume headers of same length
PC_ASSERT(IoStack->Parameters.DeviceIoControl.OutputBufferLength % Header->Size == 0);
// get first audio buffer
Mdl = Irp->MdlAddress;
// sanity check
PC_ASSERT(Mdl);
// store the current stream header
Irp->Tail.Overlay.DriverContext[OFFSET_STREAMHEADER] = (PVOID)Header;
// store header count
Irp->Tail.Overlay.DriverContext[OFFSET_HEADERCOUNT] = UlongToPtr(NumHeaders);
// store current header index
Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(0);
NumData = 0;
// prepare all headers
for(Index = 0; Index < NumHeaders; Index++)
{
// sanity checks
PC_ASSERT(Header);
PC_ASSERT(Mdl);
if (Irp->RequestorMode == UserMode)
{
Header->Data = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
// irp source
StreamData->TotalStreamData += Header->FrameExtent;
}
if (!Header->Data)
{
// insufficient resources
ExFreePool(Irp->AssociatedIrp.SystemBuffer);
Irp->AssociatedIrp.SystemBuffer = NULL;
// complete and forget request
Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
Irp->IoStatus.Information = 0;
/* move to next header */
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
IoCompleteRequest(Irp, IO_NO_INCREMENT);
}while(Length);
// sanity check
ASSERT(StreamData->StreamHeaderCount);
// allocate array for storing the pointers of the data */
StreamData->Data = (PVOID*)AllocateItem(NonPagedPool, sizeof(PVOID) * StreamData->StreamHeaderCount, TAG_PORTCLASS);
if (!StreamData->Data)
{
// out of memory
FreeItem(StreamData, TAG_PORTCLASS);
// done
return STATUS_INSUFFICIENT_RESOURCES;
}
// increment num mappings
InterlockedIncrement(&m_NumMappings);
if (m_TagSupportEnabled)
{
// allocate array for storing the pointers of the data */
StreamData->Tags = (PVOID*)AllocateItem(NonPagedPool, sizeof(PVOID) * StreamData->StreamHeaderCount, TAG_PORTCLASS);
if (!StreamData->Data)
{
// out of memory
FreeItem(StreamData->Data, TAG_PORTCLASS);
FreeItem(StreamData, TAG_PORTCLASS);
// increment available data
InterlockedExchangeAdd((PLONG)&m_NumDataAvailable,
(max(Header->DataUsed, Header->FrameExtent)));
NumData += max(Header->DataUsed, Header->FrameExtent);
// move to next header
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
// move to next mdl
Mdl = Mdl->Next;
// done
return STATUS_INSUFFICIENT_RESOURCES;
}
}
DPRINT("StreamHeaders %u NumData %u FrameSize %u NumDataAvailable %u\n", NumHeaders, NumData, m_MaxFrameSize, m_NumDataAvailable);
*Data = NumData;
// now get a system address for the user buffers
Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
Mdl = Irp->MdlAddress;
for(Index = 0; Index < StreamData->StreamHeaderCount; Index++)
{
/* get system address */
StreamData->Data[Index] = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
/* check for success */
if (!StreamData->Data[Index])
{
// out of resources
FreeItem(StreamData->Data, TAG_PORTCLASS);
if (m_TagSupportEnabled)
{
// free tag array
FreeItem(StreamData->Tags, TAG_PORTCLASS);
}
FreeItem(StreamData, TAG_PORTCLASS);
// done
return STATUS_INSUFFICIENT_RESOURCES;
}
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
{
// increment available data
InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, Header->DataUsed);
}
else if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_OUT)
{
// increment available data
InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, Header->FrameExtent);
}
// move to next header / mdl
Mdl = Mdl->Next;
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
}
// store stream data
Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET] = (PVOID)StreamData;
*Data = StreamData->TotalStreamData;
// mark irp as pending
IoMarkIrpPending(Irp);
@ -218,7 +279,7 @@ CIrpQueue::AddMapping(
m_OutOfMapping = FALSE;
// done
return Status;
return STATUS_SUCCESS;
}
NTSTATUS
@ -229,8 +290,7 @@ CIrpQueue::GetMapping(
{
PIRP Irp;
ULONG Offset;
//PIO_STACK_LOCATION IoStack;
PKSSTREAM_HEADER StreamHeader;
PKSSTREAM_DATA StreamData;
// check if there is an irp in the partially processed
if (m_Irp)
@ -247,6 +307,7 @@ CIrpQueue::GetMapping(
m_Irp->IoStatus.Status = STATUS_CANCELLED;
IoCompleteRequest(m_Irp, IO_NO_INCREMENT);
m_Irp = Irp = NULL;
m_CurrentOffset = 0;
}
}
else
@ -259,26 +320,32 @@ CIrpQueue::GetMapping(
if (!Irp)
{
// no irp buffer available
DPRINT("NoIrp\n");
return STATUS_UNSUCCESSFUL;
}
// get stream header
StreamHeader = (PKSSTREAM_HEADER)Irp->Tail.Overlay.DriverContext[2];
// get stream data
StreamData = (PKSSTREAM_DATA)Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
// sanity check
PC_ASSERT(StreamHeader);
PC_ASSERT(StreamData);
// store buffersize
if (StreamHeader->DataUsed)
*BufferSize = StreamHeader->DataUsed - Offset;
// get buffer size
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
{
// sink pin
*BufferSize = StreamData->CurStreamHeader->DataUsed - Offset;
}
else
*BufferSize = StreamHeader->FrameExtent - Offset;
{
// source pin
*BufferSize = StreamData->CurStreamHeader->FrameExtent - Offset;
}
// sanity check
PC_ASSERT(*BufferSize);
// store buffer
*Buffer = &((PUCHAR)StreamHeader->Data)[Offset];
*Buffer = &((PUCHAR)StreamData->Data[StreamData->StreamHeaderIndex])[Offset];
// unset flag that no irps are available
m_OutOfMapping = FALSE;
@ -291,107 +358,119 @@ NTAPI
CIrpQueue::UpdateMapping(
IN ULONG BytesWritten)
{
PKSSTREAM_HEADER StreamHeader;
ULONG Size, NumData, Index;
if (!m_Irp)
{
// silence buffer was used
return;
}
// get stream header
StreamHeader = (PKSSTREAM_HEADER)STREAMHEADER_CURRENT(m_Irp);
PKSSTREAM_DATA StreamData;
ULONG Size;
PIO_STACK_LOCATION IoStack;
// sanity check
// ASSERT(StreamHeader);
ASSERT(m_Irp);
// get stream data
StreamData = (PKSSTREAM_DATA)m_Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
// sanity check
ASSERT(StreamData);
// add to current offset
InterlockedExchangeAdd((volatile PLONG)&m_CurrentOffset, (LONG)BytesWritten);
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_OUT)
{
// store written bytes (source pin)
StreamData->CurStreamHeader->DataUsed += BytesWritten;
}
// decrement available data counter
m_NumDataAvailable -= BytesWritten;
if (StreamHeader->DataUsed)
Size = StreamHeader->DataUsed;
// get audio buffer size
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_OUT)
Size = StreamData->CurStreamHeader->FrameExtent;
else
Size = StreamHeader->FrameExtent;
Size = StreamData->CurStreamHeader->DataUsed;
// sanity check
PC_ASSERT(Size);
if (m_CurrentOffset >= Size)
{
if (STREAMHEADER_INDEX(m_Irp) + 1 < STREAMHEADER_COUNT(m_Irp))
// sanity check
PC_ASSERT(Size == m_CurrentOffset);
if (StreamData->StreamHeaderIndex + 1 < StreamData->StreamHeaderCount)
{
// the irp has at least one more stream header
m_Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(STREAMHEADER_INDEX(m_Irp) + 1);
// move to next stream header
StreamData->CurStreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamData->CurStreamHeader + StreamData->CurStreamHeader->Size);
// get next stream header
StreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamHeader + StreamHeader->Size);
// increment stream header index
StreamData->StreamHeaderIndex++;
// store next stream header
STREAMHEADER_CURRENT(m_Irp) = (PVOID)StreamHeader;
// reset current offset
// reset offset
m_CurrentOffset = 0;
// done
return;
}
// irp has been processed completly
NumData = 0;
if (m_Irp->RequestorMode == KernelMode)
StreamHeader = (PKSSTREAM_HEADER)m_Irp->UserBuffer;
else
StreamHeader = (PKSSTREAM_HEADER)m_Irp->AssociatedIrp.SystemBuffer;
// loop all stream headers
for(Index = 0; Index < STREAMHEADER_COUNT(m_Irp); Index++)
{
PC_ASSERT(StreamHeader);
// add size of buffer
// depends on if the buffer is input / output
if (StreamHeader->DataUsed)
Size = StreamHeader->DataUsed;
else
Size = StreamHeader->FrameExtent;
// increment size
NumData += Size;
// get next stream header
StreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamHeader + StreamHeader->Size);
}
//
// all stream buffers have been played
// check if this is a looped buffer
//
if (m_ConnectDetails->Interface.Id == KSINTERFACE_STANDARD_LOOPED_STREAMING)
{
// looped streaming repeat the buffers untill
// the caller decides to stop the streams
// reset stream header index
m_Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(0);
StreamData->StreamHeaderIndex = 0;
// reset stream header
StreamData->CurStreamHeader = (PKSSTREAM_HEADER)m_Irp->AssociatedIrp.SystemBuffer;
// increment available data
InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, StreamData->TotalStreamData);
// re-insert irp
KsAddIrpToCancelableQueue(&m_IrpList, &m_IrpListLock, m_Irp, KsListEntryTail, NULL);
// clear current irp
m_Irp = NULL;
// reset offset
m_CurrentOffset = 0;
// increment available data
InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, NumData);
// done
return;
}
// free stream data array
FreeItem(StreamData->Data, TAG_PORTCLASS);
if (m_TagSupportEnabled)
{
// free tag array
FreeItem(StreamData->Tags, TAG_PORTCLASS);
}
// free stream data
FreeItem(StreamData, TAG_PORTCLASS);
// get io stack
IoStack = IoGetCurrentIrpStackLocation(m_Irp);
// store operation status
m_Irp->IoStatus.Status = STATUS_SUCCESS;
m_Irp->IoStatus.Information = NumData;
// store operation length
m_Irp->IoStatus.Information = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
// complete the request
IoCompleteRequest(m_Irp, IO_SOUND_INCREMENT);
// remove irp as it is complete
m_Irp = NULL;
// reset offset
m_CurrentOffset = 0;
}
}
@ -408,6 +487,8 @@ BOOL
NTAPI
CIrpQueue::CancelBuffers()
{
//TODO: own cancel routine
// is there an active irp
if (m_Irp)
{
@ -419,8 +500,7 @@ CIrpQueue::CancelBuffers()
// cancel all irps
KsCancelIo(&m_IrpList, &m_IrpListLock);
// reset number of mappings
m_NumMappings = 0;
// reset number of data available
m_NumDataAvailable = 0;
@ -437,44 +517,83 @@ CIrpQueue::GetMappingWithTag(
OUT PULONG ByteCount,
OUT PULONG Flags)
{
PKSSTREAM_HEADER StreamHeader;
PIRP Irp;
PKSSTREAM_DATA StreamData;
*Flags = 0;
/* sanity checks */
PC_ASSERT(Tag != NULL);
PC_ASSERT(PhysicalAddress);
PC_ASSERT(VirtualAddress);
PC_ASSERT(ByteCount);
PC_ASSERT(Flags);
if (!m_Irp)
{
// get an irp from the queue
Irp = KsRemoveIrpFromCancelableQueue(&m_IrpList, &m_IrpListLock, KsListEntryHead, KsAcquireAndRemoveOnlySingleItem);
m_Irp = KsRemoveIrpFromCancelableQueue(&m_IrpList, &m_IrpListLock, KsListEntryHead, KsAcquireAndRemoveOnlySingleItem);
}
// check if there is an irp
if (!Irp)
if (!m_Irp)
{
// no irp available
m_OutOfMapping = TRUE;
return STATUS_NOT_FOUND;
}
//FIXME support more than one stream header
PC_ASSERT(STREAMHEADER_COUNT(Irp) == 1);
// get stream data
StreamData = (PKSSTREAM_DATA)m_Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
// HACK get stream header
StreamHeader = (PKSSTREAM_HEADER)Irp->Tail.Overlay.DriverContext[2];
// sanity check
PC_ASSERT(StreamData->StreamHeaderIndex < StreamData->StreamHeaderCount);
// store mapping in the free list
ExInterlockedInsertTailList(&m_FreeIrpList, &Irp->Tail.Overlay.ListEntry, &m_IrpListLock);
// return mapping
*PhysicalAddress = MmGetPhysicalAddress(StreamHeader->Data);
*VirtualAddress = StreamHeader->Data;
*ByteCount = StreamHeader->DataUsed;
// decrement mapping count
InterlockedDecrement(&m_NumMappings);
// decrement num data available
m_NumDataAvailable -= StreamHeader->DataUsed;
// setup mapping
*PhysicalAddress = MmGetPhysicalAddress(StreamData->Data[StreamData->StreamHeaderIndex]);
*VirtualAddress = StreamData->Data[StreamData->StreamHeaderIndex];
// store tag in irp
Irp->Tail.Overlay.DriverContext[3] = Tag;
StreamData->Tags[StreamData->StreamHeaderIndex] = Tag;
// mapping size
if (m_Descriptor->DataFlow == KSPIN_DATAFLOW_IN)
{
// sink pin
*ByteCount = StreamData->CurStreamHeader->DataUsed;
// decrement num data available
m_NumDataAvailable -= StreamData->CurStreamHeader->DataUsed;
}
else
{
// source pin
*ByteCount = StreamData->CurStreamHeader->FrameExtent;
// decrement num data available
m_NumDataAvailable -= StreamData->CurStreamHeader->FrameExtent;
}
if (StreamData->StreamHeaderIndex + 1 == StreamData->StreamHeaderCount)
{
// last mapping
*Flags = 1;
// insert mapping into free list
ExInterlockedInsertTailList(&m_FreeIrpList, &m_Irp->Tail.Overlay.ListEntry, &m_IrpListLock);
// clear irp
m_Irp = NULL;
}
else
{
// one more mapping in the irp
*Flags = 0;
// increment header index
StreamData->StreamHeaderIndex++;
// move to next header
StreamData->CurStreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)StreamData->CurStreamHeader + StreamData->CurStreamHeader->Size);
}
// done
return STATUS_SUCCESS;
@ -487,34 +606,123 @@ CIrpQueue::ReleaseMappingWithTag(
{
PIRP Irp;
PLIST_ENTRY CurEntry;
PKSSTREAM_HEADER StreamHeader;
PKSSTREAM_DATA StreamData;
PIO_STACK_LOCATION IoStack;
ULONG Index;
DPRINT("CIrpQueue::ReleaseMappingWithTag Tag %p\n", Tag);
// first check if there is an active irp
if (m_Irp)
{
// now check if there are already used mappings
StreamData = (PKSSTREAM_DATA)m_Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
if (StreamData->StreamHeaderIndex)
{
// check if the released mapping is one current processed irps
for(Index = 0; Index < StreamData->StreamHeaderIndex; Index++)
{
// check if it is the same tag
if (StreamData->Tags[Index] == Tag)
{
// mark mapping as released
StreamData->Tags[Index] = NULL;
// done
return STATUS_SUCCESS;
}
}
}
}
// remove irp from used list
CurEntry = ExInterlockedRemoveHeadList(&m_FreeIrpList, &m_IrpListLock);
// sanity check
PC_ASSERT(CurEntry);
// get irp from list entry
Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
// HACK get stream header
StreamHeader = (PKSSTREAM_HEADER)Irp->Tail.Overlay.DriverContext[2];
// get stream data
StreamData = (PKSSTREAM_DATA)Irp->Tail.Overlay.DriverContext[STREAM_DATA_OFFSET];
// driver must release items in the same order
PC_ASSERT(Irp->Tail.Overlay.DriverContext[3] == Tag);
// sanity check
PC_ASSERT(StreamData->StreamHeaderIndex + 1 == StreamData->StreamHeaderCount);
// irp has been processed completly
// check if the released mapping is one of these
for(Index = 0; Index < StreamData->StreamHeaderCount; Index++)
{
if (StreamData->Tags[Index] == Tag)
{
// mark mapping as released
StreamData->Tags[Index] = NULL;
// done
break;
}
else
{
//
// we assume that mappings are released in the same order as they have been acquired
// therefore if the current mapping is not the searched one, it must have been already
// released
//
PC_ASSERT(StreamData->Tags[Index] == NULL);
}
}
// check if this is the last one released mapping
if (Index + 1 == StreamData->StreamHeaderCount)
{
// last mapping released
// now check if this is a looped buffer
if (m_ConnectDetails->Interface.Id == KSINTERFACE_STANDARD_LOOPED_STREAMING)
{
// looped buffers are not completed when they have been played
// they are completed when the stream is set to stop
// reset stream header index
StreamData->StreamHeaderIndex = 0;
// reset stream header
StreamData->CurStreamHeader = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
// increment available data
InterlockedExchangeAdd((PLONG)&m_NumDataAvailable, StreamData->TotalStreamData);
// re-insert irp
KsAddIrpToCancelableQueue(&m_IrpList, &m_IrpListLock, Irp, KsListEntryTail, NULL);
// done
return STATUS_SUCCESS;
}
//
// time to complete non looped buffer
//
// free stream data array
FreeItem(StreamData->Data, TAG_PORTCLASS);
// free stream tags array
FreeItem(StreamData->Tags, TAG_PORTCLASS);
// free stream data
FreeItem(StreamData, TAG_PORTCLASS);
// get io stack
IoStack = IoGetCurrentIrpStackLocation(Irp);
// store operation status
Irp->IoStatus.Status = STATUS_SUCCESS;
// frame extend contains the original request size, DataUsed contains the real buffer size
// is different when kmixer performs channel conversion, upsampling etc
Irp->IoStatus.Information = StreamHeader->FrameExtent;
// store operation length
Irp->IoStatus.Information = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
// complete the request
IoCompleteRequest(Irp, IO_SOUND_INCREMENT);
}
return STATUS_SUCCESS;
}
@ -542,38 +750,18 @@ CIrpQueue::GetAcquiredTagRange(
{
KIRQL OldLevel;
BOOLEAN Ret = FALSE;
PIRP Irp;
PLIST_ENTRY CurEntry;
//PIRP Irp;
//PLIST_ENTRY CurEntry;
//PKSSTREAM_DATA StreamData;
// lock list
KeAcquireSpinLock(&m_IrpListLock, &OldLevel);
if (!IsListEmpty(&m_FreeIrpList))
{
// get first entry
CurEntry = RemoveHeadList(&m_FreeIrpList);
// get irp from list entry
Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
// initialize to zero
*FirstTag = NULL;
*LastTag = NULL;
// get tag of first acquired buffer
*FirstTag = Irp->Tail.Overlay.DriverContext[3];
// put back irp
InsertHeadList(&m_FreeIrpList, &Irp->Tail.Overlay.ListEntry);
// get last entry
CurEntry = RemoveTailList(&m_FreeIrpList);
// get irp from list entry
Irp = (PIRP)CONTAINING_RECORD(CurEntry, IRP, Tail.Overlay.ListEntry);
// get tag of first acquired buffer
*LastTag = Irp->Tail.Overlay.DriverContext[3];
// put back irp
InsertTailList(&m_FreeIrpList, &Irp->Tail.Overlay.ListEntry);
// indicate success
Ret = TRUE;
}
UNIMPLEMENTED;
// release lock
KeReleaseSpinLock(&m_IrpListLock, OldLevel);

File diff suppressed because it is too large Load diff

View file

@ -604,7 +604,7 @@ CPortPinDMus::Init(
}
}
Status = m_IrpQueue->Init(ConnectDetails, 0, 0);
Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, 0, 0, FALSE);
if (!NT_SUCCESS(Status))
{
DPRINT("IrpQueue_Init failed with %x\n", Status);

View file

@ -699,15 +699,15 @@ CPortPinWaveCyclic::UpdateCommonBuffer(
if (!NT_SUCCESS(Status))
{
Gap = Position - m_CommonBufferOffset;
if (Gap > m_FrameSize)
if (Gap > BufferLength)
{
// insert silence samples
DPRINT1("Inserting Silence Buffer Offset %lu GapLength %lu\n", m_CommonBufferOffset, BufferLength);
DPRINT("Inserting Silence Buffer Offset %lu GapLength %lu\n", m_CommonBufferOffset, BufferLength);
m_Stream->Silence((PUCHAR)m_CommonBuffer + m_CommonBufferOffset, BufferLength);
m_CommonBufferOffset += BufferLength;
break;
}
break;
}
BytesToCopy = min(BufferLength, BufferSize);
@ -758,10 +758,10 @@ CPortPinWaveCyclic::UpdateCommonBufferOverlap(
if (!NT_SUCCESS(Status))
{
Gap = m_CommonBufferSize - m_CommonBufferOffset + Position;
if (Gap > m_FrameSize)
if (Gap > BufferLength)
{
// insert silence samples
DPRINT1("Overlap Inserting Silence Buffer Size %lu Offset %lu Gap %lu Position %lu\n", m_CommonBufferSize, m_CommonBufferOffset, Gap, Position);
DPRINT("Overlap Inserting Silence Buffer Size %lu Offset %lu Gap %lu Position %lu\n", m_CommonBufferSize, m_CommonBufferOffset, Gap, Position);
m_Stream->Silence((PUCHAR)m_CommonBuffer + m_CommonBufferOffset, BufferLength);
m_CommonBufferOffset += BufferLength;
@ -1290,7 +1290,7 @@ CPortPinWaveCyclic::Init(
PC_ASSERT(NT_SUCCESS(Status));
PC_ASSERT(m_FrameSize);
DPRINT1("Bits %u Samples %u Channels %u Tag %u FrameSize %u CommonBufferSize %lu\n", ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.wBitsPerSample, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.nSamplesPerSec, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.nChannels, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.wFormatTag, m_FrameSize, m_CommonBufferSize);
DPRINT1("Bits %u Samples %u Channels %u Tag %u FrameSize %u CommonBufferSize %lu, CommonBuffer %p\n", ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.wBitsPerSample, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.nSamplesPerSec, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.nChannels, ((PKSDATAFORMAT_WAVEFORMATEX)(DataFormat))->WaveFormatEx.wFormatTag, m_FrameSize, m_CommonBufferSize, m_DmaChannel->SystemAddress());
/* set up allocator framing */
@ -1303,7 +1303,7 @@ CPortPinWaveCyclic::Init(
m_Stream->Silence(m_CommonBuffer, m_CommonBufferSize);
Status = m_IrpQueue->Init(ConnectDetails, m_FrameSize, 0);
Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, m_FrameSize, 0, FALSE);
if (!NT_SUCCESS(Status))
{
m_IrpQueue->Release();

View file

@ -919,7 +919,7 @@ CPortPinWavePci::Init(
}
// initialize irp queue
Status = m_IrpQueue->Init(ConnectDetails, m_AllocatorFraming.FrameSize, m_AllocatorFraming.FileAlignment);
Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, m_AllocatorFraming.FrameSize, m_AllocatorFraming.FileAlignment, TRUE);
if (!NT_SUCCESS(Status))
{
// this should never happen

View file

@ -283,7 +283,7 @@ NTAPI
CPortPinWaveRT::HandleKsStream(
IN PIRP Irp)
{
DPRINT("IPortPinWaveRT_HandleKsStream entered State %u Stream %p\n", m_State, m_Stream);
DPRINT("IPortPinWaveRT_HandleKsStream entered State %u Stream %p is UNIMPLEMENTED\n", m_State, m_Stream);
return STATUS_PENDING;
}
@ -587,7 +587,7 @@ CPortPinWaveRT::Init(
goto cleanup;
}
Status = m_IrpQueue->Init(ConnectDetails, 0, 0);
Status = m_IrpQueue->Init(ConnectDetails, KsPinDescriptor, 0, 0, FALSE);
if (!NT_SUCCESS(Status))
{
goto cleanup;

View file

@ -39,10 +39,8 @@ public:
virtual ~CPortWaveCyclic(){}
protected:
BOOL m_bInitialized;
PDEVICE_OBJECT m_pDeviceObject;
PMINIPORTWAVECYCLIC m_pMiniport;
PRESOURCELIST m_pResourceList;
PPINCOUNT m_pPinCount;
PPOWERNOTIFY m_pPowerNotify;
PPCFILTER_DESCRIPTOR m_pDescriptor;
@ -202,12 +200,6 @@ CPortWaveCyclic::GetDeviceProperty(
{
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (!m_bInitialized)
{
DPRINT("IPortWaveCyclic_fnNewRegistryKey called w/o initiazed\n");
return STATUS_UNSUCCESSFUL;
}
return IoGetDeviceProperty(m_pDeviceObject, DeviceRegistryProperty, BufferLength, PropertyBuffer, ReturnLength);
}
@ -228,12 +220,6 @@ CPortWaveCyclic::Init(
DPRINT("IPortWaveCyclic_Init entered %p\n", this);
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (m_bInitialized)
{
DPRINT("IPortWaveCyclic_Init called again\n");
return STATUS_SUCCESS;
}
Status = UnknownMiniport->QueryInterface(IID_IMiniportWaveCyclic, (PVOID*)&Miniport);
if (!NT_SUCCESS(Status))
{
@ -244,22 +230,13 @@ CPortWaveCyclic::Init(
// Initialize port object
m_pMiniport = Miniport;
m_pDeviceObject = DeviceObject;
m_bInitialized = TRUE;
m_pResourceList = ResourceList;
if (ResourceList)
{
// increment reference on resource list
ResourceList->AddRef();
}
// initialize miniport
Status = Miniport->Init(UnknownAdapter, ResourceList, this);
if (!NT_SUCCESS(Status))
{
DPRINT("IMiniportWaveCyclic_Init failed with %x\n", Status);
Miniport->Release();
m_bInitialized = FALSE;
return Status;
}
@ -270,7 +247,6 @@ CPortWaveCyclic::Init(
{
DPRINT("failed to get description\n");
Miniport->Release();
m_bInitialized = FALSE;
return Status;
}
@ -294,7 +270,6 @@ CPortWaveCyclic::Init(
{
DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
Miniport->Release();
m_bInitialized = FALSE;
return Status;
}
@ -335,11 +310,6 @@ CPortWaveCyclic::NewRegistryKey(
{
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (!m_bInitialized)
{
DPRINT("IPortWaveCyclic_fnNewRegistryKey called w/o initialized\n");
return STATUS_UNSUCCESSFUL;
}
return PcNewRegistryKey(OutRegistryKey, OuterUnknown, RegistryKeyType, DesiredAccess, m_pDeviceObject, (ISubdevice*)this, ObjectAttributes, CreateOptions, Disposition);
}
@ -365,12 +335,6 @@ CPortWaveCyclic::NewMasterDmaChannel(
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (!m_bInitialized)
{
DPRINT("IPortWaveCyclic_fnNewSlaveDmaChannel called w/o initialized\n");
return STATUS_UNSUCCESSFUL;
}
Status = PcDmaMasterDescription(ResourceList, (Dma32BitAddresses | Dma64BitAddresses), Dma32BitAddresses, 0, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, 0, &DeviceDescription);
if (NT_SUCCESS(Status))
{
@ -397,12 +361,6 @@ CPortWaveCyclic::NewSlaveDmaChannel(
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (!m_bInitialized)
{
DPRINT("IPortWaveCyclic_fnNewSlaveDmaChannel called w/o initialized\n");
return STATUS_UNSUCCESSFUL;
}
// FIXME
// Check for F-Type DMA Support
//

View file

@ -43,8 +43,6 @@ protected:
PMINIPORTWAVEPCI m_Miniport;
PDEVICE_OBJECT m_pDeviceObject;
BOOL m_bInitialized;
PRESOURCELIST m_pResourceList;
PSERVICEGROUP m_ServiceGroup;
PPINCOUNT m_pPinCount;
PPOWERNOTIFY m_pPowerNotify;
@ -233,12 +231,6 @@ CPortWavePci::Init(
this, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (m_bInitialized)
{
DPRINT("IPortWavePci_fnInit called again\n");
return STATUS_SUCCESS;
}
Status = UnknownMiniport->QueryInterface(IID_IMiniportWavePci, (PVOID*)&Miniport);
if (!NT_SUCCESS(Status))
{
@ -249,30 +241,20 @@ CPortWavePci::Init(
// Initialize port object
m_Miniport = Miniport;
m_pDeviceObject = DeviceObject;
m_bInitialized = TRUE;
m_pResourceList = ResourceList;
InitializeListHead(&m_EventList);
KeInitializeSpinLock(&m_EventListLock);
// increment reference on miniport adapter
Miniport->AddRef();
if (ResourceList)
{
// increment reference on resource list
ResourceList->AddRef();
}
Status = Miniport->Init(UnknownAdapter, ResourceList, this, &ServiceGroup);
if (!NT_SUCCESS(Status))
{
DPRINT("IPortWavePci_fnInit failed with %x\n", Status);
m_bInitialized = FALSE;
// release reference on miniport adapter
Miniport->Release();
// increment reference on resource list
ResourceList->Release();
return Status;
}
@ -282,7 +264,6 @@ CPortWavePci::Init(
{
DPRINT("failed to get description\n");
Miniport->Release();
m_bInitialized = FALSE;
return Status;
}
@ -307,7 +288,6 @@ CPortWavePci::Init(
{
DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
Miniport->Release();
m_bInitialized = FALSE;
return Status;
}
@ -361,12 +341,6 @@ CPortWavePci::NewRegistryKey(
DPRINT("IPortWavePci_fnNewRegistryKey entered\n");
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (!m_bInitialized)
{
DPRINT("IPortWavePci_fnNewRegistryKey called w/o initiazed\n");
return STATUS_UNSUCCESSFUL;
}
return PcNewRegistryKey(OutRegistryKey,
OuterUnknown,
RegistryKeyType,
@ -389,12 +363,6 @@ CPortWavePci::GetDeviceProperty(
DPRINT("IPortWavePci_fnGetDeviceProperty entered\n");
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
if (!m_bInitialized)
{
DPRINT("IPortWavePci_fnNewRegistryKey called w/o initiazed\n");
return STATUS_UNSUCCESSFUL;
}
return IoGetDeviceProperty(m_pDeviceObject, DeviceRegistryProperty, BufferLength, PropertyBuffer, ReturnLength);
}
@ -434,8 +402,6 @@ NTAPI
CPortWavePci::Notify(
IN PSERVICEGROUP ServiceGroup)
{
//IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
//DPRINT("IPortWavePci_fnNotify entered %p, ServiceGroup %p\n", This, ServiceGroup);
if (ServiceGroup)
@ -492,8 +458,6 @@ NTSTATUS
NTAPI
CPortWavePci::ReleaseChildren()
{
//IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblSubDevice);
UNIMPLEMENTED
return STATUS_UNSUCCESSFUL;
}

View file

@ -22,6 +22,8 @@
#include "interfaces.hpp"
#include <ks.h>
#include <ksmedia.h>
#include <stdio.h>
//#include <intrin.h>
#define TAG_PORTCLASS 'SLCP'

View file

@ -27,6 +27,12 @@ WdmAudControlOpen(
return WdmAudControlOpenWave(DeviceObject, Irp, DeviceInfo, ClientInfo);
}
if (DeviceInfo->DeviceType == MIDI_OUT_DEVICE_TYPE || DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE)
{
return WdmAudControlOpenMidi(DeviceObject, Irp, DeviceInfo, ClientInfo);
}
return SetIrpIoStatus(Irp, STATUS_NOT_SUPPORTED, sizeof(WDMAUD_DEVICE_INFO));
}
@ -55,6 +61,15 @@ WdmAudControlDeviceType(
{
Result = WdmAudGetWaveOutDeviceCount();
}
else if (DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE)
{
Result = WdmAudGetMidiInDeviceCount();
}
else if (DeviceInfo->DeviceType == MIDI_OUT_DEVICE_TYPE)
{
Result = WdmAudGetMidiOutDeviceCount();
}
/* store result count */
DeviceInfo->DeviceCount = Result;
@ -121,6 +136,10 @@ WdmAudCapabilities(
{
Status = WdmAudWaveCapabilities(DeviceObject, DeviceInfo, ClientInfo, DeviceExtension);
}
else if (DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE || DeviceInfo->DeviceType == MIDI_OUT_DEVICE_TYPE)
{
Status = WdmAudMidiCapabilities(DeviceObject, DeviceInfo, ClientInfo, DeviceExtension);
}
return SetIrpIoStatus(Irp, Status, sizeof(WDMAUD_DEVICE_INFO));
}
@ -219,9 +238,7 @@ WdmAudGetDeviceInterface(
/* get device interface string input length */
Size = DeviceInfo->u.Interface.DeviceInterfaceStringSize;
if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE || DeviceInfo->DeviceType == WAVE_OUT_DEVICE_TYPE)
{
/* get wave info */
/* get mixer info */
Status = WdmAudGetPnpNameByIndexAndType(DeviceInfo->DeviceIndex, DeviceInfo->DeviceType, &Device);
/* check for success */
@ -253,46 +270,6 @@ WdmAudGetDeviceInterface(
FreeItem(Device);
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
}
else if (DeviceInfo->DeviceType == MIXER_DEVICE_TYPE)
{
if (DeviceInfo->DeviceIndex >= WdmAudGetMixerDeviceCount())
{
/* invalid device id */
return SetIrpIoStatus(Irp, STATUS_INVALID_PARAMETER, sizeof(WDMAUD_DEVICE_INFO));
}
Status = WdmAudGetMixerPnpNameByIndex(DeviceInfo->DeviceIndex, &Device);
/* check for success */
if (!NT_SUCCESS(Status))
{
/* invalid device id */
return SetIrpIoStatus(Irp, Status, sizeof(WDMAUD_DEVICE_INFO));
}
/* calculate length */
Length = (wcslen(Device)+1) * sizeof(WCHAR);
if (!Size)
{
/* store device interface size */
DeviceInfo->u.Interface.DeviceInterfaceStringSize = Length;
}
else if (Size < Length)
{
/* buffer too small */
DeviceInfo->u.Interface.DeviceInterfaceStringSize = Length;
return SetIrpIoStatus(Irp, STATUS_BUFFER_OVERFLOW, sizeof(WDMAUD_DEVICE_INFO));
}
else
{
//FIXME SEH
RtlMoveMemory(DeviceInfo->u.Interface.DeviceInterfaceString, Device, Length);
}
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
}
return SetIrpIoStatus(Irp, STATUS_INVALID_DEVICE_REQUEST, sizeof(WDMAUD_DEVICE_INFO));
}
NTSTATUS
@ -407,6 +384,93 @@ WdmAudDeviceControl(
return SetIrpIoStatus(Irp, STATUS_NOT_IMPLEMENTED, 0);
}
NTSTATUS
NTAPI
IoCompletion (
PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PVOID Ctx)
{
PKSSTREAM_HEADER Header;
ULONG Length = 0;
PMDL Mdl, NextMdl;
PWDMAUD_COMPLETION_CONTEXT Context = (PWDMAUD_COMPLETION_CONTEXT)Ctx;
/* get stream header */
Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
/* sanity check */
ASSERT(Header);
/* iterate through all stream headers and collect size */
do
{
if (Context->Function == IOCTL_KS_READ_STREAM)
{
/* length is stored in DataUsed */
Length += Header->DataUsed;
}
else
{
/* length stored in frameextend */
Length += Header->FrameExtent;
}
/* subtract size */
Context->Length -= Header->Size;
/* move to next stream header */
Header = (PKSSTREAM_HEADER)((ULONG_PTR)Header + Header->Size);
}while(Context->Length);
/* time to free all allocated mdls */
Mdl = Irp->MdlAddress;
while(Mdl)
{
/* get next mdl */
NextMdl = Mdl->Next;
/* unlock pages */
MmUnlockPages(Mdl);
/* grab next mdl */
Mdl = NextMdl;
}
/* clear mdl list */
Irp->MdlAddress = NULL;
/* check if mdl is locked */
if (Context->Mdl->MdlFlags & MDL_PAGES_LOCKED)
{
/* unlock pages */
MmUnlockPages(Context->Mdl);
}
/* now free the mdl */
IoFreeMdl(Context->Mdl);
DPRINT("IoCompletion Irp %p IoStatus %lx Information %lx Length %lu\n", Irp, Irp->IoStatus.Status, Irp->IoStatus.Information, Length);
if (Irp->IoStatus.Status == STATUS_SUCCESS)
{
/* store the length */
Irp->IoStatus.Information = Length;
}
else
{
/* failed */
Irp->IoStatus.Information = 0;
}
/* free context */
FreeItem(Context);
return STATUS_SUCCESS;
}
NTSTATUS
NTAPI
@ -421,6 +485,20 @@ WdmAudReadWrite(
ULONG Length;
PMDL Mdl;
BOOLEAN Read = TRUE;
PWDMAUD_COMPLETION_CONTEXT Context;
/* allocate completion context */
Context = AllocateItem(NonPagedPool, sizeof(WDMAUD_COMPLETION_CONTEXT));
if (!Context)
{
/* not enough memory */
Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
/* done */
return STATUS_INSUFFICIENT_RESOURCES;
}
/* get current irp stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp);
@ -437,6 +515,11 @@ WdmAudReadWrite(
/* store outputbuffer length */
IoStack->Parameters.DeviceIoControl.OutputBufferLength = Length;
/* setup context */
Context->Length = Length;
Context->Function = (IoStack->MajorFunction == IRP_MJ_WRITE ? IOCTL_KS_WRITE_STREAM : IOCTL_KS_READ_STREAM);
Context->Mdl = Irp->MdlAddress;
/* store mdl address */
Mdl = Irp->MdlAddress;
@ -464,9 +547,6 @@ WdmAudReadWrite(
return SetIrpIoStatus(Irp, Status, 0);
}
/* now free the mdl */
IoFreeMdl(Mdl);
/* get device info */
DeviceInfo = (PWDMAUD_DEVICE_INFO)Irp->AssociatedIrp.SystemBuffer;
ASSERT(DeviceInfo);
@ -499,6 +579,9 @@ WdmAudReadWrite(
IoStack->Parameters.Write.Length = Length;
IoStack->MajorFunction = IRP_MJ_WRITE;
IoSetCompletionRoutine(Irp, IoCompletion, (PVOID)Context, TRUE, TRUE, TRUE);
/* mark irp as pending */
// IoMarkIrpPending(Irp);
/* call the driver */

View file

@ -42,6 +42,8 @@ typedef struct
WAVEOUTCAPSW WaveOutCaps;
AUXCAPSW AuxCaps;
WAVEINCAPSW WaveInCaps;
MIDIINCAPSW MidiInCaps;
MIDIOUTCAPSW MidiOutCaps;
ULONGLONG Position;
struct
{

View file

@ -612,13 +612,16 @@ WdmAudGetWaveOutDeviceCount()
return MMixerGetWaveOutCount(&MixerContext);
}
NTSTATUS
WdmAudGetMixerPnpNameByIndex(
IN ULONG DeviceIndex,
OUT LPWSTR * Device)
ULONG
WdmAudGetMidiInDeviceCount()
{
UNIMPLEMENTED
return STATUS_NOT_IMPLEMENTED;
return MMixerGetMidiInCount(&MixerContext);
}
ULONG
WdmAudGetMidiOutDeviceCount()
{
return MMixerGetWaveOutCount(&MixerContext);
}
NTSTATUS
@ -627,9 +630,25 @@ WdmAudGetPnpNameByIndexAndType(
IN SOUND_DEVICE_TYPE DeviceType,
OUT LPWSTR *DevicePath)
{
if (DeviceType == WAVE_IN_DEVICE_TYPE || DeviceType == WAVE_OUT_DEVICE_TYPE)
{
if (MMixerGetWaveDevicePath(&MixerContext, DeviceType == WAVE_IN_DEVICE_TYPE, DeviceIndex, DevicePath) == MM_STATUS_SUCCESS)
return STATUS_SUCCESS;
else
return STATUS_UNSUCCESSFUL;
}
else if (DeviceType == MIDI_IN_DEVICE_TYPE || DeviceType == MIDI_OUT_DEVICE_TYPE)
{
if (MMixerGetMidiDevicePath(&MixerContext, DeviceType == MIDI_IN_DEVICE_TYPE, DeviceIndex, DevicePath) == MM_STATUS_SUCCESS)
return STATUS_SUCCESS;
else
return STATUS_UNSUCCESSFUL;
}
else if (DeviceType == MIXER_DEVICE_TYPE)
{
UNIMPLEMENTED;
}
return STATUS_UNSUCCESSFUL;
}
@ -640,7 +659,7 @@ WdmAudWaveCapabilities(
IN PWDMAUD_CLIENT ClientInfo,
IN PWDMAUD_DEVICE_EXTENSION DeviceExtension)
{
MIXER_STATUS Status;
MIXER_STATUS Status = MM_STATUS_UNSUCCESSFUL;
if (DeviceInfo->DeviceType == WAVE_IN_DEVICE_TYPE)
{
@ -652,10 +671,31 @@ WdmAudWaveCapabilities(
/* get capabilities */
Status = MMixerWaveOutCapabilities(&MixerContext, DeviceInfo->DeviceIndex, &DeviceInfo->u.WaveOutCaps);
}
if (Status == MM_STATUS_SUCCESS)
return STATUS_SUCCESS;
else
return Status;
}
NTSTATUS
WdmAudMidiCapabilities(
IN PDEVICE_OBJECT DeviceObject,
IN PWDMAUD_DEVICE_INFO DeviceInfo,
IN PWDMAUD_CLIENT ClientInfo,
IN PWDMAUD_DEVICE_EXTENSION DeviceExtension)
{
MIXER_STATUS Status = MM_STATUS_UNSUCCESSFUL;
if (DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE)
{
ASSERT(0);
return STATUS_UNSUCCESSFUL;
/* get capabilities */
Status = MMixerMidiInCapabilities(&MixerContext, DeviceInfo->DeviceIndex, &DeviceInfo->u.MidiInCaps);
}
else if (DeviceInfo->DeviceType == WAVE_OUT_DEVICE_TYPE)
{
/* get capabilities */
Status = MMixerMidiOutCapabilities(&MixerContext, DeviceInfo->DeviceIndex, &DeviceInfo->u.MidiOutCaps);
}
if (Status == MM_STATUS_SUCCESS)
@ -737,3 +777,26 @@ WdmAudControlOpenWave(
else
return SetIrpIoStatus(Irp, STATUS_NOT_SUPPORTED, sizeof(WDMAUD_DEVICE_INFO));
}
NTSTATUS
WdmAudControlOpenMidi(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PWDMAUD_DEVICE_INFO DeviceInfo,
IN PWDMAUD_CLIENT ClientInfo)
{
MIXER_STATUS Status;
PIN_CREATE_CONTEXT Context;
Context.ClientInfo = ClientInfo;
Context.DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
Context.DeviceType = DeviceInfo->DeviceType;
Status = MMixerOpenMidi(&MixerContext, DeviceInfo->DeviceIndex, DeviceInfo->DeviceType == MIDI_IN_DEVICE_TYPE, CreatePinCallback, &Context, &DeviceInfo->hDevice);
if (Status == MM_STATUS_SUCCESS)
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(WDMAUD_DEVICE_INFO));
else
return SetIrpIoStatus(Irp, STATUS_NOT_SUPPORTED, sizeof(WDMAUD_DEVICE_INFO));
}

Some files were not shown because too many files have changed in this diff Show more