sync with trunk r47227

svn path=/branches/reactos-yarotows/; revision=47228
This commit is contained in:
Jérôme Gardou 2010-05-15 22:30:01 +00:00
commit 63b50165b2
120 changed files with 2678 additions and 18856 deletions

View file

@ -472,11 +472,6 @@ rgenstat: $(RGENSTAT_TARGET)
$(ECHO_RGENSTAT)
$(Q)$(RGENSTAT_TARGET) apistatus.lst apistatus.xml
.PHONY: cb
cb: $(ROS_BUILDENGINE)
$(ECHO_RBUILD)
$(Q)$(ROS_BUILDENGINE) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) cb
.PHONY: msbuild
msbuild: $(ROS_BUILDENGINE)
$(ECHO_RBUILD)

View file

@ -0,0 +1,78 @@
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
IDS_HELP, "ファイルのアクセス制御リスト(ACL) を表\示または変更します。\n\n\
CACLS ファイル名 [/T] [/E] [/C] [/G ユーザー名:アクセス権]\n\
[/R ユーザー名 [...]] [/P ユーザー名:アクセス権 [...]]\n\
[/D ユーザー名 [...]]\n\
ファイル名 ACL を表\示します。\n\
/T 現在のディレクトリとすべてのサブディレクトリにある\n\
指定されたファイルの ACL を変更します。\n\
/E ACL を置き換えずに、ACL を編集します。\n\
/C アクセス拒否エラーを無視して、ACL の変更を続行します。\n\
/G ユーザー名:アクセス権\n\
指定されたユーザーにアクセス権を与えます。\n\
アクセス権: R 読み取り\n\
W 書き込み\n\
C 変更 (書き込み)\n\
F フル コントロール\n\
/R ユーザー名 指定されたユーザーのアクセス権を失効させます。\n\
(/E オプションと共に使用)。\n\
/P ユーザー名:アクセス権\n\
指定されたユーザーのアクセス権を置き換えます。\n\
アクセス権: N なし\n\
W 書き込み\n\
R 読み取り\n\
C 変更 (書き込み)\n\
F フル コントロール\n\
/D ユーザー名 指定されたユーザーのアクセスを拒否します。\n\
複数のファイルを指定するには、ワイルドカードを使用できます。\n\
複数のユーザーを指定できます。\n\n\
省略形:\n\
CI - コンテナ継承。\n\
ACE はディレクトリに継承されます。\n\
OI - オブジェクト継承。\n\
ACE はファイルに継承されます。\n\
IO - 継承のみ。\n\
ACE は現在のファイル/ディレクトリに適用されません。\n"
IDS_ABBR_CI, "(CI)"
IDS_ABBR_OI, "(OI)"
IDS_ABBR_IO, "(IO)"
IDS_ABBR_FULL, "F"
IDS_ABBR_READ, "R"
IDS_ABBR_WRITE, "W"
IDS_ABBR_CHANGE, "C"
IDS_ABBR_NONE, "N"
IDS_ALLOW, ""
IDS_DENY, "(DENY)"
IDS_SPECIAL_ACCESS, "(special access:)"
IDS_GENERIC_READ, "GENERIC_READ"
IDS_GENERIC_WRITE, "GENERIC_WRITE"
IDS_GENERIC_EXECUTE, "GENERIC_EXECUTE"
IDS_GENERIC_ALL, "GENERIC_ALL"
IDS_FILE_GENERIC_EXECUTE, "FILE_GENERIC_EXECUTE"
IDS_FILE_GENERIC_READ, "FILE_GENERIC_READ"
IDS_FILE_GENERIC_WRITE, "FILE_GENERIC_WRITE"
IDS_FILE_READ_DATA, "FILE_READ_DATA"
IDS_FILE_WRITE_DATA, "FILE_WRITE_DATA"
IDS_FILE_APPEND_DATA, "FILE_APPEND_DATA"
IDS_FILE_READ_EA, "FILE_READ_EA"
IDS_FILE_WRITE_EA, "FILE_WRITE_EA"
IDS_FILE_EXECUTE, "FILE_EXECUTE"
IDS_FILE_DELETE_CHILD, "FILE_DELETE_CHILD"
IDS_FILE_READ_ATTRIBUTES, "FILE_READ_ATTRIBUTES"
IDS_FILE_WRITE_ATTRIBUTES, "FILE_WRITE_ATTRIBUTES"
IDS_MAXIMUM_ALLOWED, "MAXIMUM_ALLOWED"
IDS_ACCESS_SYSTEM_SECURITY, "ACCESS_SYSTEM_SECURITY"
IDS_SPECIFIC_RIGHTS_ALL, "SPECIFIC_RIGHTS_ALL"
IDS_STANDARD_RIGHTS_REQUIRED, "STANDARD_RIGHTS_REQUIRED"
IDS_SYNCHRONIZE, "SYNCHRONIZE"
IDS_WRITE_OWNER, "WRITE_OWNER"
IDS_WRITE_DAC, "WRITE_DAC"
IDS_READ_CONTROL, "READ_CONTROL"
IDS_DELETE, "DELETE"
IDS_STANDARD_RIGHTS_ALL, "STANDARD_RIGHTS_ALL"
END

View file

@ -10,6 +10,7 @@
#include "lang/fr-FR.rc"
#include "lang/id-ID.rc"
#include "lang/it-IT.rc"
#include "lang/ja-JP.rc"
#include "lang/ko-KR.rc"
#include "lang/no-NO.rc"
#include "lang/nl-NL.rc"

View file

@ -0,0 +1,193 @@
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
IDR_MAINMENU MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&Preferenze", ID_SETTINGS
MENUITEM SEPARATOR
MENUITEM "E&sci", ID_EXIT
END
POPUP "&Programmi"
BEGIN
MENUITEM "&Installa", ID_INSTALL
MENUITEM "&Disinstalla",ID_UNINSTALL
MENUITEM "&Modifica", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "&Remuovi da Registry", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Aggiorna", ID_REFRESH
END
POPUP "?"
BEGIN
MENUITEM "Guida", ID_HELP, GRAYED
MENUITEM "Informazioni", ID_ABOUT
END
END
IDR_LINKMENU MENU
BEGIN
POPUP "popup"
BEGIN
MENUITEM "&Apri il collegamento in un browser", ID_OPEN_LINK
MENUITEM "&Copia il collegamento negli appunti", ID_COPY_LINK
END
END
IDR_APPLICATIONMENU MENU
BEGIN
POPUP "popup"
BEGIN
MENUITEM "&Installa", ID_INSTALL
MENUITEM "&Disinstalla", ID_UNINSTALL
MENUITEM "&Modifica", ID_MODIFY
MENUITEM SEPARATOR
MENUITEM "&Rimuovi da Registry", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Aggiorna", ID_REFRESH
END
END
IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Impostazioni"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Generale", -1, 4, 2, 240, 61
AUTOCHECKBOX "&Salva la posizione della finestra", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12
AUTOCHECKBOX "&Aggiorna la lista dei programmi accessibili", IDC_UPDATE_AVLIST, 15, 29, 219, 12
AUTOCHECKBOX "&Registra la installazione o disinstallazione dei programmi", IDC_LOG_ENABLED, 15, 46, 219, 12
GROUPBOX "Downloading", -1, 4, 65, 240, 51
LTEXT "Cartella:", -1, 16, 75, 100, 9
EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP
PUSHBUTTON "&Scegli", IDC_CHOOSE, 187, 85, 50, 14
AUTOCHECKBOX "&Rimuovere la procedura di installazione dopo l'uso", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12
PUSHBUTTON "Predefiniti", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14
PUSHBUTTON "OK", IDOK, 116, 124, 60, 14
PUSHBUTTON "Annulla", IDCANCEL, 181, 124, 60, 14
END
IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Installazione"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35
AUTORADIOBUTTON "&Installa da un disco (CD o DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP
AUTORADIOBUTTON "&Scarica e installa", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP
PUSHBUTTON "OK", IDOK, 86, 78, 60, 14
PUSHBUTTON "Annulla", IDCANCEL, 150, 78, 60, 14
END
IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76
STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
CAPTION "Download in corso"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Progress1", IDC_DOWNLOAD_PROGRESS, "msctls_progress32", WS_BORDER | PBS_SMOOTH, 10, 10, 200, 12
LTEXT "", IDC_DOWNLOAD_STATUS, 10, 30, 200, 10, SS_CENTER
PUSHBUTTON "Annulla", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
END
IDD_ABOUT_DIALOG DIALOGEX 22, 16, 190, 66
STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
CAPTION "Informazioni"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Gestione applicazioni di ReactOS \nCopyright (C) 2009\nby Dmitry Chapyshev (dmitry@reactos.org)", IDC_STATIC, 48, 7, 130, 39
PUSHBUTTON "Chiudi", IDOK, 133, 46, 50, 14
ICON IDI_MAIN, IDC_STATIC, 10, 10, 7, 30
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_TOOLTIP_INSTALL "Installa"
IDS_TOOLTIP_UNINSTALL "Disinstalla"
IDS_TOOLTIP_MODIFY "Modifica"
IDS_TOOLTIP_SETTINGS "Impostazioni"
IDS_TOOLTIP_REFRESH "Aggiorna"
IDS_TOOLTIP_EXIT "Esci"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_NAME "Nome"
IDS_APP_INST_VERSION "Versione"
IDS_APP_DESCRIPTION "Descrizione"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_INFO_VERSION "\nVersione: "
IDS_INFO_DESCRIPTION "\nDescrizione: "
IDS_INFO_PUBLISHER "\nPubblicato da: "
IDS_INFO_HELPLINK "\nHelp Link: "
IDS_INFO_HELPPHONE "\nHelp Telefono: "
IDS_INFO_README "\nLeggimi: "
IDS_INFO_REGOWNER "\nProprietario registrato: "
IDS_INFO_PRODUCTID "\nID prodotto: "
IDS_INFO_CONTACT "\nContatto: "
IDS_INFO_UPDATEINFO "\nInformazioni di aggiornamento: "
IDS_INFO_INFOABOUT "\nInformazioni: "
IDS_INFO_COMMENTS "\nCommenti: "
IDS_INFO_INSTLOCATION "\nInstallato in: "
IDS_INFO_INSTALLSRC "\nProvenienza Installazione: "
IDS_INFO_UNINSTALLSTR "\nStringa di disinstallazione: "
IDS_INFO_MODIFYPATH "\nModifica percorso: "
IDS_INFO_INSTALLDATE "\nData installazione: "
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_AINFO_VERSION "\nVersione: "
IDS_AINFO_DESCRIPTION "\nDescrizione: "
IDS_AINFO_SIZE "\nDimensione: "
IDS_AINFO_URLSITE "\nHome Page: "
IDS_AINFO_LICENCE "\nLicenza: "
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_CAT_AUDIO "Audio"
IDS_CAT_DEVEL "Sviluppo"
IDS_CAT_DRIVERS "Drivers"
IDS_CAT_EDU "Edutainment"
IDS_CAT_ENGINEER "Engineering"
IDS_CAT_FINANCE "Finanza"
IDS_CAT_GAMES "Giochi e divertimento"
IDS_CAT_GRAPHICS "Graphica"
IDS_CAT_INTERNET "Internet & rete"
IDS_CAT_LIBS "Librerie"
IDS_CAT_OFFICE "Ufficio"
IDS_CAT_OTHER "Altro"
IDS_CAT_SCIENCE "Scienza"
IDS_CAT_TOOLS "Strumenti"
IDS_CAT_VIDEO "Video"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_APPTITLE "ReactOS Applications Manager"
IDS_SEARCH_TEXT "Cerca..."
IDS_INSTALL "Installa"
IDS_UNINSTALL "Disinstall"
IDS_MODIFY "Modifica"
IDS_APPS_COUNT "Numero applicazioni: %d"
IDS_WELCOME_TITLE "Benvenuto!\n\n"
IDS_WELCOME_TEXT "Scegliere una categoria a sinistra, poi scegliere una applicazione da installare o disinstallare.\nReactOS Web Site: "
IDS_WELCOME_URL "http://www.reactos.org"
IDS_INSTALLED "Installato"
IDS_AVAILABLEFORINST "Disponibile"
IDS_UPDATES "Aggiornamenti"
IDS_APPLICATIONS "Applicazioni"
IDS_CHOOSE_FOLDER_TEXT "Scegliere una cartella dove scaricare le applicazioni:"
IDS_CHOOSE_FOLDER_ERROR "La cartella indicata non esiste."
IDS_USER_NOT_ADMIN "Dovete essere Amministratore per avviare ""ReactOS Applications Manager""!"
IDS_APP_REG_REMOVE "Sicuro di voler cancellare dal registry i dati sui programmi installati?"
IDS_INFORMATION "Informazioni"
IDS_UNABLE_TO_REMOVE "Impossibile cancellare i dati dal registry!"
END

View file

@ -8,35 +8,35 @@ Description = The most popular and one of the best free Web Browsers out there.
Size = 7.2M
Category = 5
URLSite = http://www.mozilla.com/en-US/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real/win32/en-US/Firefox%20Setup%203.0.19.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/en-US/Firefox%20Setup%203.0.19.exe
CDPath = none
[Section.0407]
Description = Der populärste und einer der besten freien Webbrowser.
Size = 7.0M
URLSite = http://www.mozilla-europe.org/de/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real/win32/de/Firefox%20Setup%203.0.19.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/de/Firefox%20Setup%203.0.19.exe
[Section.040a]
Description = El más popular y uno de los mejores navegadores web gratuitos que hay.
Size = 7.0M
URLSite = http://www.mozilla-europe.org/es/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real/win32/es-ES/Firefox%20Setup%203.0.19.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/es-ES/Firefox%20Setup%203.0.19.exe
[Section.0414]
Description = Mest populære og best også gratis nettleserene der ute.
Size = 7.0M
URLSite = http://www.mozilla-europe.org/no/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real/win32/nb-NO/Firefox%20Setup%203.0.19.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/nb-NO/Firefox%20Setup%203.0.19.exe
[Section.0415]
Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych.
Size = 7.8M
URLSite = http://www.mozilla-europe.org/pl/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real/win32/pl/Firefox%20Setup%203.0.19.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/pl/Firefox%20Setup%203.0.19.exe
[Section.0419]
Description = Один из самых популярных и лучших бесплатных браузеров.
Size = 7.4M
URLSite = http://www.mozilla-europe.org/ru/
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real/win32/ru/Firefox%20Setup%203.0.19.exe
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/ru/Firefox%20Setup%203.0.19.exe

View file

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

View file

@ -2,13 +2,13 @@
[Section]
Name = OpenTTD
Version = 1.0.0
Version = 1.0.1
Licence = GPL v2
Description = Open Source clone of the "Transport Tycoon Deluxe" game engine. You need a copy of Transport Tycoon.
Size = 3.5MB
Category = 4
URLSite = http://www.openttd.org/
URLDownload = http://binaries.openttd.org/releases/1.0.0/openttd-1.0.0-windows-win32.exe
URLDownload = http://binaries.openttd.org/releases/1.0.1/openttd-1.0.1-windows-win32.exe
CDPath = none
[Section.0407]

View file

@ -2,13 +2,13 @@
[Section]
Name = Opera
Version = 10.52
Version = 10.53
Licence = Freeware
Description = The popular Opera Browser with many advanced features and including a Mail and BitTorrent client.
Size = 12.0M
Size = 12.4M
Category = 5
URLSite = http://www.opera.com/
URLDownload = http://get4.opera.com/pub/opera/win/1052/int/Opera_1052_int_Setup.exe
URLDownload = http://get4.opera.com/pub/opera/win/1053/int/Opera_1053_int_Setup.exe
CDPath = none
[Section.0407]

View file

@ -2,13 +2,13 @@
[Section]
Name = ScummVM
Version = 1.1.0
Version = 1.1.1
Licence = GPL
Description = Sam and Max, Day of the Tentacle, etc on ReactOS.
Size = 3.4MB
Size = 3.3MB
Category = 4
URLSite = http://scummvm.org/
URLDownload = http://dfn.dl.sourceforge.net/project/scummvm/scummvm/1.1.0/scummvm-1.1.0-win32.exe
URLDownload = http://dfn.dl.sourceforge.net/project/scummvm/scummvm/1.1.1/scummvm-1.1.1-win32.exe
CDPath = none
[Section.0407]

View file

@ -2,6 +2,7 @@
#include "lang/de-DE.rc"
#include "lang/en-US.rc"
#include "lang/es-ES.rc"
#include "lang/it-IT.rc"
#include "lang/ja-JP.rc"
#include "lang/no-NO.rc"
#include "lang/pl-PL.rc"

View file

@ -399,13 +399,13 @@ static MUI_ENTRY itITDevicePageEntries[] =
{
6,
19,
"Pu• scegliere la configurazione con i tasti SU e GIë",
"Pu• scegliere un elemento della configurazione con i tasti SU e GIë",
TEXT_STYLE_NORMAL
},
{
6,
20,
"Premere INVIO per modificare la configurazione alternativa.",
"e modificarlo premendo INVIO per selezionare un valore alternativo.",
TEXT_STYLE_NORMAL
},
{

View file

@ -11,6 +11,7 @@
/* INCLUDES *****************************************************************/
#include "winlogon.h"
#include <shlobj.h>
#include <wine/debug.h>
@ -18,18 +19,107 @@ WINE_DEFAULT_DEBUG_CHANNEL(winlogon);
/* GLOBALS ******************************************************************/
typedef HRESULT (WINAPI *PFSHGETFOLDERPATHW)(HWND, int, HANDLE, DWORD, LPWSTR);
/* FUNCTIONS ****************************************************************/
BOOL
CreateUserEnvironment(IN PWLSESSION Session,
IN LPVOID *lpEnvironment,
IN LPWSTR *lpFullEnv)
static VOID
BuildVolatileEnvironment(IN PWLSESSION Session,
IN HKEY hKey)
{
HINSTANCE hShell32 = NULL;
PFSHGETFOLDERPATHW pfSHGetFolderPathW = NULL;
WCHAR szPath[MAX_PATH + 1];
WCHAR szExpandedPath[MAX_PATH + 1];
LPCWSTR wstr;
SIZE_T EnvBlockSize = 0, ProfileSize = 0;
LPVOID lpEnviron = NULL;
LPWSTR lpFullEnviron = NULL;
SIZE_T size;
WCHAR szEnvKey[MAX_PATH];
WCHAR szEnvValue[1024];
SIZE_T length;
LPWSTR eqptr, endptr;
/* Parse the environment variables and add them to the volatile environment key */
if (Session->Profile->dwType == WLX_PROFILE_TYPE_V2_0 &&
Session->Profile->pszEnvironment != NULL)
{
wstr = Session->Profile->pszEnvironment;
while (*wstr != UNICODE_NULL)
{
size = wcslen(wstr) + 1;
eqptr = wcschr(wstr, L'=');
if (eqptr != NULL)
{
endptr = eqptr;
endptr--;
while (iswspace(*endptr))
endptr--;
length = (SIZE_T)(endptr - wstr + 1);
wcsncpy(szEnvKey, wstr, length);
szEnvKey[length] = 0;
eqptr++;
while (iswspace(*eqptr))
eqptr++;
wcscpy(szEnvValue, eqptr);
RegSetValueExW(hKey,
szEnvKey,
0,
REG_SZ,
(LPBYTE)szEnvValue,
(wcslen(szEnvValue) + 1) * sizeof(WCHAR));
}
wstr += size;
}
}
/* Load shell32.dll and call SHGetFolderPathW to get the users appdata folder path */
hShell32 = LoadLibraryW(L"shell32.dll");
if (hShell32 != NULL)
{
pfSHGetFolderPathW = (PFSHGETFOLDERPATHW)GetProcAddress(hShell32,
"SHGetFolderPathW");
if (pfSHGetFolderPathW != NULL)
{
if (pfSHGetFolderPathW(NULL,
CSIDL_APPDATA | CSIDL_FLAG_DONT_VERIFY,
Session->UserToken,
0,
szPath) == S_OK)
{
/* FIXME: Expand %USERPROFILE% here. SHGetFolderPathW should do it for us. See Bug #5372.*/
TRACE("APPDATA path: %S\n", szPath);
ExpandEnvironmentStringsForUserW(Session->UserToken,
szPath,
szExpandedPath,
MAX_PATH);
/* Add the appdata folder path to the users volatile environment key */
TRACE("APPDATA expanded path: %S\n", szExpandedPath);
RegSetValueExW(hKey,
L"APPDATA",
0,
REG_SZ,
(LPBYTE)szExpandedPath,
(wcslen(szExpandedPath) + 1) * sizeof(WCHAR));
}
}
FreeLibrary(hShell32);
}
}
BOOL
CreateUserEnvironment(IN PWLSESSION Session)
{
HKEY hKey;
DWORD dwDisp;
LONG lError;
@ -37,56 +127,6 @@ CreateUserEnvironment(IN PWLSESSION Session,
TRACE("WL: CreateUserEnvironment called\n");
/* Create environment block for the user */
if (!CreateEnvironmentBlock(&lpEnviron,
Session->UserToken,
TRUE))
{
WARN("WL: CreateEnvironmentBlock() failed\n");
return FALSE;
}
if (Session->Profile->dwType == WLX_PROFILE_TYPE_V2_0 && Session->Profile->pszEnvironment)
{
/* Count required size for full environment */
wstr = (LPCWSTR)lpEnviron;
while (*wstr != UNICODE_NULL)
{
SIZE_T size = wcslen(wstr) + 1;
wstr += size;
EnvBlockSize += size;
}
wstr = Session->Profile->pszEnvironment;
while (*wstr != UNICODE_NULL)
{
SIZE_T size = wcslen(wstr) + 1;
wstr += size;
ProfileSize += size;
}
/* Allocate enough memory */
lpFullEnviron = HeapAlloc(GetProcessHeap, 0, (EnvBlockSize + ProfileSize + 1) * sizeof(WCHAR));
if (!lpFullEnviron)
{
TRACE("HeapAlloc() failed\n");
return FALSE;
}
/* Fill user environment block */
CopyMemory(lpFullEnviron,
lpEnviron,
EnvBlockSize * sizeof(WCHAR));
CopyMemory(&lpFullEnviron[EnvBlockSize],
Session->Profile->pszEnvironment,
ProfileSize * sizeof(WCHAR));
lpFullEnviron[EnvBlockSize + ProfileSize] = UNICODE_NULL;
}
else
{
lpFullEnviron = (LPWSTR)lpEnviron;
}
/* Impersonate the new user */
ImpersonateLoggedOnUser(Session->UserToken);
@ -107,6 +147,9 @@ CreateUserEnvironment(IN PWLSESSION Session,
&dwDisp);
if (lError == ERROR_SUCCESS)
{
BuildVolatileEnvironment(Session,
hKey);
RegCloseKey(hKey);
}
else
@ -120,9 +163,6 @@ CreateUserEnvironment(IN PWLSESSION Session,
/* Revert the impersonation */
RevertToSelf();
*lpEnvironment = lpEnviron;
*lpFullEnv = lpFullEnviron;
TRACE("WL: CreateUserEnvironment done\n");
return TRUE;

View file

@ -170,7 +170,6 @@ HandleLogon(
{
PROFILEINFOW ProfileInfo;
LPVOID lpEnvironment = NULL;
LPWSTR lpFullEnv = NULL;
BOOLEAN Old;
BOOL ret = FALSE;
@ -208,12 +207,19 @@ HandleLogon(
}
/* Create environment block for the user */
if (!CreateUserEnvironment(Session, &lpEnvironment, &lpFullEnv))
if (!CreateUserEnvironment(Session))
{
WARN("WL: SetUserEnvironment() failed\n");
goto cleanup;
}
/* Create environment block for the user */
if (!CreateEnvironmentBlock(&lpEnvironment, Session->UserToken, TRUE))
{
WARN("WL: CreateEnvironmentBlock() failed\n");
goto cleanup;
}
DisplayStatusMessage(Session, Session->WinlogonDesktop, IDS_APPLYINGYOURPERSONALSETTINGS);
UpdatePerUserSystemParameters(0, TRUE);
@ -233,7 +239,7 @@ HandleLogon(
Session->Gina.Context,
L"Default",
NULL, /* FIXME */
lpFullEnv))
lpEnvironment))
{
//WCHAR StatusMsg[256];
WARN("WL: WlxActivateUserShell() failed\n");
@ -260,8 +266,6 @@ cleanup:
{
UnloadUserProfile(WLSession->UserToken, ProfileInfo.hProfile);
}
if (lpFullEnv != lpEnvironment)
HeapFree(GetProcessHeap(), 0, lpFullEnv);
if (lpEnvironment)
DestroyEnvironmentBlock(lpEnvironment);
RemoveStatusMessage(Session);

View file

@ -182,9 +182,7 @@ UpdatePerUserSystemParameters(DWORD dwUnknown,
/* environment.c */
BOOL
CreateUserEnvironment(IN PWLSESSION Session,
IN LPVOID *lpEnvironment,
IN LPWSTR *lpFullEnv);
CreateUserEnvironment(IN PWLSESSION Session);
/* sas.c */
BOOL

View file

@ -817,3 +817,7 @@ modules\rostests\winetests\xmllite\xmllite_winetest.exe 7 o
modules\wallpaper\Angelus_02_ROSWP.bmp 4 optional
modules\drivers\video\cirrus\cirrus.inf 6 optional
modules\drivers\video\cirrus\cirrus.dll 1 optional
modules\drivers\video\cirrus\cirrus.sys 2 optional

View file

@ -161,6 +161,7 @@ static LONG IsoLookupFile(PCSTR FileName, ULONG DeviceId, PISO_FILE_INFO IsoFile
DPRINTM(DPRINT_FILESYSTEM, "IsoLookupFile() FileName = %s\n", FileName);
RtlZeroMemory(IsoFileInfoPointer, sizeof(ISO_FILE_INFO));
RtlZeroMemory(&IsoFileInfo, sizeof(ISO_FILE_INFO));
//
// Read The Primary Volume Descriptor

View file

@ -5,13 +5,15 @@
<library>freeldr_startup</library>
<library>freeldr_base64k</library>
<library>freeldr_base</library>
<if property="ARCH" value="i386">
<library>mini_hal</library>
</if>
<library>freeldr_arch</library>
<library>setupldr_main</library>
<library>rossym</library>
<library>cmlib</library>
<library>rtl</library>
<library>libcntpr</library>
<library>mini_hal</library>
<group linkerset="ld">
<linkerflag>-nostartfiles</linkerflag>
<linkerflag>-nostdlib</linkerflag>

View file

@ -1,6 +1,6 @@
/* FILE: dll/cpl/appwiz/lang/cs-CZ.rc
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
* UPDATED: 2008-07-27
* UPDATED: 2010-03-14
*/
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
@ -48,7 +48,7 @@ END
STRINGTABLE
BEGIN
IDS_CPLSYSTEMNAME "Pøidat/Odebrat programy"
IDS_CPLSYSTEMNAME "Pøidat a odebrat programy"
IDS_CPLSYSTEMDESCRIPTION "Nastavuje programy a vytváøí zástupce."
IDS_CREATE_SHORTCUT "Vytvoøit zástupce"
IDS_ERROR_NOT_FOUND "Soubor %s nebyl nalezen."

View file

@ -231,6 +231,7 @@ ColorsProc(
InvalidateRect(GetDlgItem(hwndDlg, IDC_STATIC_SCREEN_COLOR), NULL, TRUE);
InvalidateRect(GetDlgItem(hwndDlg, IDC_STATIC_POPUP_COLOR), NULL, TRUE);
pConInfo->ActiveStaticControl = index;
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
}

View file

@ -294,6 +294,52 @@ LayoutProc(
{
switch(LOWORD(wParam))
{
case IDC_EDIT_SCREEN_BUFFER_WIDTH:
case IDC_EDIT_SCREEN_BUFFER_HEIGHT:
case IDC_EDIT_WINDOW_SIZE_WIDTH:
case IDC_UPDOWN_WINDOW_SIZE_HEIGHT:
case IDC_EDIT_WINDOW_POS_LEFT:
case IDC_EDIT_WINDOW_POS_TOP:
{
if (HIWORD(wParam) == EN_KILLFOCUS)
{
DWORD wheight, wwidth;
DWORD sheight, swidth;
DWORD left, top;
wwidth = GetDlgItemInt(hwndDlg, IDC_EDIT_WINDOW_SIZE_WIDTH, NULL, FALSE);
wheight = GetDlgItemInt(hwndDlg, IDC_EDIT_WINDOW_SIZE_HEIGHT, NULL, FALSE);
swidth = GetDlgItemInt(hwndDlg, IDC_EDIT_SCREEN_BUFFER_WIDTH, NULL, FALSE);
sheight = GetDlgItemInt(hwndDlg, IDC_EDIT_SCREEN_BUFFER_HEIGHT, NULL, FALSE);
left = GetDlgItemInt(hwndDlg, IDC_EDIT_WINDOW_POS_LEFT, NULL, FALSE);
top = GetDlgItemInt(hwndDlg, IDC_EDIT_WINDOW_POS_TOP, NULL, FALSE);
swidth = max(swidth, 1);
sheight = max(sheight, 1);
/* automatically adjust window size when screen buffer decreases */
if (wwidth > swidth)
{
SetDlgItemInt(hwndDlg, IDC_EDIT_WINDOW_SIZE_WIDTH, swidth, TRUE);
wwidth = swidth;
}
if (wheight > sheight)
{
SetDlgItemInt(hwndDlg, IDC_EDIT_WINDOW_SIZE_HEIGHT, sheight, TRUE);
wheight = sheight;
}
pConInfo->ScreenBuffer = MAKELONG(swidth, sheight);
pConInfo->WindowSize = MAKELONG(wwidth, wheight);
pConInfo->WindowPosition = MAKELONG(left, top);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
break;
}
case IDC_CHECK_SYSTEM_POS_WINDOW:
{
LONG res = SendMessage((HWND)lParam, BM_GETCHECK, 0, 0);

View file

@ -5,6 +5,7 @@
* PURPOSE: input.dll
* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
* Colin Finck
* Gregor Schneider
* UPDATE HISTORY:
* 06-09-2007 Created
*/
@ -376,6 +377,59 @@ UpdateLayoutsList(VOID)
(VOID) ListView_SetImageList(GetDlgItem(MainDlgWnd, IDC_KEYLAYOUT_LIST), hImgList, LVSIL_SMALL);
}
typedef struct _REG_KB_ENTRY_
{
TCHAR szLayoutID[3];
DWORD dwType;
TCHAR szData[CCH_LAYOUT_ID + 1];
DWORD dwDataSize;
} REG_KB_ENTRY;
/* Layouts were deleted so we have to order the existing ones */
static VOID
UpdateRegValueNames(HKEY hKey)
{
DWORD dwIndex = 0, dwGot = 0, dwLayoutSize;
DWORD dwSets = 5;
REG_KB_ENTRY* data = HeapAlloc(GetProcessHeap(), 0, dwSets * sizeof(REG_KB_ENTRY));
/* Get all existing entries and delete them */
dwLayoutSize = sizeof(data[0].szLayoutID);
while (RegEnumValue(hKey,
dwIndex,
data[dwGot].szLayoutID,
&dwLayoutSize,
NULL,
&data[dwGot].dwType,
(PBYTE)data[dwGot].szData,
&data[dwGot].dwDataSize) != ERROR_NO_MORE_ITEMS)
{
if (_tcslen(data[dwGot].szLayoutID) <= 2 && _tcslen(data[dwGot].szData) == CCH_LAYOUT_ID)
{
RegDeleteValue(hKey, data[dwGot].szLayoutID);
dwGot++;
if (dwGot == dwSets)
{
dwSets += 5;
data = HeapReAlloc(GetProcessHeap(), 0, data, dwSets * sizeof(REG_KB_ENTRY));
}
}
dwIndex++;
dwLayoutSize = sizeof(data[0].szLayoutID);
}
/* Set all entries with an updated value name */
for (dwIndex = 0; dwIndex < dwGot; dwIndex++)
{
TCHAR szNewLayoutID[3];
_stprintf(szNewLayoutID, TEXT("%u"), dwIndex + 1);
RegSetValueEx(hKey, szNewLayoutID, 0, data[dwIndex].dwType,
(PBYTE)data[dwIndex].szData, data[dwIndex].dwDataSize);
}
HeapFree(GetProcessHeap(), 0, data);
}
static VOID
DeleteLayout(VOID)
{
@ -430,6 +484,7 @@ DeleteLayout(VOID)
if (RegDeleteValue(hKey, szLayoutNum) == ERROR_SUCCESS)
{
UpdateLayoutsList();
UpdateRegValueNames(hKey);
}
}
RegCloseKey(hKey);

View file

@ -1,6 +1,6 @@
/* FILE: dll/cpl/sysdm/lang/cs-CZ.rc
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
* UPDATED: 2009-01-25
* UPDATED: 2010-03-04
*/
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
@ -48,17 +48,6 @@ BEGIN
PUSHBUTTON "Hard&warové profily...", IDC_HARDWARE_PROFILE, 154, 190, 90, 15
END
IDD_SYSSETTINGS DIALOGEX 0, 0, 221, 106
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "System Settings"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "Version Info",IDC_STATIC,6,3,210,73
CONTROL "Report as Workstation",IDC_REPORTASWORKSTATION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,57,88,10
LTEXT "ReactOS is built as a server OS and reports as such. Check this box to change this for applications only.",IDC_STATIC,15,15,183,41
PUSHBUTTON "OK",IDOK,166,83,50,14
END
IDD_PROPPAGEADVANCED DIALOGEX 0, 0, 256, 218
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
@ -78,10 +67,22 @@ BEGIN
LTEXT "Možnosti spuštìní a zotavení øíkají poèítaèi, jak se spustit a co dìlat, jestliže jej chyba donutí zastavit.", IDC_STATIC, 16, 144, 228, 19
PUSHBUTTON "Nastavení", IDC_STAREC, 194, 162, 50, 15
PUSHBUTTON "Nastavení systému", IDC_SYSSETTINGS, 2, 192, 80, 15
PUSHBUTTON "Promìnné prostøedí", IDC_ENVVAR, 84, 192, 80, 15
PUSHBUTTON "Hlášení chyb", IDC_ERRORREPORT, 170, 192, 80, 15
END
IDD_SYSSETTINGS DIALOGEX 0, 0, 221, 106
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "Nastavení systému"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "Informace o verzi",IDC_STATIC,6,3,210,73
CONTROL "Hlásit se jako pracovní stanice",IDC_REPORTASWORKSTATION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,57,88,10
LTEXT "ReactOS je vytvořen jako serverový OS a jako takový se i hlásí. Po zaškrtnutí tohoto políčka se pro aplikace toto chování změní.",IDC_STATIC,15,15,183,41
PUSHBUTTON "OK",IDOK,166,83,50,14
END
IDD_HARDWAREPROFILES DIALOGEX 6, 18, 254, 234
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

View file

@ -43,16 +43,6 @@ BEGIN
PUSHBUTTON "&Profili Hardware...", IDC_HARDWARE_PROFILE, 154, 190, 90, 14
END
IDD_SYSSETTINGS DIALOGEX 0, 0, 221, 106
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "System Settings"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "Version Info",IDC_STATIC,6,3,210,73
CONTROL "Report as Workstation",IDC_REPORTASWORKSTATION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,57,88,10
LTEXT "ReactOS is built as a server OS and reports as such. Check this box to change this for applications only.",IDC_STATIC,15,15,183,41
PUSHBUTTON "OK",IDOK,166,83,50,14
END
IDD_PROPPAGEADVANCED DIALOGEX 0, 0, 256, 218
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
@ -72,10 +62,22 @@ BEGIN
LTEXT "Le opzioni di Avvio e recupero informano il computer su come partire e cosa fare nel caso che un errore fermi il computer.", IDC_STATIC, 16, 144, 210, 19
PUSHBUTTON "Impostazioni", IDC_STAREC, 194, 162, 50, 14
PUSHBUTTON "Impostazioni di sistema", IDC_SYSSETTINGS, 2, 192, 80, 15
PUSHBUTTON "Variabili di ambiente", IDC_ENVVAR, 84, 192, 80, 14
PUSHBUTTON "Registrazione errori", IDC_ERRORREPORT, 170, 192, 80, 14
END
IDD_SYSSETTINGS DIALOGEX 0, 0, 221, 106
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "System Settings"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "Informazioni sulla versione",IDC_STATIC,6,3,210,73
CONTROL "Notifica come Workstation",IDC_REPORTASWORKSTATION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,57,88,10
LTEXT "ReactOS è compilato come server ed è notificato come tale. Non per questa applicazione.",IDC_STATIC,15,15,183,41
PUSHBUTTON "OK",IDOK,166,83,50,14
END
IDD_HARDWAREPROFILES DIALOGEX 6, 18, 254, 234
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
@ -159,7 +161,7 @@ BEGIN
EDITTEXT IDC_STRRECRECEDIT, 179, 68, 30, 12, ES_NUMBER
CONTROL "", IDC_STRRECRECUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13
LTEXT "secondi", IDC_STATIC, 215, 70, 25, 8
LTEXT "Per modificare le opzioni di avvio manualmenta , clicca Modifica.", IDC_STATIC, 14, 89, 187, 8
LTEXT "Per modificare le opzioni di avvio manualmente, clicca Modifica.", IDC_STATIC, 14, 89, 187, 8
PUSHBUTTON "&Modifica", IDC_STRRECEDIT, 188, 87, 50, 14
GROUPBOX "Blocco del sistema", IDC_STATIC, 7, 111, 238, 140
@ -282,4 +284,5 @@ BEGIN
IDS_USERPROFILE_TYPE "Tipo"
IDS_USERPROFILE_STATUS "Stato"
IDS_USERPROFILE_MODIFIED "Modificato"
IDS_DEVS "\nReactOS Team\n\nCoordinatore\n\nAleksey Bragin\n\nGruppo di sviluppo\n\nAleksey Bragin\nAndrew Greenwood\nAndrey Korotaev\nArt Yerkes\nChristoph von Wittich\nColin Finck\nDaniel Reimer\nDmitry Chapyshev\nEric Kohl\nGed Murphy\nGregor Brunmar\nHervé Poussineau\nJames Tabor\nJeffrey Morlan\nJohannes Anderwald\nKJK::Hyperion\nMaarten Bosma\nMagnus Olsen\nMarc Piulachs\nMatthias Kupfer\nMike Nordell\nPeter Ward\nPierre Schweitzer\nSaveliy Tretiakov\nStefan Ginsberg\nSylvain Petreolle\nThomas Blümel\nTimo Kreuzer \n\nAlex Ionescu\nFilip Navara\nGunnar Dalsnes\nMartin Fuchs\nRoyce Mitchell III\nBrandon Turner\nBrian Palmer\nCasper Hornstrup\nDavid Welch\nEmanuele Aliberti\nGé van Geldorp\nGregor Anich\nJason Filby\nJens Collin\nMichael Wirth\nNathan Woods\nRobert Dickenson\nRex Jolliff\nVizzini \n\nRelease Engineers\n\nColin Finck\nZ98\n\nWebsite Team\n\nColin Finck\nJaix Bly\nKlemens Friedl\nZ98\n\nMedia Team\n\nMindflyer\nWierd_W\n\nUlteriori ringraziamenti\n\na tutti i Contributers\nWine Team\n\n"
END

View file

@ -234,10 +234,10 @@ GroupNew(HWND hwndDlg)
}
if (group.lgrpi1_name)
HeapFree(GetProcessHeap, 0, group.lgrpi1_name);
HeapFree(GetProcessHeap(), 0, group.lgrpi1_name);
if (group.lgrpi1_comment)
HeapFree(GetProcessHeap, 0, group.lgrpi1_comment);
HeapFree(GetProcessHeap(), 0, group.lgrpi1_comment);
}

View file

@ -294,16 +294,16 @@ UserNew(HWND hwndDlg)
}
if (user.usri3_name)
HeapFree(GetProcessHeap, 0, user.usri3_name);
HeapFree(GetProcessHeap(), 0, user.usri3_name);
if (user.usri3_full_name)
HeapFree(GetProcessHeap, 0, user.usri3_full_name);
HeapFree(GetProcessHeap(), 0, user.usri3_full_name);
if (user.usri3_comment)
HeapFree(GetProcessHeap, 0, user.usri3_comment);
HeapFree(GetProcessHeap(), 0, user.usri3_comment);
if (user.usri3_password)
HeapFree(GetProcessHeap, 0, user.usri3_password);
HeapFree(GetProcessHeap(), 0, user.usri3_password);
}

View file

@ -4841,15 +4841,7 @@ RegSetValueExW(HKEY hKey,
return RtlNtStatusToDosError(Status);
}
if (lpValueName != NULL)
{
RtlInitUnicodeString(&ValueName,
lpValueName);
}
else
{
RtlInitUnicodeString(&ValueName, L"");
}
RtlInitUnicodeString(&ValueName, lpValueName);
pValueName = &ValueName;
if (is_string(dwType) && (cbData != 0))

View file

@ -166,6 +166,10 @@ SetPixelFormat(HDC hdc,
INT iPixelFormat,
CONST PIXELFORMATDESCRIPTOR * ppfd)
{
/* Can only be set once */
INT current = GetPixelFormat(hdc);
if(current) return current == iPixelFormat ;
if (glSetPixelFormat == NULL)
if (OpenGLEnable() == FALSE)
return(0);

View file

@ -2301,17 +2301,196 @@ PIP_ADAPTER_ORDER_MAP WINAPI GetAdapterOrderMap(VOID)
}
/*
* @unimplemented
* @implemented
*/
DWORD WINAPI GetAdaptersAddresses(ULONG Family,ULONG Flags,PVOID Reserved,PIP_ADAPTER_ADDRESSES pAdapterAddresses,PULONG pOutBufLen)
{
InterfaceIndexTable *indexTable;
IFInfo ifInfo;
int i;
ULONG ret, requiredSize = 0;
PIP_ADAPTER_ADDRESSES currentAddress;
PUCHAR currentLocation;
HANDLE tcpFile;
if (!pOutBufLen) return ERROR_INVALID_PARAMETER;
if (!pAdapterAddresses || *pOutBufLen == 0)
return ERROR_BUFFER_OVERFLOW;
if (Reserved) return ERROR_INVALID_PARAMETER;
FIXME(":stub\n");
return ERROR_NO_DATA;
indexTable = getNonLoopbackInterfaceIndexTable(); //I think we want non-loopback here
if (!indexTable)
return ERROR_NOT_ENOUGH_MEMORY;
ret = openTcpFile(&tcpFile);
if (!NT_SUCCESS(ret))
return ERROR_NO_DATA;
for (i = indexTable->numIndexes; i >= 0; i--)
{
if (NT_SUCCESS(getIPAddrEntryForIf(tcpFile,
NULL,
indexTable->indexes[i],
&ifInfo)))
{
/* The whole struct */
requiredSize += sizeof(IP_ADAPTER_ADDRESSES);
/* Friendly name */
if (!(Flags & GAA_FLAG_SKIP_FRIENDLY_NAME))
requiredSize += strlen((char *)ifInfo.if_info.ent.if_descr) + 1; //FIXME
/* Adapter name */
requiredSize += strlen((char *)ifInfo.if_info.ent.if_descr) + 1;
/* Unicast address */
if (!(Flags & GAA_FLAG_SKIP_UNICAST))
requiredSize += sizeof(IP_ADAPTER_UNICAST_ADDRESS);
/* FIXME: Implement multicast, anycast, and dns server stuff */
/* FIXME: Implement dns suffix and description */
requiredSize += 2 * sizeof(WCHAR);
/* We're only going to implement what's required for XP SP0 */
}
}
if (*pOutBufLen < requiredSize)
{
*pOutBufLen = requiredSize;
closeTcpFile(tcpFile);
free(indexTable);
return ERROR_BUFFER_OVERFLOW;
}
RtlZeroMemory(pAdapterAddresses, requiredSize);
/* Let's set up the pointers */
currentAddress = pAdapterAddresses;
for (i = indexTable->numIndexes; i >= 0; i--)
{
if (NT_SUCCESS(getIPAddrEntryForIf(tcpFile,
NULL,
indexTable->indexes[i],
&ifInfo)))
{
currentLocation = (PUCHAR)currentAddress + (ULONG_PTR)sizeof(IP_ADAPTER_ADDRESSES);
/* FIXME: Friendly name */
if (!(Flags & GAA_FLAG_SKIP_FRIENDLY_NAME))
{
currentAddress->FriendlyName = (PVOID)currentLocation;
currentLocation += sizeof(WCHAR);
}
/* Adapter name */
currentAddress->AdapterName = (PVOID)currentLocation;
currentLocation += strlen((char *)ifInfo.if_info.ent.if_descr) + 1;
/* Unicast address */
if (!(Flags & GAA_FLAG_SKIP_UNICAST))
{
currentAddress->FirstUnicastAddress = (PVOID)currentLocation;
currentLocation += sizeof(IP_ADAPTER_UNICAST_ADDRESS);
currentAddress->FirstUnicastAddress->Address.lpSockaddr = (PVOID)currentLocation;
currentLocation += sizeof(struct sockaddr);
}
/* FIXME: Implement multicast, anycast, and dns server stuff */
/* FIXME: Implement dns suffix and description */
currentAddress->DnsSuffix = (PVOID)currentLocation;
currentLocation += sizeof(WCHAR);
currentAddress->Description = (PVOID)currentLocation;
currentLocation += sizeof(WCHAR);
currentAddress->Next = (PVOID)currentLocation;
/* We're only going to implement what's required for XP SP0 */
currentAddress = currentAddress->Next;
}
}
/* Terminate the last address correctly */
if (currentAddress)
currentAddress->Next = NULL;
/* Now again, for real this time */
currentAddress = pAdapterAddresses;
for (i = indexTable->numIndexes; i >= 0; i--)
{
if (NT_SUCCESS(getIPAddrEntryForIf(tcpFile,
NULL,
indexTable->indexes[i],
&ifInfo)))
{
/* Make sure we're not looping more than we hoped for */
ASSERT(currentAddress);
/* Alignment information */
currentAddress->Length = sizeof(IP_ADAPTER_ADDRESSES);
currentAddress->IfIndex = indexTable->indexes[i];
/* Adapter name */
strcpy(currentAddress->AdapterName, (char *)ifInfo.if_info.ent.if_descr);
if (!(Flags & GAA_FLAG_SKIP_UNICAST))
{
currentAddress->FirstUnicastAddress->Length = sizeof(IP_ADAPTER_UNICAST_ADDRESS);
currentAddress->FirstUnicastAddress->Flags = 0; //FIXME
currentAddress->FirstUnicastAddress->Next = NULL; //FIXME: Support more than one address per adapter
currentAddress->FirstUnicastAddress->Address.lpSockaddr->sa_family = AF_INET;
memcpy(currentAddress->FirstUnicastAddress->Address.lpSockaddr->sa_data,
&ifInfo.ip_addr.iae_addr,
sizeof(ifInfo.ip_addr.iae_addr));
currentAddress->FirstUnicastAddress->Address.iSockaddrLength = sizeof(ifInfo.ip_addr.iae_addr) + sizeof(USHORT);
currentAddress->FirstUnicastAddress->PrefixOrigin = IpPrefixOriginOther; //FIXME
currentAddress->FirstUnicastAddress->SuffixOrigin = IpPrefixOriginOther; //FIXME
currentAddress->FirstUnicastAddress->DadState = IpDadStatePreferred; //FIXME
currentAddress->FirstUnicastAddress->ValidLifetime = 0xFFFFFFFF; //FIXME
currentAddress->FirstUnicastAddress->PreferredLifetime = 0xFFFFFFFF; //FIXME
currentAddress->FirstUnicastAddress->LeaseLifetime = 0xFFFFFFFF; //FIXME
}
/* FIXME: Implement multicast, anycast, and dns server stuff */
currentAddress->FirstAnycastAddress = NULL;
currentAddress->FirstMulticastAddress = NULL;
currentAddress->FirstDnsServerAddress = NULL;
/* FIXME: Implement dns suffix, description, and friendly name */
currentAddress->DnsSuffix[0] = UNICODE_NULL;
currentAddress->Description[0] = UNICODE_NULL;
currentAddress->FriendlyName[0] = UNICODE_NULL;
/* Physical Address */
memcpy(currentAddress->PhysicalAddress, ifInfo.if_info.ent.if_physaddr, ifInfo.if_info.ent.if_physaddrlen);
currentAddress->PhysicalAddressLength = ifInfo.if_info.ent.if_physaddrlen;
/* Flags */
currentAddress->Flags = 0; //FIXME
/* MTU */
currentAddress->Mtu = ifInfo.if_info.ent.if_mtu;
/* Interface type */
currentAddress->IfType = ifInfo.if_info.ent.if_type;
/* Operational status */
currentAddress->OperStatus = ifInfo.if_info.ent.if_operstatus;
/* We're only going to implement what's required for XP SP0 */
/* Move to the next address */
currentAddress = currentAddress->Next;
}
}
closeTcpFile(tcpFile);
free(indexTable);
return NO_ERROR;
}
/*

View file

@ -60,6 +60,15 @@
#define TCP_REQUEST_QUERY_INFORMATION_INIT { { { 0 } } }
#define TCP_REQUEST_SET_INFORMATION_INIT { { 0 } }
/* FIXME: ROS headers suck */
#ifndef GAA_FLAG_SKIP_UNICAST
#define GAA_FLAG_SKIP_UNICAST 0x0001
#endif
#ifndef GAA_FLAG_SKIP_FRIENDLY_NAME
#define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020
#endif
// As in the mib from RFC 1213
typedef struct _IPRouteEntry {
@ -138,6 +147,10 @@ typedef VOID (*EnumNameServersFunc)( PWCHAR Interface,
PWCHAR NameServer,
PVOID Data );
void EnumNameServers( HANDLE RegHandle, PWCHAR Interface, PVOID Data, EnumNameServersFunc cb );
NTSTATUS getIPAddrEntryForIf(HANDLE tcpFile,
char *name,
DWORD index,
IFInfo *ifInfo);
#include <w32api.h>
/* This is here until we switch to version 2.5 of the mingw headers */

File diff suppressed because it is too large Load diff

View file

@ -101,7 +101,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_INVALID_BLOCK
Language=German
ERROR_INVALID_BLOCK - Die Speicherkontrolladdresse ist ungültig.
ERROR_INVALID_BLOCK - Die Speicherkontrolladresse ist ungültig.
.
MessageId=10
@ -885,7 +885,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_SUBST_TO_SUBST
Language=German
ERROR_SUBST_TO_SUBST -Das System versuchte ein Verzeichnis zu einem Laufwerk auf einen gesubsteten Laufwerk zu substen.
ERROR_SUBST_TO_SUBST - Das System versuchte ein Verzeichnis zu einem Laufwerk auf einen gesubsteten Laufwerk zu substen.
.
MessageId=140
@ -965,7 +965,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_IS_SUBST_TARGET
Language=German
ERROR_IS_SUBST_TARGET - Es wurde versucht, von einem Laufwerk zu substen oder zu joinen das schon gesubst ist.
ERROR_IS_SUBST_TARGET - Es wurde versucht, von einem Laufwerk zu substen oder zu joinen, das schon gesubst ist.
.
MessageId=150
@ -1093,7 +1093,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_BUSY
Language=German
ERROR_BUSY - Die angeforderte Ressource wird beutzt.
ERROR_BUSY - Die angeforderte Ressource wird benutzt.
.
MessageId=173
@ -1109,7 +1109,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_ATOMIC_LOCKS_NOT_SUPPORTED
Language=German
ERROR_ATOMIC_LOCKS_NOT_SUPPORTED - Das Dateisysten unterstützt keine ununterbrechbaren Sperrungen.
ERROR_ATOMIC_LOCKS_NOT_SUPPORTED - Das Dateisysten unterstützt keine nicht unterbrechbaren Sperren.
.
MessageId=180
@ -1229,7 +1229,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_IOPL_NOT_ENABLED
Language=German
ERROR_IOPL_NOT_ENABLED - Das Betriebssystem ist zur Zeit nicht konfiguiert, um dieses Programm auszuführen.
ERROR_IOPL_NOT_ENABLED - Das Betriebssystem ist zur Zeit nicht konfiguriert, um dieses Programm auszuführen.
.
MessageId=198
@ -1277,7 +1277,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_ENVVAR_NOT_FOUND
Language=German
ERROR_ENVVAR_NOT_FOUND - Das System konnte die Umgebungs-Option, die eingegeben wurde, nicht finden.
ERROR_ENVVAR_NOT_FOUND - Das System konnte die Umgebungsvariable, die eingegeben wurde, nicht finden.
.
MessageId=205
@ -1309,7 +1309,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_META_EXPANSION_TOO_LONG
Language=German
ERROR_META_EXPANSION_TOO_LONG - Es wurden zu viele Platzhalter, wie ? oder *, eingegeben.
ERROR_META_EXPANSION_TOO_LONG - Es wurden zu viele Platzhalter wie ? oder * eingegeben.
.
MessageId=209
@ -1341,7 +1341,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_TOO_MANY_MODULES
Language=German
ERROR_TOO_MANY_MODULES - Es werden zu viele DLLs von diesem Programm oder DLL benutzt.
ERROR_TOO_MANY_MODULES - Es werden zu viele DLLs von diesem Programm oder dieser DLL benutzt.
.
MessageId=215
@ -1653,7 +1653,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_TIMER_NOT_CANCELED
Language=German
ERROR_TIMER_NOT_CANCELED - Es wurde der Versuch gemacht, einen Timer zu setzen oder zu löschen, der nicht dem Aufrufer gehört.
ERROR_TIMER_NOT_CANCELED - Es wurde der Versuch unternommen, einen Timer zu setzen oder zu löschen, der nicht dem Aufrufer gehört.
.
MessageId=542
@ -1717,7 +1717,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_INSTRUCTION_MISALIGNMENT
Language=German
ERROR_INSTRUCTION_MISALIGNMENT - Es wurde versucht, einen Befehl an einer nicht angeschlossenen Adresse auzuführen, was dieses System nicht unterstützt.
ERROR_INSTRUCTION_MISALIGNMENT - Es wurde versucht, einen Befehl an einer nicht angeschlossenen Adresse auszuführen, was dieses System nicht unterstützt.
.
MessageId=550
@ -1861,7 +1861,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_LOGON_SERVER_CONFLICT
Language=German
ERROR_LOGON_SERVER_CONFLICT - Der Netlogon-Dienst kann nicht starten weil ein anderer Netlogon-Dienst mit der gleichen Rolle lauft und ein Domänen-Konflikt auftritt.
ERROR_LOGON_SERVER_CONFLICT - Der Netlogon-Dienst kann nicht starten, weil ein anderer Netlogon-Dienst mit der gleichen Rolle läuft und ein Domänen-Konflikt auftritt.
.
MessageId=569
@ -1965,7 +1965,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_ILLEGAL_CHARACTER
Language=German
ERROR_ILLEGAL_CHARACTER - Es wurde ein illegales Zeichen gefunden. Für einen Multi-Byte-Zeichensatz schließt dies ein Führungs-Byte ohne ein fogendes Anschluss-Byte ein. Für den Unicode-Zeichensatz schließt dies die Zeichen 0xFFFF und 0xFFFE ein.
ERROR_ILLEGAL_CHARACTER - Es wurde ein ungültiges Zeichen gefunden. Für einen Multi-Byte-Zeichensatz schließt dies ein Führungs-Byte ohne ein folgendes Anschluss-Byte ein. Für den Unicode-Zeichensatz schließt dies die Zeichen 0xFFFF und 0xFFFE ein.
.
MessageId=583
@ -1989,7 +1989,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT
Language=German
ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT - Das System-BIOS konnte einen Systeminterupt nicht an das Gerät oder dessen Bus verbinden.
ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT - Das System-BIOS konnte einen Systeminterrupt nicht an das Gerät oder dessen Bus weiterleiten.
.
MessageId=586
@ -2021,7 +2021,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_CANNOT_LOAD_REGISTRY_FILE
Language=German
ERROR_CANNOT_LOAD_REGISTRY_FILE - Die Registrierungsdatenbank kann den Zweig nicht laden: %hs, sein Log oder die Alternative. Sie ist korrupt, fehlt oder ist nicht beschreibbar.
ERROR_CANNOT_LOAD_REGISTRY_FILE - Die Registrierungsdatenbank kann den Zweig nicht laden: %hs, sein Log oder die Alternative. Sie ist beschädigt, fehlt oder ist nicht beschreibbar.
.
MessageId=590
@ -2109,7 +2109,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_CONVERT_TO_LARGE
Language=German
ERROR_CONVERT_TO_LARGE - Interne OFS-Statuscodes zeigen an, dass eine Allokation behandelt wird. Either es ist retried after the containing onode ist moved oder the extent Stream ist converted to ein lang Stream.
ERROR_CONVERT_TO_LARGE - Interne OFS-Statuscodes zeigen an, dass eine Allokation behandelt wird. Entweder wird es erneut versucht, nachdem der kontaktierende Knoten verschoben wurde, oder der erweiterte Stream wird in einen langen Stream konvertiert.
.
MessageId=601
@ -2117,7 +2117,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_FOUND_OUT_OF_SCOPE
Language=German
ERROR_FOUND_OUT_OF_SCOPE - Der Versuch to find the Objekt gefunden ein Objekt matching von ID on der datenträger aber es ist out von the bereich von the Handle used für the Operation.
ERROR_FOUND_OUT_OF_SCOPE - Ein Objekt, das der ID des Datenträgers entspricht, wurde gefunden, aber es ist außerhalb des Bereichs für das Handle für diesen Vorgang.
.
MessageId=602
@ -2125,7 +2125,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_ALLOCATE_BUCKET
Language=German
ERROR_ALLOCATE_BUCKET - The bucket array must be grown. Retry transaction after doing so.
ERROR_ALLOCATE_BUCKET - Das Bucketarray muss vergrößert werden. Versuchen Sie es anschließend erneut.
.
MessageId=603
@ -2165,7 +2165,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_TIMER_RESOLUTION_NOT_SET
Language=German
ERROR_TIMER_RESOLUTION_NOT_SET - Die Auflösung des Zeitgebers wurde vorher nicht vom aktuellen Ptozess gesetzt.
ERROR_TIMER_RESOLUTION_NOT_SET - Die Auflösung des Zeitgebers wurde vorher nicht vom aktuellen Prozess gesetzt.
.
MessageId=608
@ -2173,7 +2173,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_INSUFFICIENT_LOGON_INFO
Language=German
ERROR_INSUFFICIENT_LOGON_INFO - Es gibt zu wenig Account-Informationen um sich einzuloggen.
ERROR_INSUFFICIENT_LOGON_INFO - Es gibt zu wenig Account-Informationen, um sich einzuloggen.
.
MessageId=609
@ -2181,7 +2181,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_BAD_DLL_ENTRYPOINT
Language=German
ERROR_BAD_DLL_ENTRYPOINT - Die DLL %hs wurde nicht korrekt geschrieben. Der Stack-Zeiger wurde in einem unvereinbaren Status gelassen. The entrypoint should be declared as WINAPI or STDCALL. Select YES to fail the DLL load. Select NO to continue execution. Selecting NO may cause the Programm to operate incorrectly.
ERROR_BAD_DLL_ENTRYPOINT - Die DLL %hs wurde nicht korrekt geschrieben. Der Stack-Zeiger wurde in einem unvereinbaren Status gelassen. Der Einstiegspunkt sollte als WINAPI oder STDCALL deklariert werden. Wählen Sie JA aus, um das Laden der DLL abzubrechen. Wählen sie NEIN aus, um die Ausführung fortzusetzen. Die Auswahl von NEIN könnte dazu führen, dass das Programm nicht richtig funktioniert.
.
MessageId=610
@ -2189,7 +2189,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_BAD_SERVICE_ENTRYPOINT
Language=German
ERROR_BAD_SERVICE_ENTRYPOINT - Der %hs-Dienst wurde nicht korrekt geschrieben. Der Stack-Zeiger wurde in einem unvereinbaren Status gelassen. The callback entrypoint should be declared as WINAPI oder STDCALL. Selecting OK will cause the service to continue Operation. However, the service Prozess may operate incorrectly.
ERROR_BAD_SERVICE_ENTRYPOINT - Der %hs-Dienst wurde nicht korrekt geschrieben. Der Stack-Zeiger wurde in einem unvereinbaren Status gelassen. Der Callback-Einstiegspunkt sollte als WINAPI oder STDCALL deklariert werden. Die Auswahl OK wird die Ausführung des Prozesses fortsetzen. Der Dienstprozess könnte jedoch fehlerhaft arbeiten.
.
MessageId=611
@ -2213,7 +2213,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_REGISTRY_QUOTA_LIMIT
Language=German
ERROR_REGISTRY_QUOTA_LIMIT - Der Systemteil der Registierungsdatenbank erreichte seine maximale Größe. Weitere Speicheranforderungen werden ignoriert.
ERROR_REGISTRY_QUOTA_LIMIT - Der Systemteil der Registrierungsdatenbank erreichte seine maximale Größe. Weitere Speicheranforderungen werden ignoriert.
.
MessageId=614
@ -2245,7 +2245,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PWD_HISTORY_CONFLICT
Language=German
ERROR_PWD_HISTORY_CONFLICT - Das Passwort wurde schon einaml benutzt, was in den Richtlinien verboten ist.
ERROR_PWD_HISTORY_CONFLICT - Das Passwort wurde schon einmal benutzt, was in den Richtlinien verboten ist.
.
MessageId=618
@ -2317,7 +2317,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_NO_MORE_MATCHES
Language=German
ERROR_NO_MORE_MATCHES - There are no more matches for the current index enumeration.
ERROR_NO_MORE_MATCHES - Es gibt keine weiteren Übereinstimmungen für die derzeitige Indexaufzählung.
.
MessageId=627
@ -2325,7 +2325,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_RANGE_LIST_CONFLICT
Language=German
ERROR_RANGE_LIST_CONFLICT - The range could not be added to the range list because of a conflict.
ERROR_RANGE_LIST_CONFLICT - Der Bereich konnte wegen eines Konflikts nicht in die Bereichsliste übernommen werden.
.
MessageId=628
@ -2333,7 +2333,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_SERVER_SID_MISMATCH
Language=German
ERROR_SERVER_SID_MISMATCH - The server process is running under a SID different than that required by client.
ERROR_SERVER_SID_MISMATCH - Der Serverprozess läuft unter einer SID, die sich von der vom Client angeforderten unterscheidet.
.
MessageId=629
@ -2349,7 +2349,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_FLOAT_MULTIPLE_FAULTS
Language=German
ERROR_FLOAT_MULTIPLE_FAULTS - Multiple floating point faults.
ERROR_FLOAT_MULTIPLE_FAULTS - Mehrere Fließkommafehler.
.
MessageId=631
@ -2357,7 +2357,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_FLOAT_MULTIPLE_TRAPS
Language=German
ERROR_FLOAT_MULTIPLE_TRAPS - Multiple floating point traps.
ERROR_FLOAT_MULTIPLE_TRAPS - Mehrere Fließkommafallen.
.
MessageId=632
@ -2365,7 +2365,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_NOINTERFACE
Language=German
ERROR_NOINTERFACE - The requested interface is not supported.
ERROR_NOINTERFACE - Das angeforderte Interface wird nicht unterstützt.
.
MessageId=633
@ -2373,7 +2373,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DRIVER_FAILED_SLEEP
Language=German
ERROR_DRIVER_FAILED_SLEEP - The driver %hs does not support standby mode. Updating this driver may allow the system to go to standby mode.
ERROR_DRIVER_FAILED_SLEEP - Der Treiber %hs unterstützt keinen Stromsparmodus. Die Aktualisierung des Treibers könnte dem System den Stromsparmodus ermöglichen.
.
MessageId=634
@ -2381,7 +2381,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_CORRUPT_SYSTEM_FILE
Language=German
ERROR_CORRUPT_SYSTEM_FILE - The system file %1 has become corrupt and has been replaced.
ERROR_CORRUPT_SYSTEM_FILE - Die Systemdatei %1 wurde beschädigt und ausgewechselt.
.
MessageId=635
@ -2389,7 +2389,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_COMMITMENT_MINIMUM
Language=German
ERROR_COMMITMENT_MINIMUM - Your system is low on virtual memory. ReactOS is increasing the size of your virtual memory paging file. During this process, memory requests for some applications may be denied. For more information, see Help.
ERROR_COMMITMENT_MINIMUM - Ihr System hat nur noch wenig virtuellen Speicher. ReactOS vergrößert ihre Pagingdatei. Während dieses Vorgangs könnten Speicheranfragen von Anwendungen abgelehnt werden. Für weitere Informationen siehe Hilfe.
.
MessageId=636
@ -2397,7 +2397,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PNP_RESTART_ENUMERATION
Language=German
ERROR_PNP_RESTART_ENUMERATION - A device was removed so enumeration must be restarted.
ERROR_PNP_RESTART_ENUMERATION - Ein Gerät wurde entfernt, so dass die Nummerierung neu gestartet werden muss.
.
MessageId=637
@ -2405,7 +2405,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_SYSTEM_IMAGE_BAD_SIGNATURE
Language=German
ERROR_SYSTEM_IMAGE_BAD_SIGNATURE - The system image %s is not properly signed. The file has been replaced with the signed file. The system has been shut down.
ERROR_SYSTEM_IMAGE_BAD_SIGNATURE - Das Systemabbild %s wurde nicht korrekt signiert. Die Datei wurde mit der signierten Datei ersetzt. Das System wurde heruntergefahren.
.
MessageId=638
@ -2413,7 +2413,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PNP_REBOOT_REQUIRED
Language=German
ERROR_PNP_REBOOT_REQUIRED - Device will not start without a reboot.
ERROR_PNP_REBOOT_REQUIRED - Das Gerät wird ohne einen Neustart nicht gestartet werden.
.
MessageId=639
@ -2421,7 +2421,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_INSUFFICIENT_POWER
Language=German
ERROR_INSUFFICIENT_POWER - There is not enough power to complete the requested operation.
ERROR_INSUFFICIENT_POWER - Es gibt nicht genug Strom, um den angeforderten Vorgang abzuschließen.
.
MessageId=641
@ -2429,7 +2429,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_SYSTEM_SHUTDOWN
Language=German
ERROR_SYSTEM_SHUTDOWN - The system is in the process of shutting down.
ERROR_SYSTEM_SHUTDOWN - Das System wird heruntergefahren.
.
MessageId=642
@ -2437,7 +2437,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PORT_NOT_SET
Language=German
ERROR_PORT_NOT_SET - An attempt to remove a processes DebugPort was made, but a port was not already associated with the process.
ERROR_PORT_NOT_SET - Ein Versuch, den DebugPort eines Prozesses zu entfernen, wurde unternommen, aber dem Prozess war noch kein solcher Port zugewiesen.
.
MessageId=643
@ -2453,7 +2453,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_RANGE_NOT_FOUND
Language=German
ERROR_RANGE_NOT_FOUND - The specified range could not be found in the range list.
ERROR_RANGE_NOT_FOUND - Der angegebene Bereich konnte nicht in der Bereichsliste gefunden werden.
.
MessageId=646
@ -2461,7 +2461,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_NOT_SAFE_MODE_DRIVER
Language=German
ERROR_NOT_SAFE_MODE_DRIVER - The driver was not loaded because the system is booting into safe mode.
ERROR_NOT_SAFE_MODE_DRIVER - Der Treiber wurde nicht geladen, da das System im sicheren Modus gestartet wird.
.
MessageId=647
@ -2469,7 +2469,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_FAILED_DRIVER_ENTRY
Language=German
ERROR_FAILED_DRIVER_ENTRY - The driver was not loaded because it failed it's initialization call.
ERROR_FAILED_DRIVER_ENTRY - Der Treiber wurde nicht geladen, weil sein Initialisierungsaufruf fehlschlug.
.
MessageId=648
@ -2477,7 +2477,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DEVICE_ENUMERATION_ERROR
Language=German
ERROR_DEVICE_ENUMERATION_ERROR - The \"%hs\" encountered an error while applying power or reading the device configuration. This may be caused by a failure of your hardware or by a poor connection.
ERROR_DEVICE_ENUMERATION_ERROR - Es ist ein Fehler mit \"%hs\" bei der Stromversorgung oder bei der Prüfung der Geräteeigenschaften aufgetreten. Dies könnte an einem Hardwarefehler oder an einer schlechten Verbindung liegen.
.
MessageId=649
@ -2485,7 +2485,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_MOUNT_POINT_NOT_RESOLVED
Language=German
ERROR_MOUNT_POINT_NOT_RESOLVED - The create operation failed because the name contained at least one mount point which resolves to a volume to which the specified device object is not attached.
ERROR_MOUNT_POINT_NOT_RESOLVED - Der Erstellvorgang ist fehlgeschlagen, da der Name mindestens einen Mountpunkt enthielt, der auf eine Partition zeigt, an die das angegebene Gerät nicht angehängt ist.
.
MessageId=650
@ -2493,7 +2493,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_INVALID_DEVICE_OBJECT_PARAMETER
Language=German
ERROR_INVALID_DEVICE_OBJECT_PARAMETER - The device object parameter is either not a valid device object or is not attached to the volume specified by the file name.
ERROR_INVALID_DEVICE_OBJECT_PARAMETER - Der Geräteparameter ist entweder kein gültiges Gerät oder nicht an den im Dateinamen angegebenen Datenträger angehängt.
.
MessageId=651
@ -2501,7 +2501,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_MCA_OCCURED
Language=German
ERROR_MCA_OCCURED - A Machine Check Error has occurred. Please check the system eventlog for additional information.
ERROR_MCA_OCCURED - Ein Computerprüffehler ist aufgetreten. Bitte überprüfen Sie die Ereignisanzeige für weitere Informationen.
.
MessageId=652
@ -2509,7 +2509,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DRIVER_DATABASE_ERROR
Language=German
ERROR_DRIVER_DATABASE_ERROR - There was error [%2] processing the driver database.
ERROR_DRIVER_DATABASE_ERROR - Fehler [%2] ist beim Verarbeiten der Gerätedatenbank aufgetreten.
.
MessageId=653
@ -2517,7 +2517,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_SYSTEM_HIVE_TOO_LARGE
Language=German
ERROR_SYSTEM_HIVE_TOO_LARGE - System hive size has exceeded its limit.
ERROR_SYSTEM_HIVE_TOO_LARGE - Die Größe des Systemzweiges hat ihre Grenze überschritten.
.
MessageId=654
@ -2525,7 +2525,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DRIVER_FAILED_PRIOR_UNLOAD
Language=German
ERROR_DRIVER_FAILED_PRIOR_UNLOAD - The driver could not be loaded because a previous version of the driver is still in memory.
ERROR_DRIVER_FAILED_PRIOR_UNLOAD - Der Treiber konnte nicht geladen werden, da sich eine frühere Version des Treibers noch im Speicher befindet.
.
MessageId=655
@ -2533,7 +2533,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_VOLSNAP_PREPARE_HIBERNATE
Language=German
ERROR_VOLSNAP_PREPARE_HIBERNATE - Please wait while the Volume Shadow Copy Service prepares volume %hs for hibernation.
ERROR_VOLSNAP_PREPARE_HIBERNATE - Bitte warten Sie, während der Schattenkopiedienst das Laufwerk %hs auf den Ruhezustand vorbereitet.
.
MessageId=656
@ -2549,7 +2549,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_HUNG_DISPLAY_DRIVER_THREAD
Language=German
ERROR_HUNG_DISPLAY_DRIVER_THREAD - The %hs display driver has stopped working normally. Save your work and reboot the system to restore full display functionality. The next time you reboot the machine a dialog will be displayed giving you a chance to report this failure to Microsoft.
ERROR_HUNG_DISPLAY_DRIVER_THREAD - Der Anzeigetreiber %hs funktioniert nicht mehr normal. Speichern Sie Ihre Daten und starten Sie das System neu, um die volle Anzeigefunktionalität wiederherzustellen. Beim nächsten Start des Computers wird ein Dialog erscheinen, der es Ihnen ermöglicht, Microsoft diesen Fehler zu melden.
.
MessageId=665
@ -2557,7 +2557,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_FILE_SYSTEM_LIMITATION
Language=German
ERROR_FILE_SYSTEM_LIMITATION - The requested operation could not be completed due to a file system limitation.
ERROR_FILE_SYSTEM_LIMITATION - Der angeforderte Vorgang wurde wegen Einschränkungen des Dateisystems nicht ausgeführt.
.
MessageId=668
@ -2573,7 +2573,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_VERIFIER_STOP
Language=German
ERROR_VERIFIER_STOP - Application verifier has found an error in the current process.
ERROR_VERIFIER_STOP - Die Anwendungsprüfung hat einen Fehler in dem laufenden Prozess festgestellt.
.
MessageId=670
@ -2589,7 +2589,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PNP_BAD_MPS_TABLE
Language=German
ERROR_PNP_BAD_MPS_TABLE - A device is missing in the system BIOS MPS table. This device will not be used. Please contact your system vendor for system BIOS update.
ERROR_PNP_BAD_MPS_TABLE - Ein Gerät fehlt in der BIOS-MPS-Tabelle. Dieses Gerät wird nicht verwendet. Bitte kontaktieren Sie den Hersteller Ihres Systems für eine Aktualisierung des BIOS.
.
MessageId=672
@ -2597,7 +2597,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PNP_TRANSLATION_FAILED
Language=German
ERROR_PNP_TRANSLATION_FAILED - A translator failed to translate resources.
ERROR_PNP_TRANSLATION_FAILED - Ein Übersetzer konnte Ressourcen nicht übersetzen.
.
MessageId=673
@ -2605,7 +2605,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PNP_IRQ_TRANSLATION_FAILED
Language=German
ERROR_PNP_IRQ_TRANSLATION_FAILED - A IRQ translator failed to translate resources.
ERROR_PNP_IRQ_TRANSLATION_FAILED - Ein IRQ-Übersetzer konnte Ressourcen nicht übersetzen.
.
MessageId=674
@ -2613,7 +2613,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PNP_INVALID_ID
Language=German
ERROR_PNP_INVALID_ID - Driver %2 returned invalid ID for a child device (%3).
ERROR_PNP_INVALID_ID - Der Treiber %2 gab eine ungültige ID für ein Kindgerät (%3) zurück.
.
MessageId=675
@ -2621,7 +2621,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_WAKE_SYSTEM_DEBUGGER
Language=German
ERROR_WAKE_SYSTEM_DEBUGGER - The system debugger was awakened by an interrupt.
ERROR_WAKE_SYSTEM_DEBUGGER - Der Systemdebugger wurde mittels Interrupt erweckt.
.
MessageId=676
@ -2629,7 +2629,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_HANDLES_CLOSED
Language=German
ERROR_HANDLES_CLOSED - Handles to objects have been automatically closed as a result of the requested operation.
ERROR_HANDLES_CLOSED - Handles auf Objekte wurden als Ergebnis des angeforderten Vorgangs automatisch geschlossen.
.
MessageId=677
@ -2637,7 +2637,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_EXTRANEOUS_INFORMATION
Language=German
ERROR_EXTRANEOUS_INFORMATION - he specified access control list (ACL) contained more information than was expected.
ERROR_EXTRANEOUS_INFORMATION - Die angegebene Zugangskontrollliste (ACL) beinhaltete mehr Informationen als erwartet.
.
MessageId=678
@ -2669,7 +2669,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_STOPPED_ON_SYMLINK
Language=German
ERROR_STOPPED_ON_SYMLINK - The create operation stopped after reaching a symbolic link.
ERROR_STOPPED_ON_SYMLINK - Die Erzeugung wurde beim Erreichen eines symbolischen Verweises beendet.
.
MessageId=682
@ -2677,7 +2677,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_LONGJUMP
Language=German
ERROR_LONGJUMP - A long jump has been executed.
ERROR_LONGJUMP - Ein langer Sprung wurde ausgeführt.
.
MessageId=683
@ -2685,7 +2685,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PLUGPLAY_QUERY_VETOED
Language=German
ERROR_PLUGPLAY_QUERY_VETOED - The Plug and Play query operation was not successful.
ERROR_PLUGPLAY_QUERY_VETOED - Der Plug-and-Play-Vorgang war nicht erfolgreich.
.
MessageId=684
@ -2701,7 +2701,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_REGISTRY_HIVE_RECOVERED
Language=German
ERROR_REGISTRY_HIVE_RECOVERED - Registry hive (file): %hs was corrupted and it has been recovered. Some data might have been lost.
ERROR_REGISTRY_HIVE_RECOVERED - Der Registryzweig (Datei) %hs war defekt und wurde wiederhergestellt. Es könnten Daten verloren gegangen sein.
.
MessageId=686
@ -2709,7 +2709,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DLL_MIGHT_BE_INSECURE
Language=German
ERROR_DLL_MIGHT_BE_INSECURE - The application is attempting to run executable code from the module %hs. This may be insecure. An alternative, %hs, is available. Should the application use the secure module %hs?
ERROR_DLL_MIGHT_BE_INSECURE - Die Anwendung versucht, ausführbaren Code aus dem Modul %hs zu laden. Dies könnte unsicher sein. Eine Alternative, %hs, ist verfügbar. Soll die Anwendung das sichere Modul %hs nutzen?
.
MessageId=687
@ -2717,7 +2717,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DLL_MIGHT_BE_INCOMPATIBLE
Language=German
ERROR_DLL_MIGHT_BE_INCOMPATIBLE - The application is loading executable code from the module %hs. This is secure, but may be incompatible with previous releases of the operating system. An alternative, %hs, is available. Should the application use the secure module %hs?
ERROR_DLL_MIGHT_BE_INCOMPATIBLE - Die Anwendung versucht, ausführbaren Code aus dem Modul %hs zu laden. Dies ist sicher, aber könnte mit früheren Versionen des Betriebssystems inkompatibel sein. Eine Alternative, %hs, ist verfügbar. Soll die Anwendung das sichere Modul %hs nutzen?
.
MessageId=688
@ -2725,7 +2725,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_EXCEPTION_NOT_HANDLED
Language=German
ERROR_DBG_EXCEPTION_NOT_HANDLED - Debugger did not handle the exception.
ERROR_DBG_EXCEPTION_NOT_HANDLED - Der Debugger behandelte die Ausnahme nicht.
.
MessageId=689
@ -2733,7 +2733,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_REPLY_LATER
Language=German
ERROR_DBG_REPLY_LATER - Debugger will reply later.
ERROR_DBG_REPLY_LATER - Der Debugger wird später antworten.
.
MessageId=690
@ -2741,7 +2741,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE
Language=German
ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE - Debugger can not provide handle.
ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE - Der Debugger kann das Handle nicht bereitstellen.
.
MessageId=691
@ -2749,7 +2749,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_TERMINATE_THREAD
Language=German
ERROR_DBG_TERMINATE_THREAD - Debugger terminated thread.
ERROR_DBG_TERMINATE_THREAD - Der Debugger hat den Thread terminiert.
.
MessageId=692
@ -2757,7 +2757,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_TERMINATE_PROCESS
Language=German
ERROR_DBG_TERMINATE_PROCESS - Debugger terminated process.
ERROR_DBG_TERMINATE_PROCESS - Der Debugger hat den Prozess terminiert.
.
MessageId=693
@ -2765,7 +2765,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_CONTROL_C
Language=German
ERROR_DBG_CONTROL_C - Debugger got control C.
ERROR_DBG_CONTROL_C - Der Debugger erhielt Strg-C.
.
MessageId=694
@ -2773,7 +2773,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_PRINTEXCEPTION_C
Language=German
ERROR_DBG_PRINTEXCEPTION_C - Debugger printed exception on control C.
ERROR_DBG_PRINTEXCEPTION_C - Der Debugger gab für Strg-C eine Ausnahme aus.
.
MessageId=695
@ -2781,7 +2781,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_RIPEXCEPTION
Language=German
ERROR_DBG_RIPEXCEPTION - Debugger received RIP exception.
ERROR_DBG_RIPEXCEPTION - Der Debugger erhielt eine RIP-Ausnahme.
.
MessageId=696
@ -2789,7 +2789,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_CONTROL_BREAK
Language=German
ERROR_DBG_CONTROL_BREAK - Debugger received control break.
ERROR_DBG_CONTROL_BREAK - Der Debugger erhielt Strg-Pause.
.
MessageId=697
@ -2805,7 +2805,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_OBJECT_NAME_EXISTS
Language=German
ERROR_OBJECT_NAME_EXISTS - An attempt was made to create an object and the object name already existed.
ERROR_OBJECT_NAME_EXISTS - Ein Versuch wurde unternommen, ein Objekt zu erzeugen, und der Name des Objekts existierte bereits.
.
MessageId=699
@ -2837,7 +2837,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_SEGMENT_NOTIFICATION
Language=German
ERROR_SEGMENT_NOTIFICATION - A virtual DOS machine (VDM) is loading, unloading, or moving an MS-DOS or Win16 program segment image. An exception is raised so a debugger can load, unload or track symbols and breakpoints within these 16-bit segments.
ERROR_SEGMENT_NOTIFICATION - Eine virtuelle DOS-Maschine (VDM) lädt, entlädt oder verschiebt ein MS-DOS- oder Win16-Programmsegmentabbild. Eine Ausnahme wird bereitgestellt, so dass ein Debugger Symbole und Haltepunkte innerhalb dieser 16-Bit-Segmente laden, entladen oder verfolgen kann.
.
MessageId=703
@ -2869,7 +2869,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_IMAGE_MACHINE_TYPE_MISMATCH
Language=German
ERROR_IMAGE_MACHINE_TYPE_MISMATCH - The image file %hs is valid, but is for a machine type other than the current machine. Select OK to continue, or CANCEL to fail the DLL load.
ERROR_IMAGE_MACHINE_TYPE_MISMATCH - Das Abbild %hs ist gültig, aber es ist für einen anderen Gerätetypen bestimmt. Wählen Sie OK zum Fortfahren oder ABBRECHEN aus, um das Laden der DLL abzubrechen.
.
MessageId=707
@ -2877,7 +2877,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_RECEIVE_PARTIAL
Language=German
ERROR_RECEIVE_PARTIAL - The network transport returned partial data to its client. The remaining data will be sent later.
ERROR_RECEIVE_PARTIAL - Der Netzwerktransport gab Teildaten an den Client weiter. Die verbleibenden Daten werden später gesendet.
.
MessageId=708
@ -2917,7 +2917,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_CHECKING_FILE_SYSTEM
Language=German
ERROR_CHECKING_FILE_SYSTEM - Checking file system on %wZ.
ERROR_CHECKING_FILE_SYSTEM - Prüfe Dateisystem auf %wZ.
.
MessageId=714
@ -2925,7 +2925,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PREDEFINED_HANDLE
Language=German
ERROR_PREDEFINED_HANDLE - The specified registry key is referenced by a predefined handle.
ERROR_PREDEFINED_HANDLE - Der angegebene Registryschlüssel wird von einem vordefinierten Handle referenziert.
.
MessageId=715
@ -2941,7 +2941,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_WAS_LOCKED
Language=German
ERROR_WAS_LOCKED - One of the pages to lock was already locked.
ERROR_WAS_LOCKED - Eine der zu schließenden Seiten war bereits verschlossen.
.
MessageId=720
@ -2949,7 +2949,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE
Language=German
ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE - The image file %hs is valid, but is for a machine type other than the current machine.
ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE - Das Abbild %hs ist gültig, aber für einen anderen Gerätetypen bestimmt.
.
MessageId=721
@ -2997,7 +2997,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_HIBERNATED
Language=German
ERROR_HIBERNATED - The system was put into hibernation.
ERROR_HIBERNATED - Das System wurde in den Ruhezustand versetzt.
.
MessageId=727
@ -3005,7 +3005,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_RESUME_HIBERNATION
Language=German
ERROR_RESUME_HIBERNATION - The system was resumed from hibernation.
ERROR_RESUME_HIBERNATION - Das System wurde aus dem Ruhezustand fortgesetzt.
.
MessageId=728
@ -3013,7 +3013,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_FIRMWARE_UPDATED
Language=German
ERROR_FIRMWARE_UPDATED - ReactOS has detected that the system firmware (BIOS) was updated [previous firmware date = %2, current firmware date %3].
ERROR_FIRMWARE_UPDATED - ReactOS hat festgestellt, dass die Systemfirmware (BIOS) aktualisiert wurde [voriges Firmwaredatum = %2, aktuelles Firmwaredatum = %3].
.
MessageId=729
@ -3029,7 +3029,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_WAKE_SYSTEM
Language=German
ERROR_WAKE_SYSTEM - The system has awoken
ERROR_WAKE_SYSTEM - Das System ist erwacht
.
MessageId=741
@ -3053,7 +3053,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_VOLUME_MOUNTED
Language=German
ERROR_VOLUME_MOUNTED - A new volume has been mounted by a file system.
ERROR_VOLUME_MOUNTED - Ein neuer Datenträger wurde durch ein Dateisystem gemountet.
.
MessageId=744
@ -3133,7 +3133,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_CRASH_DUMP
Language=German
ERROR_CRASH_DUMP - Crash dump exists in paging file.
ERROR_CRASH_DUMP - Absturzabbild existiert in Pagetabelle.
.
MessageId=754
@ -3141,7 +3141,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_BUFFER_ALL_ZEROS
Language=German
ERROR_BUFFER_ALL_ZEROS - Specified buffer contains all zeros.
ERROR_BUFFER_ALL_ZEROS - Der angegebene Puffer enthält nur Nullen.
.
MessageId=755
@ -3181,7 +3181,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PROCESS_NOT_IN_JOB
Language=German
ERROR_PROCESS_NOT_IN_JOB - The specified process is not part of a job.
ERROR_PROCESS_NOT_IN_JOB - Der angegebene Prozess ist nicht Teil eines Auftrags.
.
MessageId=760
@ -3189,7 +3189,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_PROCESS_IN_JOB
Language=German
ERROR_PROCESS_IN_JOB - The specified process is part of a job.
ERROR_PROCESS_IN_JOB - Der angegebene Prozess ist Teil eines Auftrags.
.
MessageId=761
@ -3197,7 +3197,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_VOLSNAP_HIBERNATE_READY
Language=German
ERROR_VOLSNAP_HIBERNATE_READY - The system is now ready for hibernation.
ERROR_VOLSNAP_HIBERNATE_READY - Das System ist nun für den Ruhezustand bereit.
.
MessageId=762
@ -3237,7 +3237,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_EXCEPTION_HANDLED
Language=German
ERROR_DBG_EXCEPTION_HANDLED - Debugger handled exception.
ERROR_DBG_EXCEPTION_HANDLED - Der Debugger hat eine Ausnahme behandelt.
.
MessageId=767
@ -3245,7 +3245,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_DBG_CONTINUE
Language=German
ERROR_DBG_CONTINUE - Debugger continued
ERROR_DBG_CONTINUE - Debugger fortgesetzt
.
MessageId=768
@ -3261,7 +3261,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_COMPRESSION_DISABLED
Language=German
ERROR_COMPRESSION_DISABLED - Compression is disabled for this volume.
ERROR_COMPRESSION_DISABLED - Komprimierung ist für diesen Datenträger deaktiviert.
.
MessageId=770
@ -3301,7 +3301,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_ERRORS_ENCOUNTERED
Language=German
ERROR_ERRORS_ENCOUNTERED - One or more errors occurred while processing the request.
ERROR_ERRORS_ENCOUNTERED - Ein oder mehrere Fehler sind beim Verarbeiten der Anfrage aufgetreten.
.
MessageId=775
@ -3309,7 +3309,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_NOT_CAPABLE
Language=German
ERROR_NOT_CAPABLE - The implementation is not capable of performing the request.
ERROR_NOT_CAPABLE - Die Implementierung ist nicht in der Lage, die Anfrage zu verarbeiten.
.
MessageId=776
@ -3325,7 +3325,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_VERSION_PARSE_ERROR
Language=German
ERROR_VERSION_PARSE_ERROR - A version number could not be parsed.
ERROR_VERSION_PARSE_ERROR - Eine Versionsnummer konnte nicht ausgelesen werden.
.
MessageId=778
@ -3333,7 +3333,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_BADSTARTPOSITION
Language=German
ERROR_BADSTARTPOSITION - The iterator's start position is invalid.
ERROR_BADSTARTPOSITION - Die Startposition des Iterators ist ungültig.
.
MessageId=994
@ -3341,7 +3341,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_EA_ACCESS_DENIED
Language=German
ERROR_EA_ACCESS_DENIED - Access to the extended attribute was denied.
ERROR_EA_ACCESS_DENIED - Zugriff auf das erweiterte Attribut wurde verweigert.
.
MessageId=995
@ -3373,7 +3373,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_NOACCESS
Language=German
ERROR_NOACCESS - Invalid access to memory location.
ERROR_NOACCESS - Ungültiger Zugriff auf Speicheradresse.
.
MessageId=999
@ -3389,7 +3389,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_STACK_OVERFLOW
Language=German
ERROR_STACK_OVERFLOW - Recursion too deep; the stack overflowed.
ERROR_STACK_OVERFLOW - Rekursion zu tief; Stapelüberlauf.
.
MessageId=1002
@ -3405,7 +3405,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_CAN_NOT_COMPLETE
Language=German
ERROR_CAN_NOT_COMPLETE - Cannot complete this function.
ERROR_CAN_NOT_COMPLETE - Kann diese Funktion nicht beenden.
.
MessageId=1004
@ -3413,7 +3413,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_INVALID_FLAGS
Language=German
ERROR_INVALID_FLAGS - Invalid flags.
ERROR_INVALID_FLAGS - Ungültige Flags.
.
MessageId=1005

View file

@ -2471,7 +2471,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_FAILED_DRIVER_ENTRY
Language=English
ERROR_FAILED_DRIVER_ENTRY - The driver was not loaded because it failed it's initialization call.
ERROR_FAILED_DRIVER_ENTRY - The driver was not loaded because it failed its initialization call.
.
MessageId=648

View file

@ -2469,7 +2469,7 @@ Severity=Success
Facility=System
SymbolicName=ERROR_FAILED_DRIVER_ENTRY
Language=Russian
ERROR_FAILED_DRIVER_ENTRY - The driver was not loaded because it failed it's initialization call.
ERROR_FAILED_DRIVER_ENTRY - The driver was not loaded because it failed its initialization call.
.
MessageId=648

View file

@ -3086,16 +3086,29 @@ FlushConsoleInputBuffer(HANDLE hConsoleInput)
/*--------------------------------------------------------------
* SetConsoleScreenBufferSize
*
* @unimplemented
* @implemented
*/
BOOL
WINAPI
SetConsoleScreenBufferSize(HANDLE hConsoleOutput,
COORD dwSize)
{
DPRINT1("SetConsoleScreenBufferSize(0x%x, 0x%x) UNIMPLEMENTED!\n", hConsoleOutput, dwSize);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
CSR_API_MESSAGE Request;
ULONG CsrRequest;
NTSTATUS Status;
CsrRequest = MAKE_CSR_API(SET_SCREEN_BUFFER_SIZE, CSR_CONSOLE);
Request.Data.SetScreenBufferSize.OutputHandle = hConsoleOutput;
Request.Data.SetScreenBufferSize.Size = dwSize;
Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE));
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
{
SetLastErrorByStatus(Status);
return FALSE;
}
return TRUE;
}
/*--------------------------------------------------------------

View file

@ -22,14 +22,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Âõîä"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Ïîòðåáèòåë:",IDC_STATIC,36,75,45,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Ïàðîëà:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "Äîáðå",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Îòêàç",IDCANCEL,115,122,50,14
PUSHBUTTON "Èçêëþ÷âàíå",IDC_SHUTDOWN,179,122,50,14
LTEXT "Ïîòðåáèòåë:",IDC_STATIC,36,75,45,8
LTEXT "Ïàðîëà:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -37,13 +37,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Ñèãóðíîñò"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Îòêàç",IDCANCEL,130,95,99,14
PUSHBUTTON "Èçõîä",IDC_LOGOFF,90,76,75,14
PUSHBUTTON "Èçêëþ÷âàíå",IDC_SHUTDOWN,170,76,75,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Êàêâî æåëàåòå?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Çàêëþ÷âàíå íà êîìïþòúðà",IDC_LOCK,25,95,99,14
PUSHBUTTON "Èçõîä",IDC_LOGOFF,90,76,75,14
PUSHBUTTON "Èçêëþ÷âàíå",IDC_SHUTDOWN,170,76,75,14
PUSHBUTTON "Çàäà÷åí óïðàâèòåë",IDC_TASKMGR,10,76,75,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Îòêàç",IDCANCEL,130,95,99,14
END
STRINGTABLE

View file

@ -27,14 +27,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Pøihlášení"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Jméno:",IDC_STATIC,36,75,40,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Heslo:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Storno",IDCANCEL,115,122,50,14
PUSHBUTTON "Vypnout",IDC_SHUTDOWN,179,122,50,14
LTEXT "Jméno:",IDC_STATIC,36,75,40,8
LTEXT "Heslo:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -42,13 +42,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Bezpeènost"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Storno",IDCANCEL,170,95,70,14
PUSHBUTTON "Odhlásit",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Vypnout",IDC_SHUTDOWN,170,76,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Co chcete udìlat?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Uzamknout poèítaè",IDC_LOCK,10,76,70,14
PUSHBUTTON "Odhlásit",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Vypnout",IDC_SHUTDOWN,170,76,70,14
PUSHBUTTON "Správce úloh",IDC_TASKMGR,90,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Storno",IDCANCEL,170,95,70,14
END
STRINGTABLE

View file

@ -22,14 +22,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Logon"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Benutzername:",IDC_STATIC,26, 75, 54, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Passwort:",IDC_STATIC,43, 93, 38, 8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,41, 122, 50, 14,BS_DEFPUSHBUTTON
PUSHBUTTON "Abbrechen",IDCANCEL,103, 122, 50, 14
PUSHBUTTON "Herunterfahren",IDC_SHUTDOWN,165, 122, 64, 14
LTEXT "Benutzername:",IDC_STATIC,26, 75, 54, 8
LTEXT "Passwort:",IDC_STATIC,43, 93, 38, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -37,13 +37,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Sicherheit"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Abbrechen",IDCANCEL,170,95,70,14
PUSHBUTTON "Abmelden",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Herunterfahren",IDC_SHUTDOWN,170,76,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Was wollen Sie tun?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Computer sperren",IDC_LOCK,10,76,70,14
PUSHBUTTON "Abmelden",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Herunterfahren",IDC_SHUTDOWN,170,76,70,14
PUSHBUTTON "Taskmanager",IDC_TASKMGR,90,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Abbrechen",IDCANCEL,170,95,70,14
END
STRINGTABLE

View file

@ -22,14 +22,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Logon"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Username:",IDC_STATIC,36,75,40,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Password:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Cancel",IDCANCEL,115,122,50,14
PUSHBUTTON "Shutdown",IDC_SHUTDOWN,179,122,50,14
LTEXT "Username:",IDC_STATIC,36,75,40,8
LTEXT "Password:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -37,13 +37,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Security"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Cancel",IDCANCEL,170,95,70,14
PUSHBUTTON "Log off",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Shutdown",IDC_SHUTDOWN,170,76,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "What do you want to do?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Lock computer",IDC_LOCK,10,76,70,14
PUSHBUTTON "Log off",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Shutdown",IDC_SHUTDOWN,170,76,70,14
PUSHBUTTON "Task manager",IDC_TASKMGR,90,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Cancel",IDCANCEL,170,95,70,14
END
STRINGTABLE

View file

@ -27,14 +27,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Acceder"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Usuario:",IDC_STATIC,36,75,40,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Contraseña:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "Aceptar",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Cancelar",IDCANCEL,115,122,50,14
PUSHBUTTON "Cerrar",IDC_SHUTDOWN,179,122,50,14
LTEXT "Usuario:",IDC_STATIC,36,75,40,8
LTEXT "Contraseña:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0, 0, 261, 116
@ -42,13 +42,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Seguridad"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Cancelar",IDCANCEL, 186, 95, 70, 14
PUSHBUTTON "Salir",IDC_LOGOFF, 92, 76, 88, 14
PUSHBUTTON "Cerrar",IDC_SHUTDOWN, 186, 76, 70, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "¿Qué quieres hacer?",IDC_STATIC, 94, 60, 87, 8
PUSHBUTTON "Bloquear computadora",IDC_LOCK, 4, 76, 83, 14
PUSHBUTTON "Salir",IDC_LOGOFF, 92, 76, 88, 14
PUSHBUTTON "Cerrar",IDC_SHUTDOWN, 186, 76, 70, 14
PUSHBUTTON "Administrador de tareas",IDC_TASKMGR, 92, 95, 88, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Cancelar",IDCANCEL, 186, 95, 70, 14
END
STRINGTABLE

View file

@ -22,14 +22,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Connexion"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Utilisateur:",IDC_STATIC,36,75,40,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Mot de passe:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Annuler",IDCANCEL,115,122,50,14
PUSHBUTTON "Éteindre",IDC_SHUTDOWN,179,122,50,14
LTEXT "Utilisateur:",IDC_STATIC,36,75,40,8
LTEXT "Mot de passe:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0, 0, 258, 116
@ -37,13 +37,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Sécurité"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Annuler",IDCANCEL, 184, 95, 70, 14
PUSHBUTTON "Déconnecter",IDC_LOGOFF, 93, 76, 85, 14
PUSHBUTTON "Éteindre",IDC_SHUTDOWN, 184, 76, 70, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Que voulez vous faire?",IDC_STATIC, 94, 60, 87, 8
PUSHBUTTON "Verrouiller l'ordinateur",IDC_LOCK, 4, 76, 82, 14
PUSHBUTTON "Déconnecter",IDC_LOGOFF, 93, 76, 85, 14
PUSHBUTTON "Éteindre",IDC_SHUTDOWN, 184, 76, 70, 14
PUSHBUTTON "Gestionnaire de tâches",IDC_TASKMGR, 93, 95, 85, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Annuler",IDCANCEL, 184, 95, 70, 14
END
STRINGTABLE

View file

@ -22,14 +22,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Masuk"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Nama pengguna:",IDC_STATIC,22, 75, 61, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Kata sandi:",IDC_STATIC, 40, 93, 42, 8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Batal",IDCANCEL,115,122,50,14
PUSHBUTTON "Matikan",IDC_SHUTDOWN,179,122,50,14
LTEXT "Nama pengguna:",IDC_STATIC,22, 75, 61, 8
LTEXT "Kata sandi:",IDC_STATIC, 40, 93, 42, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -37,13 +37,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Keamanan"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Batal",IDCANCEL,170,95,70,14
PUSHBUTTON "Keluar",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Matikan",IDC_SHUTDOWN,170,76,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Apa yang ingin anda lakukan?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Kunci komputer",IDC_LOCK,10,76,70,14
PUSHBUTTON "Keluar",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Matikan",IDC_SHUTDOWN,170,76,70,14
PUSHBUTTON "Manager Tugas",IDC_TASKMGR,90,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Batal",IDCANCEL,170,95,70,14
END
STRINGTABLE

View file

@ -30,14 +30,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Logon"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Utente:",IDC_STATIC,36,75,40,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Password:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Annulla",IDCANCEL,115,122,50,14
PUSHBUTTON "Spegnimento",IDC_SHUTDOWN,179,122,50,14
LTEXT "Utente:",IDC_STATIC,36,75,40,8
LTEXT "Password:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -45,13 +45,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Sicurezza"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Annulla",IDCANCEL,170,95,70,14
PUSHBUTTON "Fine sessione",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Spegnimento",IDC_SHUTDOWN,170,76,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Cosa volete fare?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Bloccare il computer",IDC_LOCK,10,76,70,14
PUSHBUTTON "Fine sessione",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Spegnimento",IDC_SHUTDOWN,170,76,70,14
PUSHBUTTON "Task manager",IDC_TASKMGR,90,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Annulla",IDCANCEL,170,95,70,14
END
STRINGTABLE

View file

@ -22,14 +22,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "ログオン"
FONT 9, "MS UI Gothic",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "ユーザー名:",IDC_STATIC,36,75,40,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "パスワード:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "キャンセル",IDCANCEL,115,122,50,14
PUSHBUTTON "シャットダウン",IDC_SHUTDOWN,179,122,50,14
LTEXT "ユーザー名:",IDC_STATIC,36,75,40,8
LTEXT "パスワード:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -37,13 +37,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "セキュリティ"
FONT 9, "MS UI Gothic",400,0,1
BEGIN
PUSHBUTTON "キャンセル",IDCANCEL,170,95,70,14
PUSHBUTTON "ログオフ",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "シャットダウン",IDC_SHUTDOWN,170,76,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "何をしますか?",IDC_STATIC,86,60,87,8
PUSHBUTTON "コンピュータのロック",IDC_LOCK,10,76,70,14
PUSHBUTTON "ログオフ",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "シャットダウン",IDC_SHUTDOWN,170,76,70,14
PUSHBUTTON "タスク マネージャ",IDC_TASKMGR,90,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "キャンセル",IDCANCEL,170,95,70,14
END
STRINGTABLE

View file

@ -22,14 +22,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Logg på ReactOS"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Brukernavn:",IDC_STATIC,36,75,40,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Passord:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Avbryt",IDCANCEL,115,122,50,14
PUSHBUTTON "Avslutt",IDC_SHUTDOWN,179,122,50,14
LTEXT "Brukernavn:",IDC_STATIC,36,75,40,8
LTEXT "Passord:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0, 0, 247, 116
@ -37,13 +37,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "ReactOS-sikkerhet"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Avbryt",IDCANCEL, 170, 95, 70, 14
PUSHBUTTON "Logg av...",IDC_LOGOFF, 86, 76, 78, 14
PUSHBUTTON "Avslutt...",IDC_SHUTDOWN, 170, 76, 70, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Hva vil du gjøre?",IDC_STATIC, 92, 60, 87, 8
PUSHBUTTON "Lås datamaskinen...",IDC_LOCK, 7, 76, 74, 14
PUSHBUTTON "Logg av...",IDC_LOGOFF, 86, 76, 78, 14
PUSHBUTTON "Avslutt...",IDC_SHUTDOWN, 170, 76, 70, 14
PUSHBUTTON "Oppgavebehandling...",IDC_TASKMGR, 86, 95, 78, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Avbryt",IDCANCEL, 170, 95, 70, 14
END
STRINGTABLE

View file

@ -29,14 +29,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Logon"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Nazwa u¿ytkownika:",IDC_STATIC, 11, 75, 70, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Has³o:",IDC_STATIC, 56, 93, 27, 8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Anuluj",IDCANCEL,115,122,50,14
PUSHBUTTON "Wy³¹cz",IDC_SHUTDOWN,179,122,50,14
LTEXT "Nazwa u¿ytkownika:",IDC_STATIC, 11, 75, 70, 8
LTEXT "Has³o:",IDC_STATIC, 56, 93, 27, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -44,13 +44,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Bezpieczeñstwo"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Anuluj",IDCANCEL,170,95,70,14
PUSHBUTTON "Wyloguj",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Wy³¹cz",IDC_SHUTDOWN,170,76,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Co chcesz teraz zrobiæ?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Blokada komputera",IDC_LOCK,10,76,70,14
PUSHBUTTON "Wyloguj",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Wy³¹cz",IDC_SHUTDOWN,170,76,70,14
PUSHBUTTON "Mened¿er zadañ",IDC_TASKMGR,90,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Anuluj",IDCANCEL,170,95,70,14
END
STRINGTABLE

View file

@ -1,10 +1,10 @@
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
#pragma code_page(65001)
IDD_STATUSWINDOW_DLG DIALOGEX 0,0,274,26
STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
CAPTION "Vă rugăm așteptați..."
CAPTION "Va rugam a?tepta?i..."
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
LTEXT "",IDC_STATUSLABEL,7,8,234,12,SS_WORDELLIPSIS
@ -16,7 +16,7 @@ CAPTION "Bun venit la ReactOS"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
ICON IDI_LOCKICON, -1, 7, 5, 32, 32
LTEXT "Apăsați combinația de taste Ctrl-Alt-Del",IDC_STATIC, 38, 10, 144, 14
LTEXT "Apasa?i combina?ia de taste Ctrl-Alt-Del",IDC_STATIC, 38, 10, 144, 14
END
IDD_LOGGEDOUT_DLG DIALOGEX 0,0,275,147
@ -24,14 +24,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Autentificare"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Nume utilizator:",IDC_STATIC,36,75,40,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Parola:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Anulare",IDCANCEL,115,122,50,14
PUSHBUTTON "Închidere",IDC_SHUTDOWN,179,122,50,14
LTEXT "Nume utilizator:",IDC_STATIC,36,75,40,8
LTEXT "Parolă:",IDC_STATIC,36,93,42,8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -39,23 +39,23 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Securitate"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Anulare",IDCANCEL,170,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Ce vre?i sa face?i?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Blocare computer",IDC_LOCK,10,76,70,14
PUSHBUTTON "Deautentificare",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Închidere",IDC_SHUTDOWN,170,76,70,14
LTEXT "Ce vreți să faceți?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Blocare computer",IDC_LOCK,10,76,70,14
PUSHBUTTON "Gestionar activități",IDC_TASKMGR,90,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Gestionar activita?i",IDC_TASKMGR,90,95,70,14
PUSHBUTTON "Anulare",IDCANCEL,170,95,70,14
END
STRINGTABLE
BEGIN
IDS_LOGGEDOUTSAS "Bun venit!"
IDS_LOCKEDSAS "Computerul este acum blocat."
IDS_PRESSCTRLALTDELETE "Apăsați Control+Alt+Delete pentru a vă autentifica."
IDS_PRESSCTRLALTDELETE "Apasa?i Control+Alt+Delete pentru a va autentifica."
IDS_ASKFORUSER "Nume utilizator: "
IDS_ASKFORPASSWORD "Parolă: "
IDS_FORCELOGOFF "Această acțiune va închide sesiunea utilizatorului curent și va pierde datele nesalvate de acesta. Sigur continuați?"
IDS_ASKFORPASSWORD "Parola: "
IDS_FORCELOGOFF "Aceasta ac?iune va închide sesiunea utilizatorului curent ?i va pierde datele nesalvate de acesta. Sigur continua?i?"
END
#pragma code_page(default)

View file

@ -24,14 +24,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Âõîä"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
RTEXT "Èìÿ ïîëüçîâàòåëÿ:", IDC_STATIC, 6, 75, 70, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
RTEXT "Ïàðîëü:", IDC_STATIC, 6, 93, 70, 8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK", IDOK, 47, 122, 50, 14, BS_DEFPUSHBUTTON
PUSHBUTTON "Îòìåíà", IDCANCEL, 109, 122, 50, 14
PUSHBUTTON "Âûêëþ÷åíèå", IDC_SHUTDOWN, 171, 122, 58, 14
RTEXT "Èìÿ ïîëüçîâàòåëÿ:", IDC_STATIC, 6, 75, 70, 8
RTEXT "Ïàðîëü:", IDC_STATIC, 6, 93, 70, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 116
@ -39,13 +39,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Áåçîïàñíîñòü"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Îòìåíà", IDCANCEL, 198, 95, 70, 14
PUSHBUTTON "Çàâåðøåíèå ñåàíñà", IDC_LOGOFF, 102, 76, 86, 14
PUSHBUTTON "Âûêëþ÷åíèå",IDC_SHUTDOWN, 198, 76, 70, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Âûáåðèòå íåîáõîäèìîå äåéñòâèå:", IDC_STATIC, 7, 60, 123, 8
PUSHBUTTON "Çàáëîêèðîâàòü", IDC_LOCK, 7, 76, 86, 14
PUSHBUTTON "Çàâåðøåíèå ñåàíñà", IDC_LOGOFF, 102, 76, 86, 14
PUSHBUTTON "Âûêëþ÷åíèå",IDC_SHUTDOWN, 198, 76, 70, 14
PUSHBUTTON "Äèñïåò÷åð çàäà÷",IDC_TASKMGR, 102, 95, 86, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Îòìåíà", IDCANCEL, 198, 95, 70, 14
END
STRINGTABLE

View file

@ -26,14 +26,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Prihlásenie"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Meno používate¾a:",IDC_STATIC,18, 75, 64, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Heslo:",IDC_STATIC,56, 93, 24, 8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON
PUSHBUTTON "Zruši<C5A1>",IDCANCEL,115,122,50,14
PUSHBUTTON "Vypnú<6E>",IDC_SHUTDOWN,179,122,50,14
LTEXT "Meno používate¾a:",IDC_STATIC,18, 75, 64, 8
LTEXT "Heslo:",IDC_STATIC,56, 93, 24, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116
@ -41,13 +41,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Bezpeènos<6F>"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Zruši<C5A1>",IDCANCEL,170,95,70,14
PUSHBUTTON "Odhlási<73>",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Vypnú<6E>",IDC_SHUTDOWN,170,76,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Èo chcete urobi<62>?",IDC_STATIC,86,60,87,8
PUSHBUTTON "Uzamknú<6E> poèítaè",IDC_LOCK,10,76,70,14
PUSHBUTTON "Odhlási<73>",IDC_LOGOFF,90,76,70,14
PUSHBUTTON "Vypnú<6E>",IDC_SHUTDOWN,170,76,70,14
PUSHBUTTON "Správca úloh",IDC_TASKMGR,90,95,70,14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Zruši<C5A1>",IDCANCEL,170,95,70,14
END
STRINGTABLE

View file

@ -30,14 +30,14 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Âõ³ä"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
LTEXT "Êîðèñòóâà÷:",IDC_STATIC,33, 75, 48, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
LTEXT "Ïàðîëü:",IDC_STATIC,48, 93, 34, 8
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
PUSHBUTTON "OK",IDOK,37, 122, 50, 14,BS_DEFPUSHBUTTON
PUSHBUTTON "Ñêàñóâàòè",IDCANCEL,93, 122, 50, 14
PUSHBUTTON "Çàâåðøåííÿ ðîáîòè...",IDC_SHUTDOWN,148, 122, 86, 14
LTEXT "Êîðèñòóâà÷:",IDC_STATIC,33, 75, 48, 8
LTEXT "Ïàðîëü:",IDC_STATIC,48, 93, 34, 8
EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL
EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,59
END
IDD_LOGGEDON_DLG DIALOGEX 0, 0, 257, 116
@ -45,13 +45,13 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS
CAPTION "Áåçïåêà"
FONT 8,"MS Shell Dlg",400,0,1
BEGIN
PUSHBUTTON "Ñêàñóâàòè",IDCANCEL, 165, 95, 86, 14
PUSHBUTTON "Âèõ³ä ³ç ñèñòåìè...",IDC_LOGOFF, 80, 76, 80, 14
PUSHBUTTON "Çàâåðøåííÿ ðîáîòè...",IDC_SHUTDOWN, 165, 76, 86, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
LTEXT "Ùî Âè õî÷åòå çðîáèòè?",IDC_STATIC, 86, 60, 87, 8
PUSHBUTTON "Áëîêóâàííÿ",IDC_LOCK, 6, 76, 70, 14
PUSHBUTTON "Âèõ³ä ³ç ñèñòåìè...",IDC_LOGOFF, 80, 76, 80, 14
PUSHBUTTON "Çàâåðøåííÿ ðîáîòè...",IDC_SHUTDOWN, 165, 76, 86, 14
PUSHBUTTON "Äèñïåò÷åð çàâäàíü",IDC_TASKMGR, 80, 95, 80, 14
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,247,53
PUSHBUTTON "Ñêàñóâàòè",IDCANCEL, 165, 95, 86, 14
END
STRINGTABLE

View file

@ -415,8 +415,9 @@ DoLoginTasks(
IN PWSTR Password)
{
LPWSTR ProfilePath = NULL;
LPWSTR lpEnvironment = NULL;
TOKEN_STATISTICS Stats;
PWLX_PROFILE_V1_0 pProfile = NULL;
PWLX_PROFILE_V2_0 pProfile = NULL;
DWORD cbStats, cbSize;
BOOL bResult;
@ -449,15 +450,25 @@ DoLoginTasks(
}
/* Allocate memory for profile */
pProfile = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WLX_PROFILE_V1_0));
pProfile = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WLX_PROFILE_V2_0));
if (!pProfile)
{
WARN("HeapAlloc() failed\n");
goto cleanup;
}
pProfile->dwType = WLX_PROFILE_TYPE_V1_0;
pProfile->dwType = WLX_PROFILE_TYPE_V2_0;
pProfile->pszProfile = ProfilePath;
lpEnvironment = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 32 * sizeof(WCHAR));
if (!lpEnvironment)
{
WARN("HeapAlloc() failed\n");
goto cleanup;
}
wcscpy(lpEnvironment, L"LOGONSERVER=\\\\Test");
pProfile->pszEnvironment = lpEnvironment;
if (!GetTokenInformation(pgContext->UserToken,
TokenStatistics,
(PVOID)&Stats,
@ -467,6 +478,7 @@ DoLoginTasks(
WARN("Couldn't get Authentication id from user token!\n");
goto cleanup;
}
*pgContext->pAuthenticationId = Stats.AuthenticationId;
pgContext->pMprNotifyInfo->pszUserName = DuplicationString(UserName);
pgContext->pMprNotifyInfo->pszDomain = DuplicationString(Domain);
@ -477,6 +489,10 @@ DoLoginTasks(
return TRUE;
cleanup:
if (pProfile)
{
HeapFree(GetProcessHeap(), 0, pProfile->pszEnvironment);
}
HeapFree(GetProcessHeap(), 0, pProfile);
HeapFree(GetProcessHeap(), 0, ProfilePath);
return FALSE;

View file

@ -21,12 +21,11 @@ END
IDD_STATUS DIALOGEX DISCARDABLE 0, 0, 200, 280
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Allgemein"
CAPTION "Generale"
FONT 8, "MS Shell Dlg"
BEGIN
END
IDD_LAN_NETSTATUS DIALOGEX DISCARDABLE 0, 0, 200,180
STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION
CAPTION "Generale"
@ -74,10 +73,10 @@ END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
CAPTION "Dettagli della connessione di rete"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Network Connection &Details:", -1, 15, 9, 170, 12
LTEXT "Dettagli della connessione di &rete:", -1, 15, 9, 170, 12
CONTROL "", IDC_DETAILS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 15, 25, 170, 130
PUSHBUTTON "&Close", IDC_CLOSE, 125, 165, 62, 14
END
@ -90,7 +89,7 @@ BEGIN
IDS_DEF_GATEWAY "Default Gateway"
IDS_DHCP_SERVER "DHCP Server"
IDS_LEASE_OBTAINED "Indirizzo ottenuto"
IDS_LEASE_EXPIRES "Indirizzo con scadenza"
IDS_LEASE_EXPIRES "Scadenza indirizzo"
IDS_DNS_SERVERS "DNS Servers"
IDS_WINS_SERVERS "WINS Servers"
IDS_PROPERTY "Proprietà"
@ -116,6 +115,7 @@ BEGIN
IDS_NET_REPAIR "Ripara"
IDS_NET_CREATELINK "Crea collegamento"
IDS_NET_DELETE "Cancella"
IDS_NET_RENAME "Rinomina"
IDS_NET_PROPERTIES "Proprietà"
IDS_FORMAT_BIT "%u Bit/s"

View file

@ -472,8 +472,6 @@ OPENGL32_LoadICD( LPCWSTR driver )
{
if (!_wcsicmp( driver, icd->driver_name )) /* found */
{
icd->refcount++;
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.driver_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
@ -484,8 +482,6 @@ OPENGL32_LoadICD( LPCWSTR driver )
/* not found - try to load */
icd = OPENGL32_LoadDriver( driver );
if (icd != NULL)
icd->refcount = 1;
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.driver_mutex ))
@ -513,7 +509,7 @@ OPENGL32_UnloadICD( GLDRIVERDATA *icd )
return FALSE; /* FIXME: do we have to expect such an error and handle it? */
}
if (--icd->refcount == 0)
if (icd->refcount == 0)
ret = OPENGL32_UnloadDriver( icd );
/* release mutex */

View file

@ -191,6 +191,7 @@ extern GLPROCESSDATA OPENGL32_processdata;
GLDRIVERDATA *OPENGL32_LoadICD( LPCWSTR driver );
BOOL OPENGL32_UnloadICD( GLDRIVERDATA *icd );
BOOL APIENTRY rosglMakeCurrent( HDC hdc, HGLRC hglrc );
int APIENTRY rosglGetPixelFormat( HDC );
BOOL APIENTRY IntUseFontBitmapsA( HDC hDC, DWORD first, DWORD count, DWORD listBase );
BOOL APIENTRY IntUseFontBitmapsW( HDC hDC, DWORD first, DWORD count, DWORD listBase );
BOOL APIENTRY IntUseFontOutlinesA( HDC hDC, DWORD first, DWORD count, DWORD listBase,

View file

@ -179,8 +179,11 @@ BOOL
ROSGL_DeleteContext( GLRC *glrc )
{
/* unload icd */
if (glrc->icd != NULL)
if ((glrc->icd != NULL) && !(InterlockedDecrement((LONG*)&glrc->icd->refcount)))
{
/* This is the last context, remove the ICD */
ROSGL_DeleteDCDataForICD( glrc->icd );
}
/* remove from list */
ROSGL_RemoveContext( glrc );
@ -269,7 +272,7 @@ ROSGL_GetPrivateDCData( HDC hdc )
data = OPENGL32_processdata.dcdata_list;
while (data != NULL)
{
if (data->hdc == hdc) /* found */
if ((data->hdc == hdc) || (WindowFromDC(data->hdc) == WindowFromDC(hdc))) /* found */
break;
data = data->next;
}
@ -413,7 +416,7 @@ ROSGL_ICDForHDC( HDC hdc )
NULL) != NULL)
{
/* Too bad, somebody else was faster... */
OPENGL32_UnloadICD(drvdata);
DBGTRACE("Uh, Someone beat you to it!\n");
}
}
}
@ -686,6 +689,16 @@ rosglCreateLayerContext( HDC hdc, int layer )
/* FIXME: fallback? */
return NULL;
}
/* Don't forget to refcount it, icd will be released when last context is deleted */
InterlockedIncrement((LONG*)&icd->refcount);
if(!rosglGetPixelFormat(hdc))
{
ROSGL_DeleteContext(glrc);
SetLastError(ERROR_INVALID_PIXEL_FORMAT);
return NULL;
}
/* create context */
if (icd->DrvCreateLayerContext != NULL)
@ -989,6 +1002,12 @@ rosglMakeCurrent( HDC hdc, HGLRC hglrc )
glrc->is_current = FALSE;
OPENGL32_threaddata->glrc = NULL;
}
else if ((GetObjectType(hdc) != OBJ_DC) && (GetObjectType(hdc) != OBJ_MEMDC))
{
DBGPRINT("Current context is NULL and requested HDC is invalid.\n");
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
}
else
{

View file

@ -1,6 +1,6 @@
/* FILE: dll/win32/shell32/lang/cs-CZ.rc
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
* UPDATED: 2010-04-05
* UPDATED: 2010-05-06
* THANKS TO: navaraf, who translated major part of this file
*/
@ -739,5 +739,5 @@ BEGIN
IDS_DEFAULT_CLUSTER_SIZE "Výchozí alokaèní velikost"
IDS_COPY_OF "Kopie "
IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file."
IDS_SHLEXEC_NOASSOC "Pro otevření tohoto souboru není nakonfigurován žádný program."
END

View file

@ -753,5 +753,5 @@ BEGIN
IDS_DEFAULT_CLUSTER_SIZE "Dimensione predefinita di allocazione"
IDS_COPY_OF "Copia di"
IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file."
IDS_SHLEXEC_NOASSOC "Non c'è un programma configurato per aprire questo tipo di file."
END

View file

@ -315,9 +315,6 @@ static PIDLCPanelStruct* _ILGetCPanelPointer(LPCITEMIDLIST pidl)
return NULL;
}
/**************************************************************************
* ISF_ControlPanel_fnEnumObjects
*/
static BOOL SHELL_RegisterCPanelApp(IEnumIDList* list, LPCSTR path)
{
LPITEMIDLIST pidl;
@ -1346,7 +1343,7 @@ static HRESULT WINAPI ICPanel_IContextMenu2_InvokeCommand(
}
else
{
FIXME("\n");
FIXME("Couldn't retrieve pointer to cpl structure\n");
return E_FAIL;
}
if (SUCCEEDED(IShellLink_Constructor(NULL, &IID_IShellLinkA, (LPVOID*)&isl)))

View file

@ -1511,6 +1511,7 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn
msg.pt = 0;*/
LPNMLVKEYDOWN plvKeyDown = (LPNMLVKEYDOWN) lpnmh;
SHORT ctrl = GetKeyState(VK_CONTROL) & 0x8000;
/* initiate a rename of the selected file or directory */
if(plvKeyDown->wVKey == VK_F2)
@ -1591,6 +1592,14 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn
IShellBrowser_BrowseObject(lpSb, NULL, SBSP_PARENT);
}
}
else if(plvKeyDown->wVKey == 'C' && ctrl)
{
FIXME("Need to copy\n");
}
else if(plvKeyDown->wVKey == 'V' && ctrl)
{
FIXME("Need to paste\n");
}
else
FIXME("LVN_KEYDOWN key=0x%08x\n",plvKeyDown->wVKey);
}

View file

@ -439,13 +439,16 @@ CreateEnvironmentBlock(LPVOID *lpEnvironment,
FALSE);
}
/* Set user environment variables */
SetUserEnvironment(lpEnvironment,
hKeyUser,
L"Environment");
/* Set user volatile environment variables */
SetUserEnvironment(lpEnvironment,
hKeyUser,
L"Volatile Environment");
RegCloseKey(hKeyUser);
return TRUE;

View file

@ -26,10 +26,38 @@
#include "tdiconn.h"
#include "debug.h"
static BOOLEAN CantReadMore( PAFD_FCB FCB ) {
UINT BytesAvailable = FCB->Recv.Content - FCB->Recv.BytesUsed;
static NTSTATUS RefillSocketBuffer( PAFD_FCB FCB ) {
NTSTATUS Status = STATUS_PENDING;
return !BytesAvailable;
if( !FCB->ReceiveIrp.InFlightRequest ) {
AFD_DbgPrint(MID_TRACE,("Replenishing buffer\n"));
Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest,
FCB->Connection.Object,
TDI_RECEIVE_NORMAL,
FCB->Recv.Window,
FCB->Recv.Size,
&FCB->ReceiveIrp.Iosb,
ReceiveComplete,
FCB );
if( ( Status == STATUS_SUCCESS && !FCB->ReceiveIrp.Iosb.Information ) ||
( !NT_SUCCESS( Status ) ) )
{
/* The socket has been closed */
FCB->PollState |= AFD_EVENT_DISCONNECT;
FCB->Overread = TRUE;
Status = STATUS_FILE_CLOSED;
}
else if( Status == STATUS_SUCCESS )
{
FCB->Recv.Content = FCB->ReceiveIrp.Iosb.Information;
FCB->PollState |= AFD_EVENT_RECEIVE;
}
PollReeval( FCB->DeviceExt, FCB->FileObject );
}
return Status;
}
static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB,
@ -46,7 +74,22 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB,
AFD_DbgPrint(MID_TRACE,("Called, BytesAvailable = %d\n",
BytesAvailable));
if( CantReadMore(FCB) ) return STATUS_PENDING;
if( FCB->Overread ) return STATUS_FILE_CLOSED;
if( !BytesAvailable ) {
FCB->Recv.Content = FCB->Recv.BytesUsed = 0;
Status = RefillSocketBuffer( FCB );
if ( Status != STATUS_SUCCESS )
return Status;
/* If RefillSocketBuffer returns STATUS_SUCCESS, we're good to go
* If RefillSocketBuffer returns STATUS_PENDING, then it's waiting on the transport for data
* If RefillSocketBuffer returns STATUS_FILE_CLOSED, then the connection was terminated
*/
/* Recalculate BytesAvailable based on new data */
BytesAvailable = FCB->Recv.Content - FCB->Recv.BytesUsed;
ASSERT(BytesAvailable);
}
Map = (PAFD_MAPBUF)(RecvReq->BufferArray + RecvReq->BufferCount);
@ -88,23 +131,8 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB,
if( FCB->Recv.BytesUsed == FCB->Recv.Content ) {
FCB->Recv.BytesUsed = FCB->Recv.Content = 0;
FCB->PollState &= ~AFD_EVENT_RECEIVE;
PollReeval( FCB->DeviceExt, FCB->FileObject );
if( !FCB->ReceiveIrp.InFlightRequest ) {
AFD_DbgPrint(MID_TRACE,("Replenishing buffer\n"));
Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest,
FCB->Connection.Object,
TDI_RECEIVE_NORMAL,
FCB->Recv.Window,
FCB->Recv.Size,
&FCB->ReceiveIrp.Iosb,
ReceiveComplete,
FCB );
if( Status == STATUS_SUCCESS )
FCB->Recv.Content = FCB->ReceiveIrp.Iosb.Information;
}
RefillSocketBuffer( FCB );
}
return STATUS_SUCCESS;
@ -159,7 +187,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
}
}
if( !CantReadMore(FCB) ) {
if( !FCB->Recv.Content ) {
FCB->PollState |= AFD_EVENT_RECEIVE;
} else
FCB->PollState &= ~AFD_EVENT_RECEIVE;

View file

@ -1457,6 +1457,20 @@ dev_mgr_register_hcd(PUSB_DEV_MANAGER dev_mgr, PHCD hcd)
return dev_mgr->hcd_count - 1;
}
VOID
dev_mgr_deregister_hcd(PUSB_DEV_MANAGER dev_mgr, UCHAR hcd_id)
{
UCHAR i;
if (dev_mgr == NULL || hcd_id >= MAX_HCDS - 1)
return;
for (i = hcd_id; i < dev_mgr->hcd_count - 1; i++)
dev_mgr->hcd_array[i] = dev_mgr->hcd_array[i + 1];
dev_mgr->hcd_count--;
}
BOOLEAN
dev_mgr_register_irp(PUSB_DEV_MANAGER dev_mgr, PIRP pirp, PURB purb)
{

View file

@ -208,6 +208,12 @@ PUSB_DEV_MANAGER dev_mgr,
PHCD hcd
);
VOID
dev_mgr_deregister_hcd(
PUSB_DEV_MANAGER dev_mgr,
UCHAR hcd_id
);
NTSTATUS
dev_mgr_dispatch(
IN PUSB_DEV_MANAGER dev_mgr,

View file

@ -58,15 +58,7 @@
#define endp_mult_count( endp ) ( ( ( endp->pusb_endp_desc->wMaxPacketSize & 0x1800 ) >> 11 ) + 1 )
#if 0
/* WTF?! */
#define release_adapter( padapTER ) \
{\
( ( padapTER ) ); \
}
#else
#define release_adapter( padapTER ) (void)(padapTER)
#endif
#define release_adapter( padapTER ) HalPutDmaAdapter(padapTER)
#define get_int_idx( _urb, _idx ) \
{\
@ -279,7 +271,7 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
BOOLEAN ehci_init_schedule(PEHCI_DEV ehci, PADAPTER_OBJECT padapter);
BOOLEAN ehci_release(PDEVICE_OBJECT pdev);
BOOLEAN ehci_release(PDEVICE_OBJECT pdev, PUSB_DEV_MANAGER dev_mgr);
static VOID ehci_stop(PEHCI_DEV ehci);
@ -321,7 +313,7 @@ PDEVICE_OBJECT ehci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, PUS
PDEVICE_OBJECT ehci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr);
BOOLEAN ehci_delete_device(PDEVICE_OBJECT pdev);
BOOLEAN ehci_delete_device(PDEVICE_OBJECT pdev, PUSB_DEV_MANAGER dev_mgr);
VOID ehci_get_capabilities(PEHCI_DEV ehci, PBYTE base);
@ -3374,7 +3366,7 @@ ehci_hcd_release(PHCD hcd)
ehci = ehci_from_hcd(hcd);
pdev_ext = ehci->pdev_ext;
return ehci_release(pdev_ext->pdev_obj);
return ehci_release(pdev_ext->pdev_obj, hcd->dev_mgr);
}
NTSTATUS
@ -3461,18 +3453,19 @@ ehci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, PUSB_DEV_MANAGER d
PDEVICE_OBJECT pdev;
BYTE buffer[sizeof(PCI_COMMON_CONFIG)];
PEHCI_DEVICE_EXTENSION pdev_ext;
LONG count = 0;
slot_num.u.AsULONG = 0;
pci_config = (PPCI_COMMON_CONFIG) buffer;
pdev = NULL;
//scan the bus to find ehci controller
for(bus = 0; bus < 3; bus++) /* enum bus0-bus2 */
//scan the PCI buses to find ehci controller
for (bus = 0; bus <= PCI_MAX_BRIDGE_NUMBER; bus++) //Yes, it should be <=
{
for(i = 0; i < PCI_MAX_DEVICES; i++)
for(i = 0; i <= PCI_MAX_DEVICES; i++)
{
slot_num.u.bits.DeviceNumber = i;
for(j = 0; j < PCI_MAX_FUNCTIONS; j++)
for(j = 0; j <= PCI_MAX_FUNCTION; j++)
{
slot_num.u.bits.FunctionNumber = j;
@ -3490,9 +3483,12 @@ ehci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, PUSB_DEV_MANAGER d
{
//well, we find our usb host controller( EHCI ), create device
pdev = ehci_alloc(drvr_obj, reg_path, ((bus << 8) | (i << 3) | j), dev_mgr);
if (!pdev)
continue;
if (pdev)
#ifdef _MULTI_EHCI
count++;
#else
goto LBL_LOOPOUT;
#endif
}
}
@ -3501,6 +3497,11 @@ ehci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, PUSB_DEV_MANAGER d
}
}
#ifndef _MULTI_EHCI
LBL_LOOPOUT:
#endif
DbgPrint("Found %d EHCI controllers\n", count);
if (pdev)
{
pdev_ext = pdev->DeviceExtension;
@ -3564,7 +3565,7 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
if (pdev_ext->padapter == NULL)
{
//fatal error
ehci_delete_device(pdev);
ehci_delete_device(pdev, dev_mgr);
return NULL;
}
@ -3583,7 +3584,7 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
DbgPrint("ehci_alloc(): error assign slot res, 0x%x\n", status);
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
ehci_delete_device(pdev);
ehci_delete_device(pdev, dev_mgr);
return NULL;
}
@ -3618,7 +3619,7 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
DbgPrint("ehci_alloc(): error, can not translate bus address\n");
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
ehci_delete_device(pdev);
ehci_delete_device(pdev, dev_mgr);
return NULL;
}
@ -3637,7 +3638,7 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
{
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
ehci_delete_device(pdev);
ehci_delete_device(pdev, dev_mgr);
return NULL;
}
}
@ -3662,7 +3663,7 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
{
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
ehci_delete_device(pdev);
ehci_delete_device(pdev, dev_mgr);
return NULL;
}
@ -3691,7 +3692,7 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
affinity, FALSE) //No float save
!= STATUS_SUCCESS)
{
ehci_release(pdev);
ehci_release(pdev, dev_mgr);
return NULL;
}
@ -4016,7 +4017,7 @@ ehci_get_capabilities(PEHCI_DEV ehci, PBYTE base)
}
BOOLEAN
ehci_delete_device(PDEVICE_OBJECT pdev)
ehci_delete_device(PDEVICE_OBJECT pdev, PUSB_DEV_MANAGER dev_mgr)
{
STRING string;
UNICODE_STRING symb_name;
@ -4036,6 +4037,8 @@ ehci_delete_device(PDEVICE_OBJECT pdev)
IoDeleteSymbolicLink(&symb_name);
RtlFreeUnicodeString(&symb_name);
dev_mgr_deregister_hcd(dev_mgr, pdev_ext->ehci->hcd_interf.hcd_get_id(&pdev_ext->ehci->hcd_interf));
if (pdev_ext->res_list)
ExFreePool(pdev_ext->res_list); // not allocated by usb_alloc_mem
@ -4061,7 +4064,7 @@ ehci_stop(PEHCI_DEV ehci)
}
BOOLEAN
ehci_release(PDEVICE_OBJECT pdev)
ehci_release(PDEVICE_OBJECT pdev, PUSB_DEV_MANAGER dev_mgr)
{
PEHCI_DEVICE_EXTENSION pdev_ext;
PEHCI_DEV ehci;
@ -4094,7 +4097,7 @@ ehci_release(PDEVICE_OBJECT pdev)
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
ehci_delete_device(pdev);
ehci_delete_device(pdev, dev_mgr);
return FALSE;

View file

@ -65,15 +65,7 @@ extern PDEVICE_OBJECT ehci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_pa
: enDP->pusb_endp_desc->wMaxPacketSize )
#if 0
/* WTF?! */
#define release_adapter( padapTER ) \
{\
( ( padapTER ) ); \
}
#else
#define release_adapter( padapTER ) (void)(padapTER)
#endif
#define release_adapter( padapTER ) HalPutDmaAdapter(padapTER)
#define get_int_idx( _urb, _idx ) \
{\
@ -110,7 +102,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
BOOLEAN uhci_init_schedule(PUHCI_DEV uhci, PADAPTER_OBJECT padapter);
BOOLEAN uhci_release(PDEVICE_OBJECT pdev);
BOOLEAN uhci_release(PDEVICE_OBJECT pdev, PUSB_DEV_MANAGER dev_mgr);
static VOID uhci_stop(PUHCI_DEV uhci);
@ -473,7 +465,7 @@ uhci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr)
}
BOOLEAN
uhci_delete_device(PDEVICE_OBJECT pdev)
uhci_delete_device(PDEVICE_OBJECT pdev, PUSB_DEV_MANAGER dev_mgr)
{
STRING string;
UNICODE_STRING symb_name;
@ -493,6 +485,8 @@ uhci_delete_device(PDEVICE_OBJECT pdev)
IoDeleteSymbolicLink(&symb_name);
RtlFreeUnicodeString(&symb_name);
dev_mgr_deregister_hcd(dev_mgr, pdev_ext->uhci->hcd_interf.hcd_get_id(&pdev_ext->uhci->hcd_interf));
if (pdev_ext->res_list)
ExFreePool(pdev_ext->res_list); // not allocated by usb_alloc_mem
@ -626,13 +620,13 @@ uhci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, PUSB_DEV_MANAGER d
count = 0;
pdev = NULL;
//scan the bus to find uhci controller
for(bus = 0; bus < 3; bus++) /* enum bus0-bus2 */
//scan the PCI buses to find uhci controller
for (bus = 0; bus <= PCI_MAX_BRIDGE_NUMBER; bus++)
{
for(i = 0; i < PCI_MAX_DEVICES; i++)
for(i = 0; i <= PCI_MAX_DEVICES; i++)
{
slot_num.u.bits.DeviceNumber = i;
for(j = 0; j < PCI_MAX_FUNCTIONS; j++)
for(j = 0; j <= PCI_MAX_FUNCTION; j++)
{
slot_num.u.bits.FunctionNumber = j;
@ -645,18 +639,15 @@ uhci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, PUSB_DEV_MANAGER d
if (ret == 2) /*no device on the slot */
break;
if (pci_config->BaseClass == 0x0c && pci_config->SubClass == 0x03)
if (pci_config->BaseClass == 0x0c && pci_config->SubClass == 0x03 &&
pci_config->ProgIf == 0x00)
{
// well, we find our usb host controller, create device
#ifdef _MULTI_UHCI
{
pdev = uhci_alloc(drvr_obj, reg_path, ((bus << 8) | (i << 3) | j), dev_mgr);
if (pdev)
count++;
}
#else
pdev = uhci_alloc(drvr_obj, reg_path, ((bus << 8) | (i << 3) | j), dev_mgr);
if (pdev)
#ifdef _MULTI_UHCI
count++;
#else
goto LBL_LOOPOUT;
#endif
}
@ -669,6 +660,8 @@ uhci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, PUSB_DEV_MANAGER d
#ifndef _MULTI_UHCI
LBL_LOOPOUT:
#endif
DbgPrint("Found %d UHCI controllers\n", count);
if (pdev)
{
pdev_ext = pdev->DeviceExtension;
@ -732,7 +725,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
if (pdev_ext->padapter == NULL)
{
//fatal error
uhci_delete_device(pdev);
uhci_delete_device(pdev, dev_mgr);
return NULL;
}
@ -751,7 +744,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
DbgPrint("uhci_alloc(): error assign slot res, 0x%x\n", status);
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
uhci_delete_device(pdev);
uhci_delete_device(pdev, dev_mgr);
return NULL;
}
@ -781,7 +774,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
DbgPrint("uhci_alloc(): error, can not translate bus address\n");
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
uhci_delete_device(pdev);
uhci_delete_device(pdev, dev_mgr);
return NULL;
}
@ -800,7 +793,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
{
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
uhci_delete_device(pdev);
uhci_delete_device(pdev, dev_mgr);
return NULL;
}
}
@ -819,7 +812,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
{
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
uhci_delete_device(pdev);
uhci_delete_device(pdev, dev_mgr);
return NULL;
}
@ -857,7 +850,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
FALSE) //No float save
!= STATUS_SUCCESS)
{
uhci_release(pdev);
uhci_release(pdev, dev_mgr);
return NULL;
}
@ -865,7 +858,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
}
BOOLEAN
uhci_release(PDEVICE_OBJECT pdev)
uhci_release(PDEVICE_OBJECT pdev, PUSB_DEV_MANAGER dev_mgr)
{
PDEVICE_EXTENSION pdev_ext;
PUHCI_DEV uhci;
@ -901,7 +894,7 @@ uhci_release(PDEVICE_OBJECT pdev)
release_adapter(pdev_ext->padapter);
pdev_ext->padapter = NULL;
uhci_delete_device(pdev);
uhci_delete_device(pdev, dev_mgr);
return FALSE;
@ -3680,7 +3673,7 @@ uhci_hcd_release(struct _HCD * hcd)
uhci = uhci_from_hcd(hcd);
pdev_ext = uhci->pdev_ext;
return uhci_release(pdev_ext->pdev_obj);
return uhci_release(pdev_ext->pdev_obj, hcd->dev_mgr);
}
NTSTATUS

View file

@ -2,6 +2,8 @@
<!DOCTYPE module SYSTEM "../../../../tools/rbuild/project.dtd">
<module name="usbdriver" type="kernelmodedriver" installbase="system32/drivers" installname="usbdriver.sys">
<define name="INCLUDE_EHCI" />
<define name="_MULTI_UHCI" />
<define name="_MULTI_EHCI" />
<define name="_X86" />
<include base="usbdriver">.</include>
<library>ntoskrnl</library>

View file

@ -602,7 +602,6 @@ CPortPinDMus::Init(
DPRINT("Failed to add pin to service group\n");
return Status;
}
m_ServiceGroup->SupportDelayedService();
}
Status = m_IrpQueue->Init(ConnectDetails, 0, 0, NULL);

View file

@ -1213,7 +1213,6 @@ CPortPinWaveCyclic::Init(
return Status;
}
m_ServiceGroup->SupportDelayedService();
m_Stream->SetState(KSSTATE_STOP);
m_State = KSSTATE_STOP;
m_CommonBufferOffset = 0;
@ -1224,6 +1223,8 @@ CPortPinWaveCyclic::Init(
m_Delay = Int32x32To64(10, -10000);
Status = m_Stream->SetNotificationFreq(10, &m_FrameSize);
PC_ASSERT(NT_SUCCESS(Status));
PC_ASSERT(m_FrameSize);
SilenceBuffer = AllocateItem(NonPagedPool, m_FrameSize, TAG_PORTCLASS);
if (!SilenceBuffer)

View file

@ -815,7 +815,6 @@ CPortPinWavePci::Init(
DPRINT("Failed to add pin to service group\n");
return Status;
}
m_ServiceGroup->SupportDelayedService();
}
// delay of 10 milisec

View file

@ -340,7 +340,7 @@ CPortDMus::NewRegistryKey(
RegistryKeyType,
DesiredAccess,
m_pDeviceObject,
NULL,//FIXME
(ISubdevice*)this,
ObjectAttributes,
CreateOptions,
Disposition);

View file

@ -299,7 +299,7 @@ CPortTopology::NewRegistryKey(
RegistryKeyType,
DesiredAccess,
m_pDeviceObject,
NULL,//FIXME
(ISubdevice*)this,
ObjectAttributes,
CreateOptions,
Disposition);

View file

@ -340,7 +340,7 @@ CPortWaveCyclic::NewRegistryKey(
DPRINT("IPortWaveCyclic_fnNewRegistryKey called w/o initialized\n");
return STATUS_UNSUCCESSFUL;
}
return PcNewRegistryKey(OutRegistryKey, OuterUnknown, RegistryKeyType, DesiredAccess, m_pDeviceObject, NULL /*FIXME*/, ObjectAttributes, CreateOptions, Disposition);
return PcNewRegistryKey(OutRegistryKey, OuterUnknown, RegistryKeyType, DesiredAccess, m_pDeviceObject, (ISubdevice*)this, ObjectAttributes, CreateOptions, Disposition);
}

View file

@ -359,7 +359,7 @@ CPortWavePci::NewRegistryKey(
RegistryKeyType,
DesiredAccess,
m_pDeviceObject,
NULL,//FIXME
(ISubdevice*)this,
ObjectAttributes,
CreateOptions,
Disposition);

View file

@ -329,7 +329,7 @@ CPortWaveRT::NewRegistryKey(
DPRINT("IPortWaveRT_fnNewRegistryKey called w/o initialized\n");
return STATUS_UNSUCCESSFUL;
}
return PcNewRegistryKey(OutRegistryKey, OuterUnknown, RegistryKeyType, DesiredAccess, m_pDeviceObject, NULL /*FIXME*/, ObjectAttributes, CreateOptions, Disposition);
return PcNewRegistryKey(OutRegistryKey, OuterUnknown, RegistryKeyType, DesiredAccess, m_pDeviceObject, (ISubdevice*)this, ObjectAttributes, CreateOptions, Disposition);
}
//---------------------------------------------------------------
// ISubdevice interface

View file

@ -270,6 +270,9 @@ PcNewRegistryKey(
NTSTATUS Status = STATUS_UNSUCCESSFUL;
CRegistryKey * RegistryKey;
PPCLASS_DEVICE_EXTENSION DeviceExt;
PSUBDEVICE_DESCRIPTOR SubDeviceDescriptor;
ISubdevice * Device;
PSYMBOLICLINK_ENTRY SymEntry;
DPRINT("PcNewRegistryKey entered\n");
@ -294,8 +297,8 @@ PcNewRegistryKey(
// object attributes is mandatory
return STATUS_INVALID_PARAMETER;
}
// try to open the key
Status = ZwOpenKey(&hHandle, DesiredAccess, ObjectAttributes);
// try to create the key
Status = ZwCreateKey(&hHandle, DesiredAccess, ObjectAttributes, 0, NULL, CreateOptions, Disposition);
}
else if (RegistryKeyType == DeviceRegistryKey ||
RegistryKeyType == DriverRegistryKey ||
@ -305,7 +308,7 @@ PcNewRegistryKey(
if (RegistryKeyType == HwProfileRegistryKey)
{
// IoOpenDeviceRegistryKey used different constant
RegistryKeyType = PLUGPLAY_REGKEY_CURRENT_HWPROFILE;
RegistryKeyType = PLUGPLAY_REGKEY_CURRENT_HWPROFILE | PLUGPLAY_REGKEY_DEVICE;
}
// obtain the new device extension
@ -315,24 +318,71 @@ PcNewRegistryKey(
}
else if (RegistryKeyType == DeviceInterfaceRegistryKey)
{
// FIXME
UNIMPLEMENTED
DbgBreakPoint();
if (SubDevice == NULL)
{
// invalid parameter
return STATUS_INVALID_PARAMETER;
}
// look up our undocumented interface
Status = ((PUNKNOWN)SubDevice)->QueryInterface(IID_ISubdevice, (LPVOID*)&Device);
if (!NT_SUCCESS(Status))
{
DPRINT("No ISubdevice interface\n");
// invalid parameter
return STATUS_INVALID_PARAMETER;
}
// get the subdevice descriptor
Status = Device->GetDescriptor(&SubDeviceDescriptor);
if (!NT_SUCCESS(Status))
{
DPRINT("Failed to get subdevice descriptor %x\n", Status);
((PUNKNOWN)SubDevice)->Release();
return STATUS_UNSUCCESSFUL;
}
// is there an registered device interface
if (IsListEmpty(&SubDeviceDescriptor->SymbolicLinkList))
{
DPRINT("No device interface registered\n");
((PUNKNOWN)SubDevice)->Release();
return STATUS_UNSUCCESSFUL;
}
// get the first symbolic link
SymEntry = (PSYMBOLICLINK_ENTRY)CONTAINING_RECORD(SubDeviceDescriptor->SymbolicLinkList.Flink, SYMBOLICLINK_ENTRY, Entry);
// open device interface
Status = IoOpenDeviceInterfaceRegistryKey(&SymEntry->SymbolicLink, DesiredAccess, &hHandle);
// release subdevice interface
((PUNKNOWN)SubDevice)->Release();
}
// check for success
if (!NT_SUCCESS(Status))
{
DPRINT1("PcNewRegistryKey failed with %lx\n", Status);
return Status;
}
// allocate new registry key object
RegistryKey = new(NonPagedPool, TAG_PORTCLASS)CRegistryKey(OuterUnknown, hHandle);
if (!RegistryKey)
{
// not enough memory
ZwClose(hHandle);
return STATUS_INSUFFICIENT_RESOURCES;
}
// query for interface
Status = RegistryKey->QueryInterface(IID_IRegistryKey, (PVOID*)OutRegistryKey);
if (!NT_SUCCESS(Status))
{
// out of memory
delete RegistryKey;
}

View file

@ -54,12 +54,10 @@ protected:
LIST_ENTRY m_ServiceSinkHead;
BOOL m_Initialized;
BOOL m_TimerActive;
BOOL m_TimerInitialized;
KTIMER m_Timer;
KDPC m_Dpc;
KEVENT m_Event;
LONG m_ThreadActive;
KSPIN_LOCK m_Lock;
friend VOID NTAPI IServiceGroupDpc(IN struct _KDPC *Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2);
@ -105,9 +103,16 @@ CServiceGroup::QueryInterface(
CServiceGroup::CServiceGroup(IUnknown * OuterUnknown)
{
// initialize dpc
KeInitializeDpc(&m_Dpc, IServiceGroupDpc, (PVOID)this);
// set highest importance
KeSetImportanceDpc(&m_Dpc, HighImportance);
KeInitializeEvent(&m_Event, NotificationEvent, FALSE);
// initialize service group list lock
KeInitializeSpinLock(&m_Lock);
// initialize service group list
InitializeListHead(&m_ServiceSinkHead);
}
@ -119,15 +124,34 @@ CServiceGroup::RequestService()
DPRINT("CServiceGroup::RequestService() Dpc at Level %u\n", KeGetCurrentIrql());
if (KeGetCurrentIrql() > DISPATCH_LEVEL)
if (m_TimerInitialized)
{
KeInsertQueueDpc(&m_Dpc, NULL, NULL);
return;
}
LARGE_INTEGER DueTime;
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
KeInsertQueueDpc(&m_Dpc, NULL, NULL);
KeLowerIrql(OldIrql);
// no due time
DueTime.QuadPart = 0LL;
// delayed service requested
KeSetTimer(&m_Timer, DueTime, &m_Dpc);
}
else
{
// check curent irql
if (KeGetCurrentIrql() > DISPATCH_LEVEL)
{
//insert dpc to queue
KeInsertQueueDpc(&m_Dpc, NULL, NULL);
}
else
{
// raise irql to dispatch level to make dpc fire immediately
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
// insert dpc to queue
KeInsertQueueDpc(&m_Dpc, NULL, NULL);
// lower irql to old level
KeLowerIrql(OldIrql);
}
}
}
//---------------------------------------------------------------
@ -140,18 +164,33 @@ CServiceGroup::AddMember(
IN PSERVICESINK pServiceSink)
{
PGROUP_ENTRY Entry;
KIRQL OldLevel;
// sanity check
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
// allocate service sink entry
Entry = (PGROUP_ENTRY)AllocateItem(NonPagedPool, sizeof(GROUP_ENTRY), TAG_PORTCLASS);
if (!Entry)
{
// out of memory
return STATUS_INSUFFICIENT_RESOURCES;
}
// initialize service sink entry
Entry->pServiceSink = pServiceSink;
// increment reference count
pServiceSink->AddRef();
// acquire service group list lock
KeAcquireSpinLock(&m_Lock, &OldLevel);
// insert into service sink list
InsertTailList(&m_ServiceSinkHead, &Entry->Entry);
// release service group list lock
KeReleaseSpinLock(&m_Lock, OldLevel);
return STATUS_SUCCESS;
}
@ -162,23 +201,45 @@ CServiceGroup::RemoveMember(
{
PLIST_ENTRY CurEntry;
PGROUP_ENTRY Entry;
KIRQL OldLevel;
// sanity check
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
// acquire service group list lock
KeAcquireSpinLock(&m_Lock, &OldLevel);
// grab first entry
CurEntry = m_ServiceSinkHead.Flink;
// loop list until the passed entry is found
while (CurEntry != &m_ServiceSinkHead)
{
// grab entry
Entry = CONTAINING_RECORD(CurEntry, GROUP_ENTRY, Entry);
// check if it matches the passed entry
if (Entry->pServiceSink == pServiceSink)
{
// remove entry from list
RemoveEntryList(&Entry->Entry);
// release service sink reference
pServiceSink->Release();
// free service sink entry
FreeItem(Entry, TAG_PORTCLASS);
return;
// leave loop
break;
}
// move to next entry
CurEntry = CurEntry->Flink;
}
// release service group list lock
KeReleaseSpinLock(&m_Lock, OldLevel);
}
VOID
@ -194,73 +255,40 @@ IServiceGroupDpc(
PGROUP_ENTRY Entry;
CServiceGroup * This = (CServiceGroup*)DeferredContext;
// acquire service group list lock
KeAcquireSpinLockAtDpcLevel(&This->m_Lock);
// grab first entry
CurEntry = This->m_ServiceSinkHead.Flink;
// loop the list and call the attached service sink/group
while (CurEntry != &This->m_ServiceSinkHead)
{
//grab current entry
Entry = (PGROUP_ENTRY)CONTAINING_RECORD(CurEntry, GROUP_ENTRY, Entry);
// call service sink/group
Entry->pServiceSink->RequestService();
// move to next entry
CurEntry = CurEntry->Flink;
}
// release service group list lock
KeReleaseSpinLockFromDpcLevel(&This->m_Lock);
}
#if 0
VOID
NTAPI
ServiceGroupThread(IN PVOID StartContext)
{
NTSTATUS Status;
KWAIT_BLOCK WaitBlockArray[2];
PVOID WaitObjects[2];
CServiceGroup * This = (CServiceGroup*)StartContext;
// Set thread state
InterlockedIncrement(&This->m_ThreadActive);
// Setup the wait objects
WaitObjects[0] = &m_Timer;
WaitObjects[1] = &m_Event;
do
{
// Wait on our objects
Status = KeWaitForMultipleObjects(2, WaitObjects, WaitAny, Executive, KernelMode, FALSE, NULL, WaitBlockArray);
switch(Status)
{
case STATUS_WAIT_0:
IServiceGroupDpc(&This->m_Dpc, (PVOID)This, NULL, NULL);
break;
case STATUS_WAIT_1:
PsTerminateSystemThread(STATUS_SUCCESS);
return;
}
}while(TRUE);
}
#endif
VOID
NTAPI
CServiceGroup::SupportDelayedService()
{
//NTSTATUS Status;
//HANDLE ThreadHandle;
PC_ASSERT_IRQL(DISPATCH_LEVEL);
if (m_Initialized)
return;
// initialize the timer
KeInitializeTimer(&m_Timer);
KeInitializeTimerEx(&m_Timer, NotificationTimer);
#if 0
Status = PsCreateSystemThread(&ThreadHandle, THREAD_ALL_ACCESS, NULL, 0, NULL, ServiceGroupThread, (PVOID)This);
if (NT_SUCCESS(Status))
{
ZwClose(ThreadHandle);
m_Initialized = TRUE;
}
#endif
// use the timer to perform service requests
m_TimerInitialized = TRUE;
}
VOID
@ -270,17 +298,14 @@ CServiceGroup::RequestDelayedService(
{
LARGE_INTEGER DueTime;
// sanity check
PC_ASSERT_IRQL(DISPATCH_LEVEL);
PC_ASSERT(m_TimerInitialized);
DueTime.QuadPart = ullDelay;
if (m_Initialized)
{
if (KeGetCurrentIrql() <= DISPATCH_LEVEL)
KeSetTimer(&m_Timer, DueTime, &m_Dpc);
else
KeInsertQueueDpc(&m_Dpc, NULL, NULL);
}
// set the timer
KeSetTimer(&m_Timer, DueTime, &m_Dpc);
}
VOID
@ -288,11 +313,10 @@ NTAPI
CServiceGroup::CancelDelayedService()
{
PC_ASSERT_IRQL(DISPATCH_LEVEL);
PC_ASSERT(m_TimerInitialized);
if (m_Initialized)
{
KeCancelTimer(&m_Timer);
}
// cancel the timer
KeCancelTimer(&m_Timer);
}
NTSTATUS
@ -303,19 +327,31 @@ PcNewServiceGroup(
{
CServiceGroup * This;
NTSTATUS Status;
DPRINT("PcNewServiceGroup entered\n");
This = new(NonPagedPool, TAG_PORTCLASS)CServiceGroup(OuterUnknown);
if (!This)
return STATUS_INSUFFICIENT_RESOURCES;
//FIXME support aggregation
PC_ASSERT(OuterUnknown == NULL);
// allocate a service group object
This = new(NonPagedPool, TAG_PORTCLASS)CServiceGroup(OuterUnknown);
if (!This)
{
// out of memory
return STATUS_INSUFFICIENT_RESOURCES;
}
// request IServiceSink interface
Status = This->QueryInterface(IID_IServiceSink, (PVOID*)OutServiceGroup);
if (!NT_SUCCESS(Status))
{
// failed to acquire service sink interface
delete This;
return Status;
}
// done
return Status;
}

View file

@ -97,7 +97,6 @@ HandleSysAudioFilterPinProperties(
NTSTATUS Status;
PKSAUDIO_DEVICE_ENTRY Entry;
ULONG BytesReturned;
PKSP_PIN Pin;
// in order to access pin properties of a sysaudio device
// the caller must provide a KSP_PIN struct, where
@ -110,8 +109,6 @@ HandleSysAudioFilterPinProperties(
return SetIrpIoStatus(Irp, STATUS_BUFFER_TOO_SMALL, sizeof(KSPROPERTY) + sizeof(ULONG));
}
Pin = (PKSP_PIN)Property;
Entry = GetListEntry(&DeviceExtension->KsAudioDeviceList, ((KSP_PIN*)Property)->Reserved);
if (!Entry)
{
@ -119,64 +116,15 @@ HandleSysAudioFilterPinProperties(
return SetIrpIoStatus(Irp, STATUS_INVALID_PARAMETER, 0);
}
if (!Entry->Pins)
{
/* expected pins */
return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, 0);
}
if (Entry->PinDescriptorsCount <= Pin->PinId)
{
/* invalid pin id */
return SetIrpIoStatus(Irp, STATUS_INVALID_PARAMETER, 0);
}
if (Property->Id == KSPROPERTY_PIN_CTYPES)
{
if (IoStack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG))
{
/* too small buffer */
return SetIrpIoStatus(Irp, STATUS_BUFFER_TOO_SMALL, sizeof(ULONG));
}
/* store result */
*((PULONG)Irp->UserBuffer) = Entry->PinDescriptorsCount;
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(ULONG));
}
else if (Property->Id == KSPROPERTY_PIN_COMMUNICATION)
{
if (IoStack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(KSPIN_COMMUNICATION))
{
/* too small buffer */
return SetIrpIoStatus(Irp, STATUS_BUFFER_TOO_SMALL, sizeof(KSPIN_COMMUNICATION));
}
/* store result */
*((KSPIN_COMMUNICATION*)Irp->UserBuffer) = Entry->PinDescriptors[Pin->PinId].Communication;
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(KSPIN_COMMUNICATION));
}
else if (Property->Id == KSPROPERTY_PIN_DATAFLOW)
{
if (IoStack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(KSPIN_DATAFLOW))
{
/* too small buffer */
return SetIrpIoStatus(Irp, STATUS_BUFFER_TOO_SMALL, sizeof(KSPIN_DATAFLOW));
}
/* store result */
*((KSPIN_DATAFLOW*)Irp->UserBuffer) = Entry->PinDescriptors[Pin->PinId].DataFlow;
return SetIrpIoStatus(Irp, STATUS_SUCCESS, sizeof(KSPIN_DATAFLOW));
}
else
{
/* forward request to the filter implementing the property */
Status = KsSynchronousIoControlDevice(Entry->FileObject, KernelMode, IOCTL_KS_PROPERTY,
/* forward request to the filter implementing the property */
Status = KsSynchronousIoControlDevice(Entry->FileObject, KernelMode, IOCTL_KS_PROPERTY,
(PVOID)IoStack->Parameters.DeviceIoControl.Type3InputBuffer,
IoStack->Parameters.DeviceIoControl.InputBufferLength,
Irp->UserBuffer,
IoStack->Parameters.DeviceIoControl.OutputBufferLength,
&BytesReturned);
return SetIrpIoStatus(Irp, Status, BytesReturned);
}
return SetIrpIoStatus(Irp, Status, BytesReturned);
}
@ -328,7 +276,7 @@ GetPinInstanceCount(
PinRequest.Property.Set = KSPROPSETID_Pin;
PinRequest.Property.Flags = KSPROPERTY_TYPE_GET;
PinRequest.Property.Id = KSPROPERTY_PIN_CINSTANCES;
ASSERT(Entry->FileObject);
return KsSynchronousIoControlDevice(Entry->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&PinRequest, sizeof(KSP_PIN), (PVOID)PinInstances, sizeof(KSPIN_CINSTANCES), &BytesReturned);
}

View file

@ -14,139 +14,6 @@ const GUID KS_CATEGORY_AUDIO = {0x6994AD04L, 0x93EF, 0x11D0, {
const GUID KS_CATEGORY_TOPOLOGY = {0xDDA54A40, 0x1E4C, 0x11D1, {0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00}};
const GUID DMOCATEGORY_ACOUSTIC_ECHO_CANCEL = {0xBF963D80L, 0xC559, 0x11D0, {0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}};
NTSTATUS
BuildPinDescriptor(
IN PKSAUDIO_DEVICE_ENTRY DeviceEntry,
IN ULONG Count)
{
ULONG Index;
KSP_PIN PinRequest;
KSPIN_DATAFLOW DataFlow;
KSPIN_COMMUNICATION Communication;
ULONG NumWaveOutPin, NumWaveInPin;
NTSTATUS Status;
ULONG BytesReturned;
NumWaveInPin = 0;
NumWaveOutPin = 0;
for(Index = 0; Index < Count; Index++)
{
/* retrieve data flow */
PinRequest.PinId = Index;
PinRequest.Property.Set = KSPROPSETID_Pin;
PinRequest.Property.Flags = KSPROPERTY_TYPE_GET;
/* get dataflow direction */
PinRequest.Property.Id = KSPROPERTY_PIN_DATAFLOW;
Status = KsSynchronousIoControlDevice(DeviceEntry->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&PinRequest, sizeof(KSP_PIN), (PVOID)&DataFlow, sizeof(KSPIN_DATAFLOW), &BytesReturned);
if (NT_SUCCESS(Status))
{
DeviceEntry->PinDescriptors[Index].DataFlow = DataFlow;
}
/* get irp flow direction */
PinRequest.Property.Id = KSPROPERTY_PIN_COMMUNICATION;
Status = KsSynchronousIoControlDevice(DeviceEntry->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&PinRequest, sizeof(KSP_PIN), (PVOID)&Communication, sizeof(KSPIN_COMMUNICATION), &BytesReturned);
if (NT_SUCCESS(Status))
{
DeviceEntry->PinDescriptors[Index].Communication = Communication;
}
if (Communication == KSPIN_COMMUNICATION_SINK && DataFlow == KSPIN_DATAFLOW_IN)
NumWaveOutPin++;
if (Communication == KSPIN_COMMUNICATION_SINK && DataFlow == KSPIN_DATAFLOW_OUT)
NumWaveInPin++;
/* FIXME query for interface, dataformat etc */
}
DPRINT("Num Pins %u Num WaveIn Pins %u Name WaveOut Pins %u\n", DeviceEntry->PinDescriptorsCount, NumWaveInPin, NumWaveOutPin);
return STATUS_SUCCESS;
}
VOID
QueryFilterRoutine(
IN PKSAUDIO_DEVICE_ENTRY DeviceEntry)
{
KSPROPERTY PropertyRequest;
ULONG Count;
NTSTATUS Status;
ULONG BytesReturned;
DPRINT("Querying filter...\n");
PropertyRequest.Set = KSPROPSETID_Pin;
PropertyRequest.Flags = KSPROPERTY_TYPE_GET;
PropertyRequest.Id = KSPROPERTY_PIN_CTYPES;
/* query for num of pins */
Status = KsSynchronousIoControlDevice(DeviceEntry->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&PropertyRequest, sizeof(KSPROPERTY), (PVOID)&Count, sizeof(ULONG), &BytesReturned);
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to query number of pins Status %x\n", Status);
return;
}
if (!Count)
{
DPRINT1("Filter has no pins!\n");
return;
}
/* allocate pin descriptor array */
DeviceEntry->PinDescriptors = ExAllocatePool(NonPagedPool, Count * sizeof(KSPIN_DESCRIPTOR));
if (!DeviceEntry->PinDescriptors)
{
/* no memory */
return;
}
/* zero array pin descriptor array */
RtlZeroMemory(DeviceEntry->PinDescriptors, Count * sizeof(KSPIN_DESCRIPTOR));
/* build the device descriptor */
Status = BuildPinDescriptor(DeviceEntry, Count);
if (!NT_SUCCESS(Status))
return;
/* allocate pin array */
DeviceEntry->Pins = ExAllocatePool(NonPagedPool, Count * sizeof(PIN_INFO));
if (!DeviceEntry->Pins)
{
/* no memory */
DPRINT1("Failed to allocate memory Pins %u Block %x\n", Count, Count * sizeof(PIN_INFO));
return;
}
/* clear array */
RtlZeroMemory(DeviceEntry->Pins, sizeof(PIN_INFO) * Count);
DeviceEntry->PinDescriptorsCount = Count;
}
VOID
NTAPI
FilterPinWorkerRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PVOID Context)
{
PKSAUDIO_DEVICE_ENTRY DeviceEntry;
PFILTER_WORKER_CONTEXT Ctx = (PFILTER_WORKER_CONTEXT)Context;
DeviceEntry = Ctx->DeviceEntry;
QueryFilterRoutine(DeviceEntry);
/* free work item */
IoFreeWorkItem(Ctx->WorkItem);
/* free work item context */
ExFreePool(Ctx);
return;
}
NTSTATUS
OpenDevice(
IN PUNICODE_STRING DeviceName,
@ -199,8 +66,6 @@ InsertAudioDevice(
IN PUNICODE_STRING DeviceName)
{
NTSTATUS Status = STATUS_SUCCESS;
PFILTER_WORKER_CONTEXT Ctx = NULL;
PIO_WORKITEM WorkItem = NULL;
PSYSAUDIODEVEXT DeviceExtension;
PKSAUDIO_DEVICE_ENTRY DeviceEntry = NULL;
@ -215,24 +80,6 @@ InsertAudioDevice(
/* initialize audio device entry */
RtlZeroMemory(DeviceEntry, sizeof(KSAUDIO_DEVICE_ENTRY));
/* allocate filter ctx */
Ctx = ExAllocatePool(NonPagedPool, sizeof(FILTER_WORKER_CONTEXT));
if (!Ctx)
{
/* no memory */
Status = STATUS_INSUFFICIENT_RESOURCES;
goto cleanup;
}
/* allocate work item */
WorkItem = IoAllocateWorkItem(DeviceObject);
if (!WorkItem)
{
/* no memory */
Status = STATUS_INSUFFICIENT_RESOURCES;
goto cleanup;
}
/* set device name */
DeviceEntry->DeviceName.Length = 0;
DeviceEntry->DeviceName.MaximumLength = DeviceName->MaximumLength + 10 * sizeof(WCHAR);
@ -255,9 +102,6 @@ InsertAudioDevice(
goto cleanup;
}
Ctx->DeviceEntry = DeviceEntry;
Ctx->WorkItem = WorkItem;
/* fetch device extension */
DeviceExtension = (PSYSAUDIODEVEXT)DeviceObject->DeviceExtension;
/* insert new audio device */
@ -265,16 +109,9 @@ InsertAudioDevice(
InterlockedIncrement((PLONG)&DeviceExtension->NumberOfKsAudioDevices);
DPRINT("Successfully opened audio device %u Device %S\n", DeviceExtension->NumberOfKsAudioDevices, DeviceEntry->DeviceName.Buffer);
IoQueueWorkItem(WorkItem, FilterPinWorkerRoutine, DelayedWorkQueue, (PVOID)Ctx);
return Status;
cleanup:
if (Ctx)
ExFreePool(Ctx);
if (WorkItem)
IoFreeWorkItem(WorkItem);
if (DeviceEntry)
{
if (DeviceEntry->DeviceName.Buffer)

View file

@ -53,10 +53,10 @@ SysAudio_Shutdown(
/* close audio device handle */
ZwClose(DeviceEntry->Handle);
/* free device string */
RtlFreeUnicodeString(&DeviceEntry->DeviceName);
/* free pins */
ExFreePool(DeviceEntry->Pins);
/* free audio device entry */
ExFreePool(DeviceEntry);
}

View file

@ -354,7 +354,7 @@ InstantiatePins(
}
#endif
DeviceEntry->Pins[Connect->PinId].References = 0;
//DeviceEntry->Pins[Connect->PinId].References = 0;
/* initialize dispatch context */
DispatchContext->Handle = RealPinHandle;
@ -385,6 +385,44 @@ InstantiatePins(
return Status;
}
NTSTATUS
GetConnectRequest(
IN PIRP Irp,
OUT PKSPIN_CONNECT * Result)
{
PIO_STACK_LOCATION IoStack;
ULONG ObjectLength, ParametersLength;
PVOID Buffer;
/* get current irp stack */
IoStack = IoGetCurrentIrpStackLocation(Irp);
/* get object class length */
ObjectLength = (wcslen(KSSTRING_Pin) + 2) * sizeof(WCHAR);
/* check for minium length requirement */
if (ObjectLength + sizeof(KSPIN_CONNECT) > IoStack->FileObject->FileName.MaximumLength)
return STATUS_UNSUCCESSFUL;
/* extract parameters length */
ParametersLength = IoStack->FileObject->FileName.MaximumLength - ObjectLength;
/* allocate buffer */
Buffer = ExAllocatePool(NonPagedPool, ParametersLength);
if (!Buffer)
return STATUS_INSUFFICIENT_RESOURCES;
/* copy parameters */
RtlMoveMemory(Buffer, &IoStack->FileObject->FileName.Buffer[ObjectLength / sizeof(WCHAR)], ParametersLength);
/* store result */
*Result = (PKSPIN_CONNECT)Buffer;
return STATUS_SUCCESS;
}
NTSTATUS
NTAPI
DispatchCreateSysAudioPin(
@ -394,7 +432,7 @@ DispatchCreateSysAudioPin(
NTSTATUS Status = STATUS_SUCCESS;
PIO_STACK_LOCATION IoStack;
PKSAUDIO_DEVICE_ENTRY DeviceEntry;
PKSPIN_CONNECT Connect = NULL;
PKSPIN_CONNECT Connect;
PDISPATCH_CONTEXT DispatchContext;
DPRINT("DispatchCreateSysAudioPin entered\n");
@ -410,9 +448,6 @@ DispatchCreateSysAudioPin(
/* get current attached virtual device */
DeviceEntry = (PKSAUDIO_DEVICE_ENTRY)IoStack->FileObject->RelatedFileObject->FsContext;
/* now validate pin connect request */
Status = KsValidateConnectRequest(Irp, DeviceEntry->PinDescriptorsCount, DeviceEntry->PinDescriptors, &Connect);
/* check for success */
if (!NT_SUCCESS(Status))
{
@ -422,6 +457,19 @@ DispatchCreateSysAudioPin(
return Status;
}
/* get connect details */
Status = GetConnectRequest(Irp, &Connect);
/* check for success */
if (!NT_SUCCESS(Status))
{
/* failed to obtain connect details */
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status;
}
/* allocate dispatch context */
DispatchContext = ExAllocatePool(NonPagedPool, sizeof(DISPATCH_CONTEXT));
if (!DispatchContext)

View file

@ -24,9 +24,7 @@ typedef struct
HANDLE Handle; // handle to audio device
PFILE_OBJECT FileObject; // file objecto to audio device
PIN_INFO * Pins; // array of PIN_INFO
ULONG PinDescriptorsCount; // number of pin descriptors
KSPIN_DESCRIPTOR *PinDescriptors; // pin descriptors array
//PIN_INFO * Pins; // array of PIN_INFO
}KSAUDIO_DEVICE_ENTRY, *PKSAUDIO_DEVICE_ENTRY;
typedef struct
@ -62,20 +60,6 @@ typedef struct
HANDLE hMixerPin; // handle to mixer pin
}DISPATCH_CONTEXT, *PDISPATCH_CONTEXT;
typedef struct
{
PIO_WORKITEM WorkItem;
PKSAUDIO_DEVICE_ENTRY DeviceEntry;
}FILTER_WORKER_CONTEXT, *PFILTER_WORKER_CONTEXT;
typedef struct
{
PIRP Irp;
IO_STATUS_BLOCK StatusBlock;
}COMPLETION_CONTEXT, *PCOMPLETION_CONTEXT;
NTSTATUS
SysAudioAllocateDeviceHeader(
IN SYSAUDIODEVEXT *DeviceExtension);

View file

@ -51,6 +51,7 @@
@ stdcall HalInitializeProcessor(long ptr)
@ stdcall HalMakeBeep(long)
@ stdcall HalProcessorIdle()
@ stdcall HalPutDmaAdapter(ptr)
@ stdcall HalQueryDisplayParameters(ptr ptr ptr ptr)
@ stdcall HalQueryRealTimeClock(ptr)
@ stdcall HalReadDmaCounter(ptr)

View file

@ -360,10 +360,10 @@ HalpGetPCIData(IN PBUS_HANDLER BusHandler,
(1 == BusHandler->BusNumber && 0 != Slot.u.bits.DeviceNumber))
{
DPRINT("Blacklisted PCI slot\n");
if (0 == Offset && 2 <= Length)
if (0 == Offset && sizeof(USHORT) <= Length)
{
*(PUSHORT)Buffer = PCI_INVALID_VENDORID;
return 2;
return sizeof(USHORT);
}
return 0;
}
@ -700,7 +700,6 @@ HaliPciInterfaceReadConfig(IN PBUS_HANDLER RootBusHandler,
IN ULONG Length)
{
BUS_HANDLER BusHandler;
PPCI_COMMON_CONFIG PciData = (PPCI_COMMON_CONFIG)Buffer;
/* Setup fake PCI Bus handler */
RtlCopyMemory(&BusHandler, &HalpFakePciBusHandler, sizeof(BUS_HANDLER));
@ -709,21 +708,6 @@ HaliPciInterfaceReadConfig(IN PBUS_HANDLER RootBusHandler,
/* Read configuration data */
HalpReadPCIConfig(&BusHandler, SlotNumber, Buffer, Offset, Length);
/* Check if caller only wanted at least Vendor ID */
if (Length >= 2)
{
/* Validate it */
if (PciData->VendorID != PCI_INVALID_VENDORID)
{
/* Check if this is the new maximum bus number */
if (HalpMaxPciBus < BusHandler.BusNumber)
{
/* Set it */
HalpMaxPciBus = BusHandler.BusNumber;
}
}
}
/* Return length */
return Length;
}
@ -970,6 +954,7 @@ HalpInitializePciStubs(VOID)
ULONG i;
PCI_SLOT_NUMBER j;
ULONG VendorId = 0;
ULONG MaxPciBusNumber;
/* Query registry information */
PciRegistryInfo = HalpQueryPciRegistryInfo();
@ -977,11 +962,19 @@ HalpInitializePciStubs(VOID)
{
/* Assume type 1 */
PciType = 1;
/* Force a manual bus scan later */
MaxPciBusNumber = MAXULONG;
}
else
{
/* Get the type and free the info structure */
/* Get the PCI type */
PciType = PciRegistryInfo->HardwareMechanism & 0xF;
/* Get MaxPciBusNumber and make it 0-based */
MaxPciBusNumber = PciRegistryInfo->NoBuses - 1;
/* Free the info structure */
ExFreePool(PciRegistryInfo);
}
@ -1007,7 +1000,7 @@ HalpInitializePciStubs(VOID)
/* Type 2 PCI Bus */
case 2:
/* Copy the Type 1 handler data */
/* Copy the Type 2 handler data */
RtlCopyMemory(&PCIConfigHandler,
&PCIConfigHandlerType2,
sizeof (PCIConfigHandler));
@ -1027,31 +1020,44 @@ HalpInitializePciStubs(VOID)
DbgPrint("HAL: Unknown PCI type\n");
}
/* Loop all possible buses */
for (i = 0; i < 256; i++)
/* Run a forced bus scan if needed */
if (MaxPciBusNumber == MAXULONG)
{
/* Loop all devices */
for (j.u.AsULONG = 0; j.u.AsULONG < 32; j.u.AsULONG++)
/* Initialize the max bus number to 0xFF */
HalpMaxPciBus = 0xFF;
/* Initialize the counter */
MaxPciBusNumber = 0;
/* Loop all possible buses */
for (i = 0; i < HalpMaxPciBus; i++)
{
/* Query the interface */
if (HaliPciInterfaceReadConfig(NULL,
i,
j,
&VendorId,
0,
sizeof(ULONG)))
/* Loop all devices */
for (j.u.AsULONG = 0; j.u.AsULONG < BusData->MaxDevice; j.u.AsULONG++)
{
/* Validate the vendor ID */
if ((USHORT)VendorId != PCI_INVALID_VENDORID)
/* Query the interface */
if (HaliPciInterfaceReadConfig(NULL,
i,
j,
&VendorId,
0,
sizeof(ULONG)))
{
/* Set this as the maximum ID */
HalpMaxPciBus = i;
break;
/* Validate the vendor ID */
if ((USHORT)VendorId != PCI_INVALID_VENDORID)
{
/* Set this as the maximum ID */
MaxPciBusNumber = i;
break;
}
}
}
}
}
/* Set the real max bus number */
HalpMaxPciBus = MaxPciBusNumber;
/* We're done */
HalpPCIConfigInitialized = TRUE;
}

View file

@ -472,6 +472,11 @@ typedef struct
DWORD ProcessGroup;
} CSRSS_GENERATE_CTRL_EVENT, *PCSRSS_GENERATE_CTRL_EVENT;
typedef struct
{
HANDLE OutputHandle;
COORD Size;
} CSRSS_SET_SCREEN_BUFFER_SIZE, *PCSRSS_SET_SCREEN_BUFFER_SIZE;
#define CSR_API_MESSAGE_HEADER_SIZE(Type) (FIELD_OFFSET(CSR_API_MESSAGE, Data) + sizeof(Type))
@ -551,6 +556,7 @@ typedef struct
#define GET_CONSOLE_ALIASES_EXES_LENGTH (0x3D)
#define GENERATE_CTRL_EVENT (0x3E)
#define CREATE_THREAD (0x3F)
#define SET_SCREEN_BUFFER_SIZE (0x40)
/* Keep in sync with definition below. */
#define CSRSS_HEADER_SIZE (sizeof(PORT_MESSAGE) + sizeof(ULONG) + sizeof(NTSTATUS))
@ -624,6 +630,7 @@ typedef struct _CSR_API_MESSAGE
CSRSS_GET_CONSOLE_ALIASES_EXES GetConsoleAliasesExes;
CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH GetConsoleAliasesExesLength;
CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent;
CSRSS_SET_SCREEN_BUFFER_SIZE SetScreenBufferSize;
} Data;
} CSR_API_MESSAGE, *PCSR_API_MESSAGE;

View file

@ -189,6 +189,7 @@ InfHostOpenFile(PHINF InfHandle,
if (FileLength != fread(FileBuffer, (size_t)1, (size_t)FileLength, File))
{
DPRINT1("fread() failed (errno %d)\n", errno);
FREE(FileBuffer);
fclose(File);
return -1;
}

View file

@ -36,7 +36,7 @@ RtlMultiByteToUnicodeN(
*ResultSize = Size * sizeof(WCHAR);
WideString = (PUCHAR)UnicodeString;
for (i = 0; i <= Size; i++)
for (i = 0; i < Size; i++)
{
WideString[2 * i + 0] = (UCHAR)MbString[i];
WideString[2 * i + 1] = 0;

Binary file not shown.

Binary file not shown.

View file

@ -1612,7 +1612,7 @@ Phase1InitializationDiscard(IN PVOID Context)
else if (!strncmp(SafeBoot, "NETWORK", 7))
{
/* With Networking */
InitSafeBootMode = 1;
InitSafeBootMode = 2;
SafeBoot += 7;
MessageCode = BOOTING_IN_SAFEMODE_NETWORK;
}

View file

@ -14,8 +14,10 @@ PULONG MmGetPageDirectory(VOID);
#define PAGETABLE_MAP (0xc0000000)
#define PAGEDIRECTORY_MAP (0xc0000000 + (PAGETABLE_MAP / (1024)))
/* FIXME: These are different for PAE */
#define PTE_BASE 0xC0000000
#define PDE_BASE 0xC0300000
#define PDE_TOP 0xC0300FFF
#define PTE_TOP 0xC03FFFFF
#define HYPER_SPACE 0xC0400000

View file

@ -166,8 +166,8 @@ KdInitSystem(ULONG BootPhase,
/* XXX Check for settings that we support */
if (strstr(CommandLine, "BREAK")) KdpEarlyBreak = TRUE;
if (strstr(CommandLine, "NODEBUG")) KdDebuggerEnabled = FALSE;
if (strstr(CommandLine, "CRASHDEBUG")) KdDebuggerEnabled = FALSE;
if (strstr(CommandLine, "DEBUG"))
else if (strstr(CommandLine, "CRASHDEBUG")) KdDebuggerEnabled = FALSE;
else if (strstr(CommandLine, "DEBUG"))
{
/* Enable on the serial port */
KdDebuggerEnabled = TRUE;

View file

@ -1697,7 +1697,7 @@ KdbpGetCommandLineSettings(
while (p1 && (p2 = strchr(p1, ' ')))
{
p2++;
p2 += 2;
if (!_strnicmp(p2, "KDSERIAL", 8))
{

View file

@ -1206,7 +1206,7 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame)
(PVOID)Cr2,
TrapFrame->SegCs & MODE_MASK,
TrapFrame);
if (Status == STATUS_SUCCESS) KiEoiHelper(TrapFrame);
if (NT_SUCCESS(Status)) KiEoiHelper(TrapFrame);
/* Check for S-LIST fault */
if (TrapFrame->Eip == (ULONG_PTR)ExpInterlockedPopEntrySListFault)

View file

@ -41,7 +41,7 @@ ULONG MmSessionPoolSize;
ULONG MmSessionImageSize;
PVOID MiSystemViewStart;
ULONG MmSystemViewSize;
PFN_NUMBER MmSystemPageDirectory;
PFN_NUMBER MmSystemPageDirectory[PD_COUNT];
PMMPTE MmSystemPagePtes;
ULONG MmNumberOfSystemPtes;
ULONG MxPfnAllocation;

View file

@ -18,6 +18,185 @@
/* PRIVATE FUNCTIONS **********************************************************/
PFN_NUMBER
NTAPI
MiFindContiguousPages(IN PFN_NUMBER LowestPfn,
IN PFN_NUMBER HighestPfn,
IN PFN_NUMBER BoundaryPfn,
IN PFN_NUMBER SizeInPages,
IN MEMORY_CACHING_TYPE CacheType)
{
PFN_NUMBER Page, PageCount, LastPage, Length, BoundaryMask;
ULONG i = 0;
PMMPFN Pfn1, EndPfn;
KIRQL OldIrql;
PAGED_CODE ();
ASSERT(SizeInPages != 0);
//
// Convert the boundary PFN into an alignment mask
//
BoundaryMask = ~(BoundaryPfn - 1);
//
// Loop all the physical memory blocks
//
do
{
//
// Capture the base page and length of this memory block
//
Page = MmPhysicalMemoryBlock->Run[i].BasePage;
PageCount = MmPhysicalMemoryBlock->Run[i].PageCount;
//
// Check how far this memory block will go
//
LastPage = Page + PageCount;
//
// Trim it down to only the PFNs we're actually interested in
//
if ((LastPage - 1) > HighestPfn) LastPage = HighestPfn + 1;
if (Page < LowestPfn) Page = LowestPfn;
//
// Skip this run if it's empty or fails to contain all the pages we need
//
if (!(PageCount) || ((Page + SizeInPages) > LastPage)) continue;
//
// Now scan all the relevant PFNs in this run
//
Length = 0;
for (Pfn1 = MiGetPfnEntry(Page); Page < LastPage; Page++, Pfn1++)
{
//
// If this PFN is in use, ignore it
//
if (MiIsPfnInUse(Pfn1)) continue;
//
// If we haven't chosen a start PFN yet and the caller specified an
// alignment, make sure the page matches the alignment restriction
//
if ((!(Length) && (BoundaryPfn)) &&
(((Page ^ (Page + SizeInPages - 1)) & BoundaryMask)))
{
//
// It does not, so bail out
//
continue;
}
//
// Increase the number of valid pages, and check if we have enough
//
if (++Length == SizeInPages)
{
//
// It appears we've amassed enough legitimate pages, rollback
//
Pfn1 -= (Length - 1);
Page -= (Length - 1);
//
// Acquire the PFN lock
//
OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
do
{
//
// Things might've changed for us. Is the page still free?
//
if (MiIsPfnInUse(Pfn1)) break;
//
// So far so good. Is this the last confirmed valid page?
//
if (!--Length)
{
//
// Sanity check that we didn't go out of bounds
//
ASSERT(i != MmPhysicalMemoryBlock->NumberOfRuns);
//
// Loop until all PFN entries have been processed
//
EndPfn = Pfn1 - SizeInPages + 1;
do
{
//
// This PFN is now a used page, set it up
//
MiUnlinkFreeOrZeroedPage(Pfn1);
Pfn1->u3.e2.ReferenceCount = 1;
Pfn1->u2.ShareCount = 1;
Pfn1->u3.e1.PageLocation = ActiveAndValid;
Pfn1->u3.e1.StartOfAllocation = 0;
Pfn1->u3.e1.EndOfAllocation = 0;
Pfn1->u3.e1.PrototypePte = 0;
Pfn1->u4.VerifierAllocation = 0;
Pfn1->PteAddress = (PVOID)0xBAADF00D;
//
// Check if this is the last PFN, otherwise go on
//
if (Pfn1 == EndPfn) break;
Pfn1--;
} while (TRUE);
//
// Mark the first and last PFN so we can find them later
//
Pfn1->u3.e1.StartOfAllocation = 1;
(Pfn1 + SizeInPages - 1)->u3.e1.EndOfAllocation = 1;
//
// Now it's safe to let go of the PFN lock
//
KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
//
// Quick sanity check that the last PFN is consistent
//
EndPfn = Pfn1 + SizeInPages;
ASSERT(EndPfn == MiGetPfnEntry(Page + 1));
//
// Compute the first page, and make sure it's consistent
//
Page -= SizeInPages - 1;
ASSERT(Pfn1 == MiGetPfnEntry(Page));
ASSERT(Page != 0);
return Page;
}
//
// Keep going. The purpose of this loop is to reconfirm that
// after acquiring the PFN lock these pages are still usable
//
Pfn1++;
Page++;
} while (TRUE);
//
// If we got here, something changed while we hadn't acquired
// the PFN lock yet, so we'll have to restart
//
KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
Length = 0;
}
}
} while (++i != MmPhysicalMemoryBlock->NumberOfRuns);
//
// And if we get here, it means no suitable physical memory runs were found
//
return 0;
}
PVOID
NTAPI
MiCheckForContiguousMemory(IN PVOID BaseAddress,
@ -143,7 +322,10 @@ MiFindContiguousMemory(IN PFN_NUMBER LowestPfn,
{
PFN_NUMBER Page;
PHYSICAL_ADDRESS PhysicalAddress;
PAGED_CODE ();
PMMPFN Pfn1, EndPfn;
PMMPTE PointerPte;
PVOID BaseAddress;
PAGED_CODE();
ASSERT(SizeInPages != 0);
//
@ -160,7 +342,22 @@ MiFindContiguousMemory(IN PFN_NUMBER LowestPfn,
// We'll just piggyback on the I/O memory mapper
//
PhysicalAddress.QuadPart = Page << PAGE_SHIFT;
return MmMapIoSpace(PhysicalAddress, SizeInPages << PAGE_SHIFT, CacheType);
BaseAddress = MmMapIoSpace(PhysicalAddress, SizeInPages << PAGE_SHIFT, CacheType);
ASSERT(BaseAddress);
/* Loop the PFN entries */
Pfn1 = MiGetPfnEntry(Page);
EndPfn = Pfn1 + SizeInPages;
PointerPte = MiAddressToPte(BaseAddress);
do
{
/* Write the PTE address */
Pfn1->PteAddress = PointerPte++;
Pfn1->u4.PteFrame = PFN_FROM_PTE(MiAddressToPte(PointerPte));
} while (Pfn1++ < EndPfn);
/* Return the address */
return BaseAddress;
}
PVOID
@ -249,6 +446,7 @@ MiFreeContiguousMemory(IN PVOID BaseAddress)
KIRQL OldIrql;
PFN_NUMBER PageFrameIndex, LastPage, PageCount;
PMMPFN Pfn1, StartPfn;
PMMPTE PointerPte;
PAGED_CODE();
//
@ -267,10 +465,9 @@ MiFreeContiguousMemory(IN PVOID BaseAddress)
return;
}
//
// Otherwise, get the PTE and page number for the allocation
//
PageFrameIndex = PFN_FROM_PTE(MiAddressToPte(BaseAddress));
/* Get the PTE and frame number for the allocation*/
PointerPte = MiAddressToPte(BaseAddress);
PageFrameIndex = PFN_FROM_PTE(PointerPte);
//
// Now get the PFN entry for this, and make sure it's the correct one
@ -281,11 +478,11 @@ MiFreeContiguousMemory(IN PVOID BaseAddress)
//
// This probably means you did a free on an address that was in between
//
KeBugCheckEx (BAD_POOL_CALLER,
0x60,
(ULONG_PTR)BaseAddress,
0,
0);
KeBugCheckEx(BAD_POOL_CALLER,
0x60,
(ULONG_PTR)BaseAddress,
0,
0);
}
//
@ -294,16 +491,21 @@ MiFreeContiguousMemory(IN PVOID BaseAddress)
StartPfn = Pfn1;
Pfn1->u3.e1.StartOfAllocation = 0;
//
// Look the PFNs
//
/* Loop the PFNs until we find the one that marks the end of the allocation */
do
{
//
// Until we find the one that marks the end of the allocation
//
/* Make sure these are the pages we setup in the allocation routine */
ASSERT(Pfn1->u3.e2.ReferenceCount == 1);
ASSERT(Pfn1->u2.ShareCount == 1);
ASSERT(Pfn1->PteAddress == PointerPte);
ASSERT(Pfn1->u3.e1.PageLocation == ActiveAndValid);
ASSERT(Pfn1->u4.VerifierAllocation == 0);
ASSERT(Pfn1->u3.e1.PrototypePte == 0);
/* Keep going for assertions */
PointerPte++;
} while (Pfn1++->u3.e1.EndOfAllocation == 0);
//
// Found it, unmark it
//
@ -328,14 +530,14 @@ MiFreeContiguousMemory(IN PVOID BaseAddress)
//
// Loop all the pages
//
LastPage = PageFrameIndex + PageCount;
LastPage = PageFrameIndex + PageCount;
do
{
//
// Free each one, and move on
//
MmReleasePageMemoryConsumer(MC_NPPOOL, PageFrameIndex);
} while (++PageFrameIndex < LastPage);
MmReleasePageMemoryConsumer(MC_NPPOOL, PageFrameIndex++);
} while (PageFrameIndex < LastPage);
//
// Release the PFN lock

View file

@ -151,6 +151,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
MMPTE TempPde, TempPte;
PVOID NonPagedPoolExpansionVa;
ULONG OldCount;
KIRQL OldIrql;
/* Check for kernel stack size that's too big */
if (MmLargeStackSize > (KERNEL_LARGE_STACK_SIZE / _1KB))
@ -338,7 +339,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
MmNonPagedSystemStart = (PVOID)((ULONG_PTR)MmNonPagedPoolStart -
(MmNumberOfSystemPtes + 1) * PAGE_SIZE);
MmNonPagedSystemStart = (PVOID)((ULONG_PTR)MmNonPagedSystemStart &
~((4 * 1024 * 1024) - 1));
~(PDE_MAPPED_VA - 1));
//
// Don't let it go below the minimum
@ -386,7 +387,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
//
MmPfnDatabase[0] = (PVOID)0xB0000000;
MmPfnDatabase[1] = &MmPfnDatabase[0][MmHighestPhysicalPage];
ASSERT(((ULONG_PTR)MmPfnDatabase[0] & ((4 * 1024 * 1024) - 1)) == 0);
ASSERT(((ULONG_PTR)MmPfnDatabase[0] & (PDE_MAPPED_VA - 1)) == 0);
//
// Non paged pool comes after the PFN database
@ -541,21 +542,26 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
//
MiInitializeSystemPtes(PointerPte, MmNumberOfSystemPtes, SystemPteSpace);
//
// Get the PDE For hyperspace
//
/* Get the PDE For hyperspace */
StartPde = MiAddressToPde(HYPER_SPACE);
//
// Allocate a page for it and create it
//
PageFrameIndex = MmAllocPage(MC_SYSTEM);
/* Lock PFN database */
OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
/* Allocate a page for hyperspace and create it */
PageFrameIndex = MiRemoveAnyPage(0);
TempPde.u.Hard.PageFrameNumber = PageFrameIndex;
TempPde.u.Hard.Global = FALSE; // Hyperspace is local!
ASSERT(StartPde->u.Hard.Valid == 0);
ASSERT(TempPde.u.Hard.Valid == 1);
*StartPde = TempPde;
/* Flush the TLB */
KeFlushCurrentTb();
/* Release the lock */
KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
//
// Zero out the page table now
//

View file

@ -42,7 +42,7 @@
#define _1KB (1024)
#define _1MB (1024 * _1KB)
/* Are mapped by a PDE */
/* Area mapped by a PDE */
#define PDE_MAPPED_VA (PTE_COUNT * PAGE_SIZE)
/* Size of a PDE directory, and size of a page table */
@ -89,6 +89,36 @@
#define MM_DECOMMIT 0x10
#define MM_NOACCESS (MM_DECOMMIT | MM_NOCACHE)
//
// Assertions for session images, addresses, and PTEs
//
#define MI_IS_SESSION_IMAGE_ADDRESS(Address) \
(((Address) >= MiSessionImageStart) && ((Address) < MiSessionImageEnd))
#define MI_IS_SESSION_ADDRESS(Address) \
(((Address) >= MmSessionBase) && ((Address) < MiSessionSpaceEnd))
#define MI_IS_SESSION_PTE(Pte) \
((((PMMPTE)Pte) >= MiSessionBasePte) && (((PMMPTE)Pte) < MiSessionLastPte))
//
// Corresponds to MMPTE_SOFTWARE.Protection
//
#ifdef _M_IX86
#define MM_PTE_SOFTWARE_PROTECTION_BITS 5
#elif _M_ARM
#define MM_PTE_SOFTWARE_PROTECTION_BITS 5
#elif _M_AMD64
#define MM_PTE_SOFTWARE_PROTECTION_BITS 5
#else
#error Define these please!
#endif
//
// Creates a software PTE with the given protection
//
#define MI_MAKE_SOFTWARE_PTE(p, x) ((p)->u.Long = (x << MM_PTE_SOFTWARE_PROTECTION_BITS))
//
// Special values for LoadedImports
//
@ -101,6 +131,11 @@
//
#define LIST_HEAD 0xFFFFFFFF
//
// Special IRQL value (found in assertions)
//
#define MM_NOIRQL (KIRQL)0xFFFFFFFF
//
// FIXFIX: These should go in ex.h after the pool merge
//
@ -266,6 +301,10 @@ extern PVOID MiSystemViewStart;
extern ULONG MmSystemViewSize;
extern PVOID MmSessionBase;
extern PVOID MiSessionSpaceEnd;
extern PMMPTE MiSessionImagePteStart;
extern PMMPTE MiSessionImagePteEnd;
extern PMMPTE MiSessionBasePte;
extern PMMPTE MiSessionLastPte;
extern ULONG MmSizeOfPagedPoolInBytes;
extern PMMPTE MmSystemPagePtes;
extern PVOID MmSystemCacheStart;
@ -309,16 +348,17 @@ extern ULONG MmTotalFreeSystemPtes[MaximumPtePoolTypes];
extern PFN_NUMBER MmTotalSystemDriverPages;
extern PVOID MiSessionImageStart;
extern PVOID MiSessionImageEnd;
extern PMMPTE MiHighestUserPte;
extern PMMPDE MiHighestUserPde;
extern PFN_NUMBER MmSystemPageDirectory[PD_COUNT];
#define MI_PFN_TO_PFNENTRY(x) (&MmPfnDatabase[1][x])
#define MI_PFNENTRY_TO_PFN(x) (x - MmPfnDatabase[1])
#define MI_IS_SESSION_IMAGE_ADDRESS(Address) \
(((Address) >= MiSessionImageStart) && ((Address) < MiSessionImageEnd))
#define MI_IS_SESSION_ADDRESS(Address) \
(((Address) >= MmSessionBase) && ((Address) < MiSessionSpaceEnd))
//
// Returns if the page is physically resident (ie: a large page)
// FIXFIX: CISC/x86 only?
//
FORCEINLINE
BOOLEAN
MI_IS_PHYSICAL_ADDRESS(IN PVOID Address)
@ -409,6 +449,12 @@ MmArmAccessFault(
IN PVOID TrapInformation
);
NTSTATUS
FASTCALL
MiCheckPdeForPagedPool(
IN PVOID Address
);
VOID
NTAPI
MiInitializeNonPagedPool(
@ -532,6 +578,18 @@ MiRemoveHeadList(
IN PMMPFNLIST ListHead
);
PFN_NUMBER
NTAPI
MiAllocatePfn(
IN PMMPTE PointerPte,
IN ULONG Protection
);
PFN_NUMBER
NTAPI
MiRemoveAnyPage(
IN ULONG Color
);
VOID
NTAPI
@ -563,4 +621,10 @@ MiSyncCachedRanges(
VOID
);
BOOLEAN
NTAPI
MiIsPfnInUse(
IN PMMPFN Pfn1
);
/* EOF */

View file

@ -136,6 +136,14 @@ ULONG MmSessionViewSize;
ULONG MmSessionPoolSize;
ULONG MmSessionImageSize;
/*
* These are the PTE addresses of the boundaries carved out above
*/
PMMPTE MiSessionImagePteStart;
PMMPTE MiSessionImagePteEnd;
PMMPTE MiSessionBasePte;
PMMPTE MiSessionLastPte;
//
// The system view space, on the other hand, is where sections that are memory
// mapped into "system space" end up.
@ -151,7 +159,7 @@ ULONG MmSystemViewSize;
// map paged pool PDEs into external processes when they fault on a paged pool
// address.
//
PFN_NUMBER MmSystemPageDirectory;
PFN_NUMBER MmSystemPageDirectory[PD_COUNT];
PMMPTE MmSystemPagePtes;
//
@ -217,6 +225,11 @@ ULONG MmUserProbeAddress;
PVOID MmHighestUserAddress;
PVOID MmSystemRangeStart;
/* And these store the respective highest PTE/PDE address */
PMMPTE MiHighestUserPte;
PMMPDE MiHighestUserPde;
/* These variables define the system cache address space */
PVOID MmSystemCacheStart;
PVOID MmSystemCacheEnd;
MMSUPPORT MmSystemCacheWs;
@ -1483,7 +1496,8 @@ MiBuildPagedPool(VOID)
// Get the page frame number for the system page directory
//
PointerPte = MiAddressToPte(PDE_BASE);
MmSystemPageDirectory = PFN_FROM_PTE(PointerPte);
ASSERT(PD_COUNT == 1);
MmSystemPageDirectory[0] = PFN_FROM_PTE(PointerPte);
//
// Allocate a system PTE which will hold a copy of the page directory
@ -1500,7 +1514,8 @@ MiBuildPagedPool(VOID)
// way).
//
TempPte = ValidKernelPte;
TempPte.u.Hard.PageFrameNumber = MmSystemPageDirectory;
ASSERT(PD_COUNT == 1);
TempPte.u.Hard.PageFrameNumber = MmSystemPageDirectory[0];
ASSERT(PointerPte->u.Hard.Valid == 0);
ASSERT(TempPte.u.Hard.Valid == 1);
*PointerPte = TempPte;
@ -1698,6 +1713,10 @@ MmArmInitSystem(IN ULONG Phase,
MmUserProbeAddress = (ULONG_PTR)MmSystemRangeStart - 0x10000;
MmHighestUserAddress = (PVOID)(MmUserProbeAddress - 1);
/* Highest PTE and PDE based on the addresses above */
MiHighestUserPte = MiAddressToPte(MmHighestUserAddress);
MiHighestUserPde = MiAddressToPde(MmHighestUserAddress);
//
// Get the size of the boot loader's image allocations and then round
// that region up to a PDE size, so that any PDEs we might create for
@ -1706,8 +1725,8 @@ MmArmInitSystem(IN ULONG Phase,
//
MmBootImageSize = KeLoaderBlock->Extension->LoaderPagesSpanned;
MmBootImageSize *= PAGE_SIZE;
MmBootImageSize = (MmBootImageSize + (4 * 1024 * 1024) - 1) & ~((4 * 1024 * 1024) - 1);
ASSERT((MmBootImageSize % (4 * 1024 * 1024)) == 0);
MmBootImageSize = (MmBootImageSize + PDE_MAPPED_VA - 1) & ~(PDE_MAPPED_VA - 1);
ASSERT((MmBootImageSize % PDE_MAPPED_VA) == 0);
//
// Set the size of session view, pool, and image
@ -1770,7 +1789,12 @@ MmArmInitSystem(IN ULONG Phase,
//
MiSystemViewStart = (PVOID)((ULONG_PTR)MmSessionBase -
MmSystemViewSize);
/* Compute the PTE addresses for all the addresses we carved out */
MiSessionImagePteStart = MiAddressToPte(MiSessionImageStart);
MiSessionImagePteEnd = MiAddressToPte(MiSessionImageEnd);
MiSessionBasePte = MiAddressToPte(MmSessionBase);
MiSessionLastPte = MiAddressToPte(MiSessionSpaceEnd);
/* Initialize the user mode image list */
InitializeListHead(&MmLoadedUserImageList);

View file

@ -27,6 +27,10 @@ MiCheckPdeForPagedPool(IN PVOID Address)
PMMPDE PointerPde;
NTSTATUS Status = STATUS_SUCCESS;
/* No session support in ReactOS yet */
ASSERT(MI_IS_SESSION_ADDRESS(Address) == FALSE);
ASSERT(MI_IS_SESSION_PTE(Address) == FALSE);
//
// Check if this is a fault while trying to access the page table itself
//
@ -60,6 +64,9 @@ MiCheckPdeForPagedPool(IN PVOID Address)
//
if (PointerPde->u.Hard.Valid == 0)
{
/* This seems to be making the assumption that one PDE is one page long */
ASSERT(PAGE_SIZE == (PD_COUNT * (sizeof(MMPTE) * PDE_COUNT)));
//
// Copy it from our double-mapped system page directory
//
@ -88,6 +95,10 @@ MiResolveDemandZeroFault(IN PVOID Address,
Address,
Process);
/* Must currently only be called by paging path, for system addresses only */
ASSERT(OldIrql == MM_NOIRQL);
ASSERT(Process == NULL);
//
// Lock the PFN database
//
@ -110,11 +121,16 @@ MiResolveDemandZeroFault(IN PVOID Address,
//
InterlockedIncrement(&KeGetCurrentPrcb()->MmDemandZeroCount);
/* Shouldn't see faults for user PTEs yet */
ASSERT(PointerPte > MiHighestUserPte);
//
// Build the PTE
//
TempPte = ValidKernelPte;
TempPte.u.Hard.PageFrameNumber = PageFrameNumber;
ASSERT(TempPte.u.Hard.Valid == 1);
ASSERT(PointerPte->u.Hard.Valid == 0);
*PointerPte = TempPte;
ASSERT(PointerPte->u.Hard.Valid == 1);
@ -155,6 +171,9 @@ MiDispatchFault(IN BOOLEAN StoreInstruction,
//
TempPte = *PointerPte;
/* No prototype */
ASSERT(PrototypePte == NULL);
//
// The PTE must be invalid, but not totally blank
//
@ -175,7 +194,8 @@ MiDispatchFault(IN BOOLEAN StoreInstruction,
Status = MiResolveDemandZeroFault(Address,
PointerPte,
Process,
-1);
MM_NOIRQL);
ASSERT(KeAreAllApcsDisabled () == TRUE);
if (NT_SUCCESS(Status))
{
//
@ -304,7 +324,7 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction,
//
// This might happen...not sure yet
//
DPRINT1("FAULT ON PAGE TABLES!\n");
DPRINT1("FAULT ON PAGE TABLES: %p %lx %lx!\n", Address, *PointerPte, *PointerPde);
//
// Map in the page table

View file

@ -244,6 +244,175 @@ MiUnlinkFreeOrZeroedPage(IN PMMPFN Entry)
}
}
PFN_NUMBER
NTAPI
MiRemovePageByColor(IN PFN_NUMBER PageIndex,
IN ULONG Color)
{
PMMPFN Pfn1;
PMMPFNLIST ListHead;
MMLISTS ListName;
PFN_NUMBER OldFlink, OldBlink;
ULONG OldColor, OldCache;
#if 0
PMMCOLOR_TABLES ColorTable;
#endif
/* Make sure PFN lock is held */
ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
ASSERT(Color < MmSecondaryColors);
/* Get the PFN entry */
Pfn1 = MiGetPfnEntry(PageIndex);
ASSERT(Pfn1->u3.e1.RemovalRequested == 0);
ASSERT(Pfn1->u3.e1.Rom == 0);
/* Capture data for later */
OldColor = Pfn1->u3.e1.PageColor;
OldCache = Pfn1->u3.e1.CacheAttribute;
/* Could be either on free or zero list */
ListHead = MmPageLocationList[Pfn1->u3.e1.PageLocation];
ListName = ListHead->ListName;
ASSERT(ListName <= FreePageList);
/* Remove a page */
ListHead->Total--;
/* Get the forward and back pointers */
OldFlink = Pfn1->u1.Flink;
OldBlink = Pfn1->u2.Blink;
/* Check if the next entry is the list head */
if (OldFlink != LIST_HEAD)
{
/* It is not, so set the backlink of the actual entry, to our backlink */
MiGetPfnEntry(OldFlink)->u2.Blink = OldBlink;
}
else
{
/* Set the list head's backlink instead */
ListHead->Blink = OldFlink;
}
/* Check if the back entry is the list head */
if (OldBlink != LIST_HEAD)
{
/* It is not, so set the backlink of the actual entry, to our backlink */
MiGetPfnEntry(OldBlink)->u1.Flink = OldFlink;
}
else
{
/* Set the list head's backlink instead */
ListHead->Flink = OldFlink;
}
/* We are not on a list anymore */
Pfn1->u1.Flink = Pfn1->u2.Blink = 0;
/* Zero flags but restore color and cache */
Pfn1->u3.e2.ShortFlags = 0;
Pfn1->u3.e1.PageColor = OldColor;
Pfn1->u3.e1.CacheAttribute = OldCache;
#if 0 // When switching to ARM3
/* Get the first page on the color list */
ColorTable = &MmFreePagesByColor[ListName][Color];
ASSERT(ColorTable->Count >= 1);
/* Set the forward link to whoever we were pointing to */
ColorTable->Flink = Pfn1->OriginalPte.u.Long;
if (ColorTable->Flink == LIST_HEAD)
{
/* This is the beginning of the list, so set the sentinel value */
ColorTable->Blink = LIST_HEAD;
}
else
{
/* The list is empty, so we are the first page */
MiGetPfnEntry(ColorTable->Flink)->u4.PteFrame = -1;
}
/* One more page */
ColorTable->Total++;
#endif
/* See if we hit any thresholds */
if (MmAvailablePages == MmHighMemoryThreshold)
{
/* Clear the high memory event */
KeClearEvent(MiHighMemoryEvent);
}
else if (MmAvailablePages == MmLowMemoryThreshold)
{
/* Signal the low memory event */
KeSetEvent(MiLowMemoryEvent, 0, FALSE);
}
/* One less page */
if (--MmAvailablePages < MmMinimumFreePages)
{
/* FIXME: Should wake up the MPW and working set manager, if we had one */
}
/* Return the page */
return PageIndex;
}
PFN_NUMBER
NTAPI
MiRemoveAnyPage(IN ULONG Color)
{
PFN_NUMBER PageIndex;
PMMPFN Pfn1;
/* Make sure PFN lock is held and we have pages */
ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
ASSERT(MmAvailablePages != 0);
ASSERT(Color < MmSecondaryColors);
/* Check the colored free list */
#if 0 // Enable when using ARM3 database */
PageIndex = MmFreePagesByColor[FreePageList][Color].Flink;
if (PageIndex == LIST_HEAD)
{
/* Check the colored zero list */
PageIndex = MmFreePagesByColor[ZeroedPageList][Color].Flink;
if (PageIndex == LIST_HEAD)
{
#endif
/* Check the free list */
PageIndex = MmFreePageListHead.Flink;
Color = PageIndex & MmSecondaryColorMask;
if (PageIndex == LIST_HEAD)
{
/* Check the zero list */
ASSERT(MmFreePageListHead.Total == 0);
PageIndex = MmZeroedPageListHead.Flink;
Color = PageIndex & MmSecondaryColorMask;
ASSERT(PageIndex != LIST_HEAD);
if (PageIndex == LIST_HEAD)
{
/* FIXME: Should check the standby list */
ASSERT(MmZeroedPageListHead.Total == 0);
}
}
#if 0 // Enable when using ARM3 database */
}
}
#endif
/* Remove the page from its list */
PageIndex = MiRemovePageByColor(PageIndex, Color);
/* Sanity checks */
Pfn1 = MiGetPfnEntry(PageIndex);
ASSERT((Pfn1->u3.e1.PageLocation == FreePageList) ||
(Pfn1->u3.e1.PageLocation == ZeroedPageList));
ASSERT(Pfn1->u3.e2.ReferenceCount == 0);
ASSERT(Pfn1->u2.ShareCount == 0);
/* Return the page */
return PageIndex;
}
PMMPFN
NTAPI
MiRemoveHeadList(IN PMMPFNLIST ListHead)
@ -285,17 +454,19 @@ MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
{
PMMPFNLIST ListHead;
PFN_NUMBER LastPage;
PMMPFN Pfn1, Blink;
PMMPFN Pfn1;
#if 0
ULONG Color;
PMMCOLOR_TABLES ColorHead;
PMMPFN Blink;
PMMCOLOR_TABLES ColorTable;
#endif
/* Make sure the page index is valid */
ASSERT((PageFrameIndex != 0) &&
(PageFrameIndex <= MmHighestPhysicalPage) &&
(PageFrameIndex >= MmLowestPhysicalPage));
/* Get the PFN entry */
Pfn1 = MI_PFN_TO_PFNENTRY(PageFrameIndex);
Pfn1 = MiGetPfnEntry(PageFrameIndex);
/* Sanity checks that a right kind of page is being inserted here */
ASSERT(Pfn1->u4.MustBeCached == 0);
@ -313,7 +484,7 @@ MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
if (LastPage != LIST_HEAD)
{
/* Link us with the previous page, so we're at the end now */
MI_PFN_TO_PFNENTRY(LastPage)->u1.Flink = PageFrameIndex;
MiGetPfnEntry(LastPage)->u1.Flink = PageFrameIndex;
}
else
{
@ -336,8 +507,8 @@ MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
Pfn1->u4.InPageError = 0;
Pfn1->u4.AweAllocation = 0;
/* Not yet until we switch to this */
//MmAvailablePages++;
/* Increase available pages */
MmAvailablePages++;
/* Check if we've reached the configured low memory threshold */
if (MmAvailablePages == MmLowMemoryThreshold)
@ -351,21 +522,22 @@ MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
KeSetEvent(MiHighMemoryEvent, 0, FALSE);
}
#if 0 // When using ARM3 PFN
/* Get the page color */
Color = PageFrameIndex & MmSecondaryColorMask;
/* Get the first page on the color list */
ColorHead = &MmFreePagesByColor[FreePageList][Color];
if (ColorHead->Flink == LIST_HEAD)
ColorTable = &MmFreePagesByColor[FreePageList][Color];
if (ColorTable->Flink == LIST_HEAD)
{
/* The list is empty, so we are the first page */
Pfn1->u4.PteFrame = -1;
ColorHead->Flink = PageFrameIndex;
ColorTable->Flink = PageFrameIndex;
}
else
{
/* Get the previous page */
Blink = (PMMPFN)ColorHead->Blink;
Blink = (PMMPFN)ColorTable->Blink;
/* Make it link to us */
Pfn1->u4.PteFrame = MI_PFNENTRY_TO_PFN(Blink);
@ -373,13 +545,20 @@ MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
}
/* Now initialize our own list pointers */
ColorHead->Blink = Pfn1;
ColorTable->Blink = Pfn1;
Pfn1->OriginalPte.u.Long = LIST_HEAD;
/* And increase the count in the colored list */
ColorHead->Count++;
ColorTable->Count++;
#endif
/* FIXME: Notify zero page thread if enough pages are on the free list now */
/* Notify zero page thread if enough pages are on the free list now */
extern KEVENT ZeroPageThreadEvent;
if ((MmFreePageListHead.Total > 8) && !(KeReadStateEvent(&ZeroPageThreadEvent)))
{
/* This is ReactOS-specific */
KeSetEvent(&ZeroPageThreadEvent, IO_NO_INCREMENT, FALSE);
}
}
/* EOF */

View file

@ -334,12 +334,13 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
//
// Save it into our double-buffered system page directory
//
/* This seems to be making the assumption that one PDE is one page long */
ASSERT(PAGE_SIZE == (PD_COUNT * (sizeof(MMPTE) * PDE_COUNT)));
MmSystemPagePtes[(ULONG_PTR)PointerPte & (PAGE_SIZE - 1) /
sizeof(MMPTE)] = TempPte;
//
// Write the actual PTE now
//
/* Write the actual PTE now */
ASSERT(TempPte.u.Hard.Valid == 1);
*PointerPte++ = TempPte;
//
@ -432,6 +433,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
//
// Write the demand zero PTE and keep going
//
ASSERT(PointerPte->u.Hard.Valid == 0);
*PointerPte++ = TempPte;
} while (PointerPte < StartPte);
@ -593,14 +595,15 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
//
PageFrameNumber = MmAllocPage(MC_NPPOOL);
//
// Get the PFN entry for it
//
/* Get the PFN entry for it and fill it out */
Pfn1 = MiGetPfnEntry(PageFrameNumber);
Pfn1->u3.e2.ReferenceCount = 1;
Pfn1->u2.ShareCount = 1;
Pfn1->PteAddress = PointerPte;
Pfn1->u3.e1.PageLocation = ActiveAndValid;
Pfn1->u4.VerifierAllocation = 0;
//
// Write the PTE for it
//
/* Write the PTE for it */
TempPte.u.Hard.PageFrameNumber = PageFrameNumber;
ASSERT(PointerPte->u.Hard.Valid == 0);
ASSERT(TempPte.u.Hard.Valid == 1);

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