https://git.reactos.org/?p=reactos.git;a=commitdiff;h=279d179ac439657fcc8b6…
commit 279d179ac439657fcc8b61d4a4b4f3bef6c2e2fe
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Sun Aug 19 22:46:51 2018 +0200
Commit: GitHub <noreply(a)github.com>
CommitDate: Sun Aug 19 22:46:51 2018 +0200
[TRANSLATION] Polish translation of errcodes.mc (0-499) (#777)
---
sdk/include/reactos/mc/errcodes.mc | 592 ++++++++++++++++++++++++++++++++++++-
1 file changed, 590 insertions(+), 2 deletions(-)
diff --git a/sdk/include/reactos/mc/errcodes.mc b/sdk/include/reactos/mc/errcodes.mc
index 86428a091f..41a0a56a90 100644
--- a/sdk/include/reactos/mc/errcodes.mc
+++ b/sdk/include/reactos/mc/errcodes.mc
@@ -21,7 +21,8 @@ FacilityNames=(System=0x0:FACILITY_SYSTEM
)
LanguageNames=(English=0x409:MSG00409
- Russian=0x419:MSG00419)
+ Russian=0x419:MSG00419
+ Polish=0x415:MSG00415)
MessageId=0
Severity=Success
@@ -33,6 +34,9 @@ ERROR_SUCCESS - The operation completed successfully.
Language=Russian
ERROR_SUCCESS - Операция успешно завершена.
.
+Language=Polish
+ERROR_SUCCESS - Operacja ukończona pomyślnie.
+.
MessageId=1
Severity=Success
@@ -44,6 +48,9 @@ ERROR_INVALID_FUNCTION - Incorrect function.
Language=Russian
ERROR_INVALID_FUNCTION - Неверная функция.
.
+Language=Polish
+ERROR_INVALID_FUNCTION - Niepoprawna funkcja.
+.
MessageId=2
Severity=Success
@@ -55,6 +62,9 @@ ERROR_FILE_NOT_FOUND - The system cannot find the file specified.
Language=Russian
ERROR_FILE_NOT_FOUND - Не удается найти указанный файл.
.
+Language=Polish
+ERROR_FILE_NOT_FOUND - Nie można odnaleźć określonego pliku.
+.
MessageId=3
Severity=Success
@@ -66,6 +76,9 @@ ERROR_PATH_NOT_FOUND - The system cannot find the path specified.
Language=Russian
ERROR_PATH_NOT_FOUND - Системе не удается найти указанный путь.
.
+Language=Polish
+ERROR_PATH_NOT_FOUND - System nie może odnaleźć określonej ścieżki.
+.
MessageId=4
Severity=Success
@@ -77,6 +90,9 @@ ERROR_TOO_MANY_OPEN_FILES - The system cannot open the file.
Language=Russian
ERROR_TOO_MANY_OPEN_FILES - Системе не удается открыть файл.
.
+Language=Polish
+ERROR_TOO_MANY_OPEN_FILES - System nie może otworzyć tego pliku.
+.
MessageId=5
Severity=Success
@@ -88,6 +104,9 @@ ERROR_ACCESS_DENIED - Access is denied.
Language=Russian
ERROR_ACCESS_DENIED - Отказано в доступе.
.
+Language=Polish
+ERROR_ACCESS_DENIED - Odmowa dostępu.
+.
MessageId=6
Severity=Success
@@ -99,6 +118,9 @@ ERROR_INVALID_HANDLE - The handle is invalid.
Language=Russian
ERROR_INVALID_HANDLE - Неверный дескриптор.
.
+Language=Polish
+ERROR_INVALID_HANDLE - Nieprawidłowe dojście.
+.
MessageId=7
Severity=Success
@@ -110,6 +132,9 @@ ERROR_ARENA_TRASHED - The storage control blocks were destroyed.
Language=Russian
ERROR_ARENA_TRASHED - Повреждены управляющие блоки памяти.
.
+Language=Polish
+ERROR_ARENA_TRASHED - Bloki kontroli magazynu zostały zniszczone.
+.
MessageId=8
Severity=Success
@@ -121,6 +146,9 @@ ERROR_NOT_ENOUGH_MEMORY - Not enough storage is available to process this comman
Language=Russian
ERROR_NOT_ENOUGH_MEMORY - Недостаточно памяти для обработки команды.
.
+Language=Polish
+ERROR_NOT_ENOUGH_MEMORY - W magazynie brak miejsca dla wykonania tego polecenia.
+.
MessageId=9
Severity=Success
@@ -132,6 +160,9 @@ ERROR_INVALID_BLOCK - The storage control block address is invalid.
Language=Russian
ERROR_INVALID_BLOCK - Неверный адрес управляющего блока памяти.
.
+Language=Polish
+ERROR_INVALID_BLOCK - Adres bloku kontroli magazynu jest nieprawidłowy.
+.
MessageId=10
Severity=Success
@@ -143,6 +174,9 @@ ERROR_BAD_ENVIRONMENT - The environment is incorrect.
Language=Russian
ERROR_BAD_ENVIRONMENT - Недопустимая среда.
.
+Language=Polish
+ERROR_BAD_ENVIRONMENT - Środowisko jest niepoprawne.
+.
MessageId=11
Severity=Success
@@ -154,6 +188,9 @@ ERROR_BAD_FORMAT - An attempt was made to load a program with an incorrect forma
Language=Russian
ERROR_BAD_FORMAT - Попытка запустить программу с недопустимым форматом.
.
+Language=Polish
+ERROR_BAD_FORMAT - Próbowano załadować program w niepoprawnym formacie.
+.
MessageId=12
Severity=Success
@@ -165,6 +202,9 @@ ERROR_INVALID_ACCESS - The access code is invalid.
Language=Russian
ERROR_INVALID_ACCESS - Неверный код доступа.
.
+Language=Polish
+ERROR_INVALID_ACCESS - Nieprawidłowy kod dostępu.
+.
MessageId=13
Severity=Success
@@ -176,6 +216,9 @@ ERROR_INVALID_DATA - The data is invalid.
Language=Russian
ERROR_INVALID_DATA - Недопустимые данные.
.
+Language=Polish
+ERROR_INVALID_DATA - Nieprawidłowe dane.
+.
MessageId=14
Severity=Success
@@ -187,6 +230,9 @@ ERROR_OUTOFMEMORY - Not enough storage is available to complete this operation.
Language=Russian
ERROR_OUTOFMEMORY - Недостаточно памяти для завершения операции.
.
+Language=Polish
+ERROR_OUTOFMEMORY - W magazynie brak miejsca dla wykonania tej operacji.
+.
MessageId=15
Severity=Success
@@ -198,6 +244,9 @@ ERROR_INVALID_DRIVE - The system cannot find the drive specified.
Language=Russian
ERROR_INVALID_DRIVE - Система не может найти указанное устройство.
.
+Language=Polish
+ERROR_INVALID_DRIVE - Nie można odnaleźć dysku.
+.
MessageId=16
Severity=Success
@@ -209,6 +258,9 @@ ERROR_CURRENT_DIRECTORY - The directory cannot be removed.
Language=Russian
ERROR_CURRENT_DIRECTORY - Этот каталог не может быть удален.
.
+Language=Polish
+ERROR_CURRENT_DIRECTORY - Nie można usunąć katalogu.
+.
MessageId=17
Severity=Success
@@ -220,6 +272,9 @@ ERROR_NOT_SAME_DEVICE - The system cannot move the file to a different disk driv
Language=Russian
ERROR_NOT_SAME_DEVICE - Система не может переместить файл на другое дисковое устройство.
.
+Language=Polish
+ERROR_NOT_SAME_DEVICE - Nie można przenieść pliku na inny dysk.
+.
MessageId=18
Severity=Success
@@ -231,6 +286,9 @@ ERROR_NO_MORE_FILES - There are no more files.
Language=Russian
ERROR_NO_MORE_FILES - Файлов больше нет.
.
+Language=Polish
+ERROR_NO_MORE_FILES - Brak dalszych plików.
+.
MessageId=19
Severity=Success
@@ -242,6 +300,9 @@ ERROR_WRITE_PROTECT - The media is write protected.
Language=Russian
ERROR_WRITE_PROTECT - Носитель защищен от записи.
.
+Language=Polish
+ERROR_WRITE_PROTECT - Nośnik jest zabezpieczony przed zapisem.
+.
MessageId=20
Severity=Success
@@ -253,6 +314,9 @@ ERROR_BAD_UNIT - The system cannot find the device specified.
Language=Russian
ERROR_BAD_UNIT - Система не может найти указанное устройство.
.
+Language=Polish
+ERROR_BAD_UNIT - Nie można odnaleźć urządzenia.
+.
MessageId=21
Severity=Success
@@ -264,6 +328,9 @@ ERROR_NOT_READY - The device is not ready.
Language=Russian
ERROR_NOT_READY - Устройство не готово.
.
+Language=Polish
+ERROR_NOT_READY - Urządzenie nie jest gotowe.
+.
MessageId=22
Severity=Success
@@ -275,6 +342,9 @@ ERROR_BAD_COMMAND - The device does not recognize the command.
Language=Russian
ERROR_BAD_COMMAND - Устройство не распознает команду.
.
+Language=Polish
+ERROR_BAD_COMMAND - Urządzenie nie rozpoznaje polecenia.
+.
MessageId=23
Severity=Success
@@ -286,6 +356,9 @@ ERROR_CRC - Data error (cyclic redundancy check).
Language=Russian
ERROR_CRC - Ошибка в данных (циклический код с избыточностью).
.
+Language=Polish
+ERROR_CRC - Błąd danych (CRC).
+.
MessageId=24
Severity=Success
@@ -297,6 +370,9 @@ ERROR_BAD_LENGTH - The program issued a command but the command length is incorr
Language=Russian
ERROR_BAD_LENGTH - Программа выдала команду с недопустимой длиной.
.
+Language=Polish
+ERROR_BAD_LENGTH - Program wydał polecenie, ale długość polecenia jest niepoprawna.
+.
MessageId=25
Severity=Success
@@ -308,6 +384,9 @@ ERROR_SEEK - The drive cannot locate a specific area or track on the disk.
Language=Russian
ERROR_SEEK - Дисковое устройство не может обнаружить указанную область или дорожку.
.
+Language=Polish
+ERROR_SEEK - Nie można odnaleźć na dysku określonego obszaru lub ścieżki.
+.
MessageId=26
Severity=Success
@@ -319,6 +398,9 @@ ERROR_NOT_DOS_DISK - The specified disk or diskette cannot be accessed.
Language=Russian
ERROR_NOT_DOS_DISK - Нет доступа к диску или дискете.
.
+Language=Polish
+ERROR_NOT_DOS_DISK - Nie można uzyskać dostępu do określonego dysku lub dyskietki.
+.
MessageId=27
Severity=Success
@@ -330,6 +412,9 @@ ERROR_SECTOR_NOT_FOUND - The drive cannot find the sector requested.
Language=Russian
ERROR_SECTOR_NOT_FOUND - Дисковое устройство не может обнаружить указанную область или дорожку.
.
+Language=Polish
+ERROR_SECTOR_NOT_FOUND - Nie można odnaleźć na dysku żądanego sektora.
+.
MessageId=28
Severity=Success
@@ -341,6 +426,9 @@ ERROR_OUT_OF_PAPER - The printer is out of paper.
Language=Russian
ERROR_OUT_OF_PAPER - В принтере закончилась бумага.
.
+Language=Polish
+ERROR_OUT_OF_PAPER - Brak papieru w drukarce.
+.
MessageId=29
Severity=Success
@@ -352,6 +440,9 @@ ERROR_WRITE_FAULT - The system cannot write to the specified device.
Language=Russian
ERROR_WRITE_FAULT - Система не может выполнить запись на указанное устройство.
.
+Language=Polish
+ERROR_WRITE_FAULT - System nie może zapisywać do określonego urządzenia.
+.
MessageId=30
Severity=Success
@@ -363,6 +454,9 @@ ERROR_READ_FAULT - The system cannot read from the specified device.
Language=Russian
ERROR_READ_FAULT - Системе не может выполнить чтение с указанного устройства.
.
+Language=Polish
+ERROR_READ_FAULT - System nie może czytać z określonego urządzenia.
+.
MessageId=31
Severity=Success
@@ -374,6 +468,9 @@ ERROR_GEN_FAILURE - A device attached to the system is not functioning.
Language=Russian
ERROR_GEN_FAILURE - Устройство, подключенное к системе, не работает.
.
+Language=Polish
+ERROR_GEN_FAILURE - Urządzenie dołączone do komputera nie działa.
+.
MessageId=32
Severity=Success
@@ -385,6 +482,9 @@ ERROR_SHARING_VIOLATION - The process cannot access the file because it is being
Language=Russian
ERROR_SHARING_VIOLATION - Процесс не имеет доступа к файлу, поскольку файл используется другим процессом.
.
+Language=Polish
+ERROR_SHARING_VIOLATION - Proces nie może uzyskać dostępu do pliku, ponieważ jest on używany przez inny proces.
+.
MessageId=33
Severity=Success
@@ -396,6 +496,9 @@ ERROR_LOCK_VIOLATION - The process cannot access the file because another proces
Language=Russian
ERROR_LOCK_VIOLATION - Процесс не имеет доступа к файлу, поскольку другой процесс заблокировал часть файла.
.
+Language=Polish
+ERROR_LOCK_VIOLATION - Proces nie może uzyskać dostępu do pliku, ponieważ inny proces zablokował jego część.
+.
MessageId=34
Severity=Success
@@ -407,6 +510,9 @@ ERROR_WRONG_DISK - The wrong diskette is in the drive. Insert %2 (Volume Serial
Language=Russian
ERROR_WRONG_DISK - Вставте другую дискету. Вставьте %2 (серийный номер тома: %3) в дисковод %1.
.
+Language=Polish
+ERROR_WRONG_DISK - W stacji umieszczono niewłaściwą dyskietkę. Włóż dysk %2 (numer seryjny woluminu: %3) do stacji: %1.
+.
MessageId=36
Severity=Success
@@ -418,6 +524,9 @@ ERROR_SHARING_BUFFER_EXCEEDED - Too many files opened for sharing.
Language=Russian
ERROR_SHARING_BUFFER_EXCEEDED - Слишком много файлов открыто для совместного использования.
.
+Language=Polish
+ERROR_SHARING_BUFFER_EXCEEDED - Za dużo plików otwartych do udostępniania.
+.
MessageId=38
Severity=Success
@@ -429,6 +538,9 @@ ERROR_HANDLE_EOF - Reached the end of the file.
Language=Russian
ERROR_HANDLE_EOF - Достигнут конец файла.
.
+Language=Polish
+ERROR_HANDLE_EOF - Osiągnięto koniec pliku.
+.
MessageId=39
Severity=Success
@@ -440,6 +552,9 @@ ERROR_HANDLE_DISK_FULL - The disk is full.
Language=Russian
ERROR_HANDLE_DISK_FULL - Отсутствует место на диске.
.
+Language=Polish
+ERROR_HANDLE_DISK_FULL - Dysk jest zapełniony.
+.
MessageId=50
Severity=Success
@@ -451,6 +566,9 @@ ERROR_NOT_SUPPORTED - The request is not supported.
Language=Russian
ERROR_NOT_SUPPORTED - Запрос не поддерживается.
.
+Language=Polish
+ERROR_NOT_SUPPORTED - Żądanie nie jest obsługiwane.
+.
MessageId=51
Severity=Success
@@ -462,7 +580,9 @@ ERROR_REM_NOT_LIST - ReactOS cannot find the network path. Verify that the netwo
Language=Russian
ERROR_REM_NOT_LIST - Невозможно найти сетевой путь. Убедитесь, что сетевой путь указан верно, а конечный компьютер включен и не занят. Если система вновь не сможет найти путь, обратитесь к сетевому администратору.
.
-
+Language=Polish
+ERROR_REM_NOT_LIST - System ReactOS nie może odnaleźć ścieżki sieciowej. Sprawdź, czy ścieżka sieciowa jest poprawna i czy komputer docelowy nie jest zajęty lub wyłączony. Jeśli system ReactOS nadal nie będzie mógł odnaleźć ścieżki sieciowej, skontaktuj się z administratorem sieci.
+.
MessageId=52
Severity=Success
@@ -474,6 +594,9 @@ ERROR_DUP_NAME - You were not connected because a duplicate name exists on the n
Language=Russian
ERROR_DUP_NAME - Вы не подключены, поскольку такое же имя уже существует в этой сети. Для присоединения к домену откройте компонент панели управления "Система", измените имя компьютера и повторите попытку. Для присоединения к рабочей группе выберите другое имя рабочей группы.
.
+Language=Polish
+ERROR_DUP_NAME - Połączenie nie zostało nawiązane, ponieważ w sieci istnieje duplikat nazwy. Jeśli przyłączasz się do domeny, przejdź do apletu System w Panelu sterowania, aby zmienić nazwę komputera, i spróbuj ponownie. Jeśli przyłączasz się do grupy roboczej, wybierz inną nazwę grupy.
+.
MessageId=53
Severity=Success
@@ -485,6 +608,9 @@ ERROR_BAD_NETPATH - The network path was not found.
Language=Russian
ERROR_BAD_NETPATH - Не найден сетевой путь.
.
+Language=Polish
+ERROR_BAD_NETPATH - Nie można odnaleźć ścieżki sieciowej.
+.
MessageId=54
Severity=Success
@@ -496,6 +622,9 @@ ERROR_NETWORK_BUSY - The network is busy.
Language=Russian
ERROR_NETWORK_BUSY - Сеть занята.
.
+Language=Polish
+ERROR_NETWORK_BUSY - Sieć jest zajęta.
+.
MessageId=55
Severity=Success
@@ -507,6 +636,9 @@ ERROR_DEV_NOT_EXIST - The specified network resource or device is no longer avai
Language=Russian
ERROR_DEV_NOT_EXIST - Сетевой ресурс или устройство более недоступно.
.
+Language=Polish
+ERROR_DEV_NOT_EXIST - Określone zasoby sieciowe lub urządzenie są już niedostępne.
+.
MessageId=56
Severity=Success
@@ -518,6 +650,9 @@ ERROR_TOO_MANY_CMDS - The network BIOS command limit has been reached.
Language=Russian
ERROR_TOO_MANY_CMDS - Достигнут предел числа команд NetBIOS.
.
+Language=Polish
+ERROR_TOO_MANY_CMDS - Osiągnięto limit poleceń systemu BIOS dla sieci.
+.
MessageId=57
Severity=Success
@@ -529,6 +664,9 @@ ERROR_ADAP_HDW_ERR - A network adapter hardware error occurred.
Language=Russian
ERROR_ADAP_HDW_ERR - Аппаратная ошибка сетевой платы.
.
+Language=Polish
+ERROR_ADAP_HDW_ERR - Wystąpił błąd sprzętowy karty sieciowej.
+.
MessageId=58
Severity=Success
@@ -540,6 +678,9 @@ ERROR_BAD_NET_RESP - The specified server cannot perform the requested operation
Language=Russian
ERROR_BAD_NET_RESP - Указанный сервер не может выполнить требуемую операцию.
.
+Language=Polish
+ERROR_BAD_NET_RESP - Określony serwer nie może wykonać żądanej operacji.
+.
MessageId=59
Severity=Success
@@ -551,6 +692,9 @@ ERROR_UNEXP_NET_ERR - An unexpected network error occurred.
Language=Russian
ERROR_UNEXP_NET_ERR - Непредвиденная сетевая ошибка.
.
+Language=Polish
+ERROR_UNEXP_NET_ERR - Wystąpił nieoczekiwany błąd sieciowy.
+.
MessageId=60
Severity=Success
@@ -562,6 +706,9 @@ ERROR_BAD_REM_ADAP - The remote adapter is not compatible.
Language=Russian
ERROR_BAD_REM_ADAP - Несовместимый удаленный контроллер.
.
+Language=Polish
+ERROR_BAD_REM_ADAP - Zdalna karta sieciowa jest niezgodna.
+.
MessageId=61
Severity=Success
@@ -573,6 +720,9 @@ ERROR_PRINTQ_FULL - The printer queue is full.
Language=Russian
ERROR_PRINTQ_FULL - Очередь печати переполнена.
.
+Language=Polish
+ERROR_PRINTQ_FULL - Kolejka wydruku jest zapełniona.
+.
MessageId=62
Severity=Success
@@ -584,6 +734,9 @@ ERROR_NO_SPOOL_SPACE - Space to store the file waiting to be printed is not avai
Language=Russian
ERROR_NO_SPOOL_SPACE - На сервере нет места для хранения ожидающего печати файла.
.
+Language=Polish
+ERROR_NO_SPOOL_SPACE - Na serwerze nie ma miejsca na przechowywanie pliku oczekującego na wydruk.
+.
MessageId=63
Severity=Success
@@ -595,6 +748,9 @@ ERROR_PRINT_CANCELLED - Your file waiting to be printed was deleted.
Language=Russian
ERROR_PRINT_CANCELLED - Ваш файл, находившийся в очереди вывода на печать, был удален.
.
+Language=Polish
+ERROR_PRINT_CANCELLED - Plik oczekujący na wydruk został usunięty.
+.
MessageId=64
Severity=Success
@@ -606,6 +762,9 @@ ERROR_NETNAME_DELETED - The specified network name is no longer available.
Language=Russian
ERROR_NETNAME_DELETED - Указанное сетевое имя более недоступно.
.
+Language=Polish
+ERROR_NETNAME_DELETED - Określona nazwa sieciowa już jest niedostępna.
+.
MessageId=65
Severity=Success
@@ -617,6 +776,9 @@ ERROR_NETWORK_ACCESS_DENIED - Network access is denied.
Language=Russian
ERROR_NETWORK_ACCESS_DENIED - Нет доступа к сети.
.
+Language=Polish
+ERROR_NETWORK_ACCESS_DENIED - Odmowa dostępu do sieci.
+.
MessageId=66
Severity=Success
@@ -628,6 +790,9 @@ ERROR_BAD_DEV_TYPE - The network resource type is not correct.
Language=Russian
ERROR_BAD_DEV_TYPE - Неверно указан тип сетевого ресурса.
.
+Language=Polish
+ERROR_BAD_DEV_TYPE - Typ zasobu sieciowego jest niepoprawny.
+.
MessageId=67
Severity=Success
@@ -639,6 +804,9 @@ ERROR_BAD_NET_NAME - The network name cannot be found.
Language=Russian
ERROR_BAD_NET_NAME - Не найдено сетевое имя.
.
+Language=Polish
+ERROR_BAD_NET_NAME - Nie można odnaleźć nazwy sieciowej.
+.
MessageId=68
Severity=Success
@@ -650,6 +818,9 @@ ERROR_TOO_MANY_NAMES - The name limit for the local computer network adapter car
Language=Russian
ERROR_TOO_MANY_NAMES - Превышен предел числа имен для сетевого адаптера локального компьютера.
.
+Language=Polish
+ERROR_TOO_MANY_NAMES - Przekroczono ograniczenie nazwy dla karty sieci lokalnej komputera.
+.
MessageId=69
Severity=Success
@@ -661,6 +832,9 @@ ERROR_TOO_MANY_SESS - The network BIOS session limit was exceeded.
Language=Russian
ERROR_TOO_MANY_SESS - Превышен предел по числу сеансов NetBIOS.
.
+Language=Polish
+ERROR_TOO_MANY_SESS - Przekroczono limit sesji systemu BIOS dla sieci.
+.
MessageId=70
Severity=Success
@@ -672,6 +846,9 @@ ERROR_SHARING_PAUSED - The remote server has been paused or is in the process of
Language=Russian
ERROR_SHARING_PAUSED - Сервер сети был остановлен или находится в процессе запуска.
.
+Language=Polish
+ERROR_SHARING_PAUSED - Zdalny serwer przerwał pracę lub jest w trakcie procesu uruchamiania.
+.
MessageId=71
Severity=Success
@@ -683,6 +860,9 @@ ERROR_REQ_NOT_ACCEP - No more connections can be made to this remote computer at
Language=Russian
ERROR_REQ_NOT_ACCEP - Дополнительные подключения к этому удаленному компьютеру сейчас невозможны, так как их число достигло предела.
.
+Language=Polish
+ERROR_REQ_NOT_ACCEP - Do tego komputera zdalnego nie można obecnie uzyskać więcej połączeń, ponieważ istnieje już maksymalna akceptowalna liczba połączeń.
+.
MessageId=72
Severity=Success
@@ -694,6 +874,9 @@ ERROR_REDIR_PAUSED - The specified printer or disk device has been paused.
Language=Russian
ERROR_REDIR_PAUSED - Работа указанного принтера или дискового накопителя была остановлена.
.
+Language=Polish
+ERROR_REDIR_PAUSED - Określona drukarka lub urządzenie przerwały pracę.
+.
MessageId=80
Severity=Success
@@ -705,6 +888,9 @@ ERROR_FILE_EXISTS - The file exists.
Language=Russian
ERROR_FILE_EXISTS - Файл существует.
.
+Language=Polish
+ERROR_FILE_EXISTS - Plik istnieje.
+.
MessageId=82
Severity=Success
@@ -716,6 +902,9 @@ ERROR_CANNOT_MAKE - The directory or file cannot be created.
Language=Russian
ERROR_CANNOT_MAKE - Не удается создать файл или папку.
.
+Language=Polish
+ERROR_CANNOT_MAKE - Nie można utworzyć katalogu lub pliku.
+.
MessageId=83
Severity=Success
@@ -727,6 +916,9 @@ ERROR_FAIL_I24 - Fail on INT 24.
Language=Russian
ERROR_FAIL_I24 - Сбой прерывания INT 24.
.
+Language=Polish
+ERROR_FAIL_I24 - Błąd przerwania INT 24.
+.
MessageId=84
Severity=Success
@@ -738,6 +930,9 @@ ERROR_OUT_OF_STRUCTURES - Storage to process this request is not available.
Language=Russian
ERROR_OUT_OF_STRUCTURES - Недостаточно памяти для обработки запроса.
.
+Language=Polish
+ERROR_OUT_OF_STRUCTURES - Pamięć do przetworzenia tego żądania jest niedostępna.
+.
MessageId=85
Severity=Success
@@ -749,6 +944,9 @@ ERROR_ALREADY_ASSIGNED - The local device name is already in use.
Language=Russian
ERROR_ALREADY_ASSIGNED - Имя локального устройства уже используется.
.
+Language=Polish
+ERROR_ALREADY_ASSIGNED - Nazwa lokalnego urządzenia jest już w użyciu.
+.
MessageId=86
Severity=Success
@@ -760,6 +958,9 @@ ERROR_INVALID_PASSWORD - The specified network password is not correct.
Language=Russian
ERROR_INVALID_PASSWORD - Сетевой пароль указан неверно.
.
+Language=Polish
+ERROR_INVALID_PASSWORD - Określone hasło sieciowe jest niepoprawne.
+.
MessageId=87
Severity=Success
@@ -771,6 +972,9 @@ ERROR_INVALID_PARAMETER - The parameter is incorrect.
Language=Russian
ERROR_INVALID_PARAMETER - Параметр задан неверно.
.
+Language=Polish
+ERROR_INVALID_PARAMETER - Parametr jest niepoprawny.
+.
MessageId=88
Severity=Success
@@ -782,6 +986,9 @@ ERROR_NET_WRITE_FAULT - A write fault occurred on the network.
Language=Russian
ERROR_NET_WRITE_FAULT - Ошибка записи в сети.
.
+Language=Polish
+ERROR_NET_WRITE_FAULT - Wystąpił błąd zapisu w sieci.
+.
MessageId=89
Severity=Success
@@ -793,6 +1000,9 @@ ERROR_NO_PROC_SLOTS - The system cannot start another process at this time.
Language=Russian
ERROR_NO_PROC_SLOTS - В настоящее время системе не удается запустить другой процесс.
.
+Language=Polish
+ERROR_NO_PROC_SLOTS - System nie może teraz uruchomić innego procesu.
+.
MessageId=100
Severity=Success
@@ -804,6 +1014,9 @@ ERROR_TOO_MANY_SEMAPHORES - Cannot create another system semaphore.
Language=Russian
ERROR_TOO_MANY_SEMAPHORES - Не удается создать еще один системный семафор.
.
+Language=Polish
+ERROR_TOO_MANY_SEMAPHORES - Nie można utworzyć innego semafora systemowego.
+.
MessageId=101
Severity=Success
@@ -815,6 +1028,9 @@ ERROR_EXCL_SEM_ALREADY_OWNED - The exclusive semaphore is owned by another proce
Language=Russian
ERROR_EXCL_SEM_ALREADY_OWNED - Семафор эксклюзивного доступа занят другим процессом.
.
+Language=Polish
+ERROR_EXCL_SEM_ALREADY_OWNED - Semafor wyłączny jest własnością innego procesu.
+.
MessageId=102
Severity=Success
@@ -826,6 +1042,9 @@ ERROR_SEM_IS_SET - The semaphore is set and cannot be closed.
Language=Russian
ERROR_SEM_IS_SET - Семафор установлен и не может быть закрыт.
.
+Language=Polish
+ERROR_SEM_IS_SET - Semafor jest ustawiony i nie można go zamknąć.
+.
MessageId=103
Severity=Success
@@ -837,6 +1056,9 @@ ERROR_TOO_MANY_SEM_REQUESTS - The semaphore cannot be set again.
Language=Russian
ERROR_TOO_MANY_SEM_REQUESTS - Семафор не может быть установлен повторно.
.
+Language=Polish
+ERROR_TOO_MANY_SEM_REQUESTS - Nie można ponownie zamknąć semafora.
+.
MessageId=104
Severity=Success
@@ -848,6 +1070,9 @@ ERROR_INVALID_AT_INTERRUPT_TIME - Cannot request exclusive semaphores at interru
Language=Russian
ERROR_INVALID_AT_INTERRUPT_TIME - Запросы к семафорам эксклюзивного доступа на время выполнения прерываний не допускаются.
.
+Language=Polish
+ERROR_INVALID_AT_INTERRUPT_TIME - Nie można żądać semaforów wyłącznych w czasie przerwania.
+.
MessageId=105
Severity=Success
@@ -859,6 +1084,9 @@ ERROR_SEM_OWNER_DIED - The previous ownership of this semaphore has ended.
Language=Russian
ERROR_SEM_OWNER_DIED - Этот семафор более не принадлежит использовавшему его процессу.
.
+Language=Polish
+ERROR_SEM_OWNER_DIED - Poprzednia przynależność tego semafora skończyła się.
+.
MessageId=106
Severity=Success
@@ -870,6 +1098,9 @@ ERROR_SEM_USER_LIMIT - Insert the diskette for drive %1.
Language=Russian
ERROR_SEM_USER_LIMIT - Вставте дискету в дисковод %1.
.
+Language=Polish
+ERROR_SEM_USER_LIMIT - Włóż dyskietkę do stacji dysków %1.
+.
MessageId=107
Severity=Success
@@ -881,6 +1112,9 @@ ERROR_DISK_CHANGE - The program stopped because an alternate diskette was not in
Language=Russian
ERROR_DISK_CHANGE - Программа была остановлена, так как нужный диск вставлен не был.
.
+Language=Polish
+ERROR_DISK_CHANGE - Program przestał działać, ponieważ nie włożono innej dyskietki.
+.
MessageId=108
Severity=Success
@@ -892,6 +1126,9 @@ ERROR_DRIVE_LOCKED - The disk is in use or locked by another process.
Language=Russian
ERROR_DRIVE_LOCKED - Диск занят или заблокирован другим процессом.
.
+Language=Polish
+ERROR_DRIVE_LOCKED - Dysk jest w użyciu lub zablokowany przez inny proces.
+.
MessageId=109
Severity=Success
@@ -903,6 +1140,9 @@ ERROR_BROKEN_PIPE - The pipe has been ended.
Language=Russian
ERROR_BROKEN_PIPE - Канал был закрыт.
.
+Language=Polish
+ERROR_BROKEN_PIPE - Potok został zakończony.
+.
MessageId=110
Severity=Success
@@ -914,6 +1154,9 @@ ERROR_OPEN_FAILED - The system cannot open the device or file specified.
Language=Russian
ERROR_OPEN_FAILED - Системе не удается открыть указанное устройство или файл.
.
+Language=Polish
+ERROR_OPEN_FAILED - System nie może otworzyć określonego urządzenia lub pliku.
+.
MessageId=111
Severity=Success
@@ -925,6 +1168,9 @@ ERROR_BUFFER_OVERFLOW - The file name is too long.
Language=Russian
ERROR_BUFFER_OVERFLOW - Указано слишком длинное имя файла.
.
+Language=Polish
+ERROR_BUFFER_OVERFLOW - Nazwa pliku jest za długa.
+.
MessageId=112
Severity=Success
@@ -936,6 +1182,9 @@ ERROR_DISK_FULL - There is not enough space on the disk.
Language=Russian
ERROR_DISK_FULL - Недостаточно места на диске.
.
+Language=Polish
+ERROR_DISK_FULL - Za mało miejsca na dysku.
+.
MessageId=113
Severity=Success
@@ -947,6 +1196,9 @@ ERROR_NO_MORE_SEARCH_HANDLES - No more internal file identifiers available.
Language=Russian
ERROR_NO_MORE_SEARCH_HANDLES - Исчерпаны внутренние идентификаторы файлов.
.
+Language=Polish
+ERROR_NO_MORE_SEARCH_HANDLES - Brak dostępnych wewnętrznych identyfikatorów plików.
+.
MessageId=114
Severity=Success
@@ -958,6 +1210,9 @@ ERROR_INVALID_TARGET_HANDLE - The target internal file identifier is incorrect.
Language=Russian
ERROR_INVALID_TARGET_HANDLE - Результирующий внутренний идентификатор файла неправилен.
.
+Language=Polish
+ERROR_INVALID_TARGET_HANDLE - Wewnętrzny identyfikator pliku docelowego jest niepoprawny.
+.
MessageId=117
Severity=Success
@@ -969,6 +1224,9 @@ ERROR_INVALID_CATEGORY - The IOCTL call made by the application program is not c
Language=Russian
ERROR_INVALID_CATEGORY - Вызов IOCTL приложением произведен неверно.
.
+Language=Polish
+ERROR_INVALID_CATEGORY - Wywołanie IOCTL wykonane przez program aplikacji jest niepoprawne.
+.
MessageId=118
Severity=Success
@@ -980,6 +1238,9 @@ ERROR_INVALID_VERIFY_SWITCH - The verify-on-write switch parameter value is not
Language=Russian
ERROR_INVALID_VERIFY_SWITCH - Параметр проверки записи данных имеет неверное значение.
.
+Language=Polish
+ERROR_INVALID_VERIFY_SWITCH - Wartość parametru przełącznika sprawdź-przy-zapisie jest niepoprawna.
+.
MessageId=119
Severity=Success
@@ -991,6 +1252,9 @@ ERROR_BAD_DRIVER_LEVEL - The system does not support the command requested.
Language=Russian
ERROR_BAD_DRIVER_LEVEL - Система не может обработать полученную команду.
.
+Language=Polish
+ERROR_BAD_DRIVER_LEVEL - System nie obsługuje żądanego polecenia.
+.
MessageId=120
Severity=Success
@@ -1002,6 +1266,9 @@ ERROR_CALL_NOT_IMPLEMENTED - This function is not supported on this system.
Language=Russian
ERROR_CALL_NOT_IMPLEMENTED - Эта функция не поддерживается для этой системы.
.
+Language=Polish
+ERROR_CALL_NOT_IMPLEMENTED - Ta funkcja nie jest obsługiwana w tym systemie.
+.
MessageId=121
Severity=Success
@@ -1013,6 +1280,9 @@ ERROR_SEM_TIMEOUT - The semaphore timeout period has expired.
Language=Russian
ERROR_SEM_TIMEOUT - Превышен таймаут семафора.
.
+Language=Polish
+ERROR_SEM_TIMEOUT - Przekroczono limit czasu semafora.
+.
MessageId=122
Severity=Success
@@ -1024,6 +1294,9 @@ ERROR_INSUFFICIENT_BUFFER - The data area passed to a system call is too small.
Language=Russian
ERROR_INSUFFICIENT_BUFFER - Область данных, переданная по системному вызову, слишком мала.
.
+Language=Polish
+ERROR_INSUFFICIENT_BUFFER - Obszar danych przekazany do wywołania systemowego jest za mały.
+.
MessageId=123
Severity=Success
@@ -1035,6 +1308,9 @@ ERROR_INVALID_NAME - The filename, directory name, or volume label syntax is inc
Language=Russian
ERROR_INVALID_NAME - Синтаксическая ошибка в имени файла, имени папки или метке тома.
.
+Language=Polish
+ERROR_INVALID_NAME - Nazwa pliku, nazwa katalogu lub składnia etykiety woluminu jest niepoprawna.
+.
MessageId=124
Severity=Success
@@ -1046,6 +1322,9 @@ ERROR_INVALID_LEVEL - The system call level is not correct.
Language=Russian
ERROR_INVALID_LEVEL - Неверный уровень системного вызова.
.
+Language=Polish
+ERROR_INVALID_LEVEL - Poziom wywołania systemowego jest niepoprawny.
+.
MessageId=125
Severity=Success
@@ -1057,6 +1336,9 @@ ERROR_NO_VOLUME_LABEL - The disk has no volume label.
Language=Russian
ERROR_NO_VOLUME_LABEL - У диска отсутствует метка тома.
.
+Language=Polish
+ERROR_NO_VOLUME_LABEL - Dysk nie ma etykiety woluminu.
+.
MessageId=126
Severity=Success
@@ -1068,6 +1350,9 @@ ERROR_MOD_NOT_FOUND - The specified module could not be found.
Language=Russian
ERROR_MOD_NOT_FOUND - Не найден указанный модуль.
.
+Language=Polish
+ERROR_MOD_NOT_FOUND - Nie można odnaleźć określonego modułu.
+.
MessageId=127
Severity=Success
@@ -1079,6 +1364,9 @@ ERROR_PROC_NOT_FOUND - The specified procedure could not be found.
Language=Russian
ERROR_PROC_NOT_FOUND - Не найдена указанная процедура.
.
+Language=Polish
+ERROR_PROC_NOT_FOUND - Nie można odnaleźć określonej procedury.
+.
MessageId=128
Severity=Success
@@ -1090,6 +1378,9 @@ ERROR_WAIT_NO_CHILDREN - There are no child processes to wait for.
Language=Russian
ERROR_WAIT_NO_CHILDREN - Дочерние процессы, окончания которых требуется ожидать, отсутствуют.
.
+Language=Polish
+ERROR_WAIT_NO_CHILDREN - Nie ma procesów podrzędnych, na które trzeba by czekać.
+.
MessageId=129
Severity=Success
@@ -1101,6 +1392,9 @@ ERROR_CHILD_NOT_COMPLETE - The %1 application cannot be run in Win32 mode.
Language=Russian
ERROR_CHILD_NOT_COMPLETE - Приложение "%1" не может быть запущено в режиме Win32.
.
+Language=Polish
+ERROR_CHILD_NOT_COMPLETE - Nie można uruchomić %1 w trybie Win32.
+.
MessageId=130
Severity=Success
@@ -1112,6 +1406,9 @@ ERROR_DIRECT_ACCESS_HANDLE - Attempt to use a file handle to an open disk partit
Language=Russian
ERROR_DIRECT_ACCESS_HANDLE - Попытка использовать дескриптор файла для открытия раздела диска и выполнения операции, отличающейся от ввода/вывода нижнего уровня.
.
+Language=Polish
+ERROR_DIRECT_ACCESS_HANDLE - Próbowano użyć dojścia do pliku do otwarcia partycji dysku dla operacji innej niż czysta dyskowa operacja We/Wy.
+.
MessageId=131
Severity=Success
@@ -1123,6 +1420,9 @@ ERROR_NEGATIVE_SEEK - An attempt was made to move the file pointer before the be
Language=Russian
ERROR_NEGATIVE_SEEK - Попытка поместить указатель на файл перед началом файла.
.
+Language=Polish
+ERROR_NEGATIVE_SEEK - Wykonano próbę przesunięcia wskaźnika pliku przed początek pliku.
+.
MessageId=132
Severity=Success
@@ -1134,6 +1434,9 @@ ERROR_SEEK_ON_DEVICE - The file pointer cannot be set on the specified device or
Language=Russian
ERROR_SEEK_ON_DEVICE - Указатель на файл не может быть установлен на заданное устройство или файл.
.
+Language=Polish
+ERROR_SEEK_ON_DEVICE - Wskaźnik plików nie może być ustawiony na określonym urządzeniu lub pliku.
+.
MessageId=133
Severity=Success
@@ -1145,6 +1448,9 @@ ERROR_IS_JOIN_TARGET - A JOIN or SUBST command cannot be used for a drive that c
Language=Russian
ERROR_IS_JOIN_TARGET - Команды JOIN и SUBST не могут быть использованы для дисков, содержащих уже объединенные диски.
.
+Language=Polish
+ERROR_IS_JOIN_TARGET - Polecenia JOIN lub SUBST nie mogą być użyte na dysku zawierającym poprzednio sprzężone dyski.
+.
MessageId=134
Severity=Success
@@ -1156,6 +1462,9 @@ ERROR_IS_JOINED - An attempt was made to use a JOIN or SUBST command on a drive
Language=Russian
ERROR_IS_JOINED - Попытка использовать команду JOIN или SUBST для диска, уже включенного в набор объединенных дисков.
.
+Language=Polish
+ERROR_IS_JOINED - Wykonano próbę użycia polecenia JOIN lub SUBST dla dysku, który został już sprzęgnięty.
+.
MessageId=135
Severity=Success
@@ -1167,6 +1476,9 @@ ERROR_IS_SUBSTED - An attempt was made to use a JOIN or SUBST command on a drive
Language=Russian
ERROR_IS_SUBSTED - Попытка использовать команду JOIN или SUBST для диска, который уже был отображен.
.
+Language=Polish
+ERROR_IS_SUBSTED - Wykonano próbę użycia polecenia JOIN lub SUBST na dysku, który uległ już podstawieniu.
+.
MessageId=136
Severity=Success
@@ -1178,6 +1490,9 @@ ERROR_NOT_JOINED - The system tried to delete the JOIN of a drive that is not jo
Language=Russian
ERROR_NOT_JOINED - Попытка снять признак объединения с диска, для которого команда JOIN не выполнялась.
.
+Language=Polish
+ERROR_NOT_JOINED - System próbował usunąć stan JOIN dysku, który nie jest sprzęgnięty (JOIN).
+.
MessageId=137
Severity=Success
@@ -1189,6 +1504,9 @@ ERROR_NOT_SUBSTED - The system tried to delete the substitution of a drive that
Language=Russian
ERROR_NOT_SUBSTED - Попытка снять признак отображения с диска, для которого команда SUBST не выполнялась.
.
+Language=Polish
+ERROR_NOT_SUBSTED - System próbował usunąć podstawienie dysku, który nie uległ podstawieniu.
+.
MessageId=138
Severity=Success
@@ -1200,6 +1518,9 @@ ERROR_JOIN_TO_JOIN - The system tried to join a drive to a directory on a joined
Language=Russian
ERROR_JOIN_TO_JOIN - Попытка объединить диск с папкой на объединенном диске.
.
+Language=Polish
+ERROR_JOIN_TO_JOIN - System próbował sprzęgnąć dysk z katalogiem na dysku sprzęgniętym.
+.
MessageId=139
Severity=Success
@@ -1211,6 +1532,9 @@ ERROR_SUBST_TO_SUBST - The system tried to substitute a drive to a directory on
Language=Russian
ERROR_SUBST_TO_SUBST - Попытка отобразить диск на папку, находящуюся на отображенном диске.
.
+Language=Polish
+ERROR_SUBST_TO_SUBST - System próbował dokonać podstawienia dysku przez katalog na dysku poddanym podstawieniu.
+.
MessageId=140
Severity=Success
@@ -1222,6 +1546,9 @@ ERROR_JOIN_TO_SUBST - The system tried to join a drive to a directory on a subst
Language=Russian
ERROR_JOIN_TO_SUBST - Попытка объединить диск с папкой на отображенном диске.
.
+Language=Polish
+ERROR_JOIN_TO_SUBST - System próbował sprzęgnąć dysk z katalogiem na dysku poddanym podstawieniu.
+.
MessageId=141
Severity=Success
@@ -1233,6 +1560,9 @@ ERROR_SUBST_TO_JOIN - The system tried to SUBST a drive to a directory on a join
Language=Russian
ERROR_SUBST_TO_JOIN - Попытка отобразить диск на папку, находящуюся на объединенном диске.
.
+Language=Polish
+ERROR_SUBST_TO_JOIN - System próbował dokonać podstawienia dysku przez katalog na dysku sprzęgniętym.
+.
MessageId=142
Severity=Success
@@ -1244,6 +1574,9 @@ ERROR_BUSY_DRIVE - The system cannot perform a JOIN or SUBST at this time.
Language=Russian
ERROR_BUSY_DRIVE - В настоящее время выполнить команду JOIN или SUBST невозможно.
.
+Language=Polish
+ERROR_BUSY_DRIVE - System nie może teraz wykonać polecenia JOIN ani SUBST.
+.
MessageId=143
Severity=Success
@@ -1255,6 +1588,9 @@ ERROR_SAME_DRIVE - The system cannot join or substitute a drive to or for a dire
Language=Russian
ERROR_SAME_DRIVE - Невозможно объединить (или отобразить) диск с папкой (или на папку) этого же диска.
.
+Language=Polish
+ERROR_SAME_DRIVE - System nie może sprzęgnąć lub dokonać podstawienia dysku (JOIN lub SUBST) przy użyciu katalogu na tym samym dysku.
+.
MessageId=144
Severity=Success
@@ -1266,6 +1602,9 @@ ERROR_DIR_NOT_ROOT - The directory is not a subdirectory of the root directory.
Language=Russian
ERROR_DIR_NOT_ROOT - Эта папка не является подпапкой корневой папки.
.
+Language=Polish
+ERROR_DIR_NOT_ROOT - Katalog nie jest podkatalogiem katalogu głównego.
+.
MessageId=145
Severity=Success
@@ -1277,6 +1616,9 @@ ERROR_DIR_NOT_EMPTY - The directory is not empty.
Language=Russian
ERROR_DIR_NOT_EMPTY - Папка не пуста.
.
+Language=Polish
+ERROR_DIR_NOT_EMPTY - Katalog nie jest pusty.
+.
MessageId=146
Severity=Success
@@ -1288,6 +1630,9 @@ ERROR_IS_SUBST_PATH - The path specified is being used in a substitute.
Language=Russian
ERROR_IS_SUBST_PATH - Указанный путь используется для отображенного диска.
.
+Language=Polish
+ERROR_IS_SUBST_PATH - Określona ścieżka jest używana w podstawieniu.
+.
MessageId=147
Severity=Success
@@ -1299,6 +1644,9 @@ ERROR_IS_JOIN_PATH - Not enough resources are available to process this command.
Language=Russian
ERROR_IS_JOIN_PATH - Недостаточно ресурсов для обработки команды.
.
+Language=Polish
+ERROR_IS_JOIN_PATH - Za mało zasobów do przetworzenia tego polecenia.
+.
MessageId=148
Severity=Success
@@ -1310,6 +1658,9 @@ ERROR_PATH_BUSY - The path specified cannot be used at this time.
Language=Russian
ERROR_PATH_BUSY - Указанный путь невозможно использовать сейчас.
.
+Language=Polish
+ERROR_PATH_BUSY - Nie można teraz użyć określonej ścieżki.
+.
MessageId=149
Severity=Success
@@ -1321,6 +1672,9 @@ ERROR_IS_SUBST_TARGET - An attempt was made to join or substitute a drive for wh
Language=Russian
ERROR_IS_SUBST_TARGET - Попытка объединить или отобразить диск, папка на котором уже используется для отображения.
.
+Language=Polish
+ERROR_IS_SUBST_TARGET - Wykonano próbę sprzęgnięcia (JOIN) lub podstawienia (SUBST) dysku, dla którego katalog na dysku jest katalogiem docelowym poprzedniego podstawienia.
+.
MessageId=150
Severity=Success
@@ -1332,6 +1686,9 @@ ERROR_SYSTEM_TRACE - System trace information was not specified in your CONFIG.S
Language=Russian
ERROR_SYSTEM_TRACE - Сведения о трассировке в файле CONFIG.SYS не найдены, либо трассировка запрещена.
.
+Language=Polish
+ERROR_SYSTEM_TRACE - СInformacje o śledzeniu systemu nie zostały określone w pliku CONFIG.SYS lub śledzenie jest niedozwolone.
+.
MessageId=151
Severity=Success
@@ -1343,6 +1700,9 @@ ERROR_INVALID_EVENT_COUNT - The number of specified semaphore events for DosMuxS
Language=Russian
ERROR_INVALID_EVENT_COUNT - Число семафоров для DosMuxSemWait задано неверно.
.
+Language=Polish
+ERROR_INVALID_EVENT_COUNT - Liczba określonych zdarzeń semafora dla DosMuxSemWait jest niepoprawna.
+.
MessageId=152
Severity=Success
@@ -1354,6 +1714,9 @@ ERROR_TOO_MANY_MUXWAITERS - DosMuxSemWait did not execute; too many semaphores a
Language=Russian
ERROR_TOO_MANY_MUXWAITERS - Не выполнен вызов DosMuxSemWait. Установлено слишком много семафоров.
.
+Language=Polish
+ERROR_TOO_MANY_MUXWAITERS - Nie wykonano funkcji DosMuxSemWait; za dużo semaforów jest już ustawionych.
+.
MessageId=153
Severity=Success
@@ -1365,6 +1728,9 @@ ERROR_INVALID_LIST_FORMAT - The DosMuxSemWait list is not correct.
Language=Russian
ERROR_INVALID_LIST_FORMAT - Некорректный вызов DosMuxSemWait.
.
+Language=Polish
+ERROR_INVALID_LIST_FORMAT - Lista DosMuxSemWait jest niepoprawna.
+.
MessageId=154
Severity=Success
@@ -1376,6 +1742,9 @@ ERROR_LABEL_TOO_LONG - The volume label you entered exceeds the label character
Language=Russian
ERROR_LABEL_TOO_LONG - Длина метки тома превосходит предел, установленный для файловой системы.
.
+Language=Polish
+ERROR_LABEL_TOO_LONG - Wprowadzona etykieta woluminu przekracza limit znaków etykiety docelowego systemu plików.
+.
MessageId=155
Severity=Success
@@ -1387,6 +1756,9 @@ ERROR_TOO_MANY_TCBS - Cannot create another thread.
Language=Russian
ERROR_TOO_MANY_TCBS - Не удается создать еще один поток команд.
.
+Language=Polish
+ERROR_TOO_MANY_TCBS - Nie można utworzyć innego wątku.
+.
MessageId=156
Severity=Success
@@ -1398,6 +1770,9 @@ ERROR_SIGNAL_REFUSED - The recipient process has refused the signal.
Language=Russian
ERROR_SIGNAL_REFUSED - Принимающий процесс отклонил сигнал.
.
+Language=Polish
+ERROR_SIGNAL_REFUSED - Proces odbiorczy odrzucił sygnał.
+.
MessageId=157
Severity=Success
@@ -1409,6 +1784,9 @@ ERROR_DISCARDED - The segment is already discarded and cannot be locked.
Language=Russian
ERROR_DISCARDED - Сегмент уже освобожден и не может быть заблокирован.
.
+Language=Polish
+ERROR_DISCARDED - Segment jest już zarzucony i nie można go zablokować.
+.
MessageId=158
Severity=Success
@@ -1420,6 +1798,9 @@ ERROR_NOT_LOCKED - The segment is already unlocked.
Language=Russian
ERROR_NOT_LOCKED - Блокировка с сегмента уже снята.
.
+Language=Polish
+ERROR_NOT_LOCKED - Segment jest już odblokowany.
+.
MessageId=159
Severity=Success
@@ -1431,6 +1812,9 @@ ERROR_BAD_THREADID_ADDR - The address for the thread ID is not correct.
Language=Russian
ERROR_BAD_THREADID_ADDR - Адрес идентификатора потока команд задан неверно.
.
+Language=Polish
+ERROR_BAD_THREADID_ADDR - Adres identyfikatora wątku jest niepoprawny.
+.
MessageId=160
Severity=Success
@@ -1442,6 +1826,9 @@ ERROR_BAD_ARGUMENTS - The argument string passed to DosExecPgm is not correct.
Language=Russian
ERROR_BAD_ARGUMENTS - Неверны один или несколько аргументов.
.
+Language=Polish
+ERROR_BAD_ARGUMENTS - Co najmniej jeden argument jest niepoprawny.
+.
MessageId=161
Severity=Success
@@ -1453,6 +1840,9 @@ ERROR_BAD_PATHNAME - The specified path is invalid.
Language=Russian
ERROR_BAD_PATHNAME - Указан недопустимый путь.
.
+Language=Polish
+ERROR_BAD_PATHNAME - Określona ścieżka jest nieprawidłowa.
+.
MessageId=162
Severity=Success
@@ -1464,6 +1854,9 @@ ERROR_SIGNAL_PENDING - A signal is already pending.
Language=Russian
ERROR_SIGNAL_PENDING - Сигнал уже находится в состоянии обработки.
.
+Language=Polish
+ERROR_SIGNAL_PENDING - Sygnał jest już w stanie oczekiwania.
+.
MessageId=164
Severity=Success
@@ -1475,6 +1868,9 @@ ERROR_MAX_THRDS_REACHED - No more threads can be created in the system.
Language=Russian
ERROR_MAX_THRDS_REACHED - Создание дополнительных потоков команд невозможно.
.
+Language=Polish
+ERROR_MAX_THRDS_REACHED - W systemie nie można utworzyć dalszych wątków.
+.
MessageId=167
Severity=Success
@@ -1486,6 +1882,9 @@ ERROR_LOCK_FAILED - Unable to lock a region of a file.
Language=Russian
ERROR_LOCK_FAILED - Не удается снять блокировку с области файла.
.
+Language=Polish
+ERROR_LOCK_FAILED - Nie można zablokować regionu pliku.
+.
MessageId=170
Severity=Success
@@ -1497,6 +1896,9 @@ ERROR_BUSY - The requested resource is in use.
Language=Russian
ERROR_BUSY - Требуемый ресурс занят.
.
+Language=Polish
+ERROR_BUSY - Żądane zasoby są w użyciu.
+.
MessageId=173
Severity=Success
@@ -1508,6 +1910,9 @@ ERROR_CANCEL_VIOLATION - A lock request was not outstanding for the supplied can
Language=Russian
ERROR_CANCEL_VIOLATION - Запрос на блокировку соответствует определенной области.
.
+Language=Polish
+ERROR_CANCEL_VIOLATION - Żądanie zablokowania nie było zaległe dla podanego regionu anulowania.
+.
MessageId=174
Severity=Success
@@ -1519,6 +1924,9 @@ ERROR_ATOMIC_LOCKS_NOT_SUPPORTED - The file system does not support atomic chang
Language=Russian
ERROR_ATOMIC_LOCKS_NOT_SUPPORTED - Файловая система не поддерживает указанные изменения типа блокировки.
.
+Language=Polish
+ERROR_ATOMIC_LOCKS_NOT_SUPPORTED - System plików nie obsługuje zmian częściowych dotyczących typu blokady.
+.
MessageId=180
Severity=Success
@@ -1530,6 +1938,9 @@ ERROR_INVALID_SEGMENT_NUMBER - The system detected a segment number that was not
Language=Russian
ERROR_INVALID_SEGMENT_NUMBER - Система обнаружила неверный номер сегмента.
.
+Language=Polish
+ERROR_INVALID_SEGMENT_NUMBER - System wykrył niepoprawny numer segmentu.
+.
MessageId=182
Severity=Success
@@ -1541,6 +1952,9 @@ ERROR_INVALID_ORDINAL - The operating system cannot run %1.
Language=Russian
ERROR_INVALID_ORDINAL - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_INVALID_ORDINAL - System operacyjny nie może uruchomić %1.
+.
MessageId=183
Severity=Success
@@ -1552,6 +1966,9 @@ ERROR_ALREADY_EXISTS - Cannot create a file when that file already exists.
Language=Russian
ERROR_ALREADY_EXISTS - Невозможно создать файл, так как он уже существует.
.
+Language=Polish
+ERROR_ALREADY_EXISTS - Nie można utworzyć pliku, który już istnieje.
+.
MessageId=186
Severity=Success
@@ -1563,6 +1980,9 @@ ERROR_INVALID_FLAG_NUMBER - The flag passed is not correct.
Language=Russian
ERROR_INVALID_FLAG_NUMBER - Передан неверный флаг.
.
+Language=Polish
+ERROR_INVALID_FLAG_NUMBER - Przekazana flaga jest niepoprawna.
+.
MessageId=187
Severity=Success
@@ -1574,6 +1994,9 @@ ERROR_SEM_NOT_FOUND - The specified system semaphore name was not found.
Language=Russian
ERROR_SEM_NOT_FOUND - Не найдено указанное имя системного семафора.
.
+Language=Polish
+ERROR_SEM_NOT_FOUND - Nie odnaleziono określonej nazwy semafora systemowego.
+.
MessageId=188
Severity=Success
@@ -1585,6 +2008,9 @@ ERROR_INVALID_STARTING_CODESEG - The operating system cannot run %1.
Language=Russian
ERROR_INVALID_STARTING_CODESEG - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_INVALID_STARTING_CODESEG - System operacyjny nie może uruchomić %1.
+.
MessageId=189
Severity=Success
@@ -1596,6 +2022,9 @@ ERROR_INVALID_STACKSEG - The operating system cannot run %1.
Language=Russian
ERROR_INVALID_STACKSEG - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_INVALID_STACKSEG - System operacyjny nie może uruchomić %1.
+.
MessageId=190
Severity=Success
@@ -1607,6 +2036,9 @@ ERROR_INVALID_MODULETYPE - The operating system cannot run %1.
Language=Russian
ERROR_INVALID_MODULETYPE - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_INVALID_MODULETYPE - System operacyjny nie może uruchomić %1.
+.
MessageId=191
Severity=Success
@@ -1618,6 +2050,9 @@ ERROR_INVALID_EXE_SIGNATURE - Cannot run %1 in Win32 mode.
Language=Russian
ERROR_INVALID_EXE_SIGNATURE - Невозможно запустить "%1" в режиме Win32.
.
+Language=Polish
+ERROR_INVALID_EXE_SIGNATURE - Nie można uruchomić %1 w trybie Win32.
+.
MessageId=192
Severity=Success
@@ -1629,6 +2064,9 @@ ERROR_EXE_MARKED_INVALID - The operating system cannot run %1.
Language=Russian
ERROR_EXE_MARKED_INVALID - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_EXE_MARKED_INVALID - System operacyjny nie może uruchomić %1.
+.
MessageId=193
Severity=Success
@@ -1640,6 +2078,9 @@ ERROR_BAD_EXE_FORMAT - %1 is not a valid Win32 application.
Language=Russian
ERROR_BAD_EXE_FORMAT - "%1" не является приложением Win32.
.
+Language=Polish
+ERROR_BAD_EXE_FORMAT - %1 nie jest prawidłową aplikacją systemu Win32.
+.
MessageId=194
Severity=Success
@@ -1651,6 +2092,9 @@ ERROR_ITERATED_DATA_EXCEEDS_64k - The operating system cannot run %1.
Language=Russian
ERROR_ITERATED_DATA_EXCEEDS_64k - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_ITERATED_DATA_EXCEEDS_64k - System operacyjny nie może uruchomić %1.
+.
MessageId=195
Severity=Success
@@ -1662,6 +2106,9 @@ ERROR_INVALID_MINALLOCSIZE - The operating system cannot run %1.
Language=Russian
ERROR_INVALID_MINALLOCSIZE - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_INVALID_MINALLOCSIZE - System operacyjny nie może uruchomić %1.
+.
MessageId=196
Severity=Success
@@ -1673,6 +2120,9 @@ ERROR_DYNLINK_FROM_INVALID_RING - The operating system cannot run this applicati
Language=Russian
ERROR_DYNLINK_FROM_INVALID_RING - Операционная система не может запустить это приложение.
.
+Language=Polish
+ERROR_DYNLINK_FROM_INVALID_RING - System operacyjny nie może uruchomić tej aplikacji programu.
+.
MessageId=197
Severity=Success
@@ -1684,6 +2134,9 @@ ERROR_IOPL_NOT_ENABLED - The operating system is not presently configured to run
Language=Russian
ERROR_IOPL_NOT_ENABLED - Конфигурация операционной системы не рассчитана на запуск этого приложения.
.
+Language=Polish
+ERROR_IOPL_NOT_ENABLED - System operacyjny nie jest obecnie skonfigurowany do uruchomienia tej aplikacji.
+.
MessageId=198
Severity=Success
@@ -1695,6 +2148,9 @@ ERROR_INVALID_SEGDPL - The operating system cannot run %1.
Language=Russian
ERROR_INVALID_SEGDPL - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_INVALID_SEGDPL - System operacyjny nie może uruchomić %1.
+.
MessageId=199
Severity=Success
@@ -1706,6 +2162,9 @@ ERROR_AUTODATASEG_EXCEEDS_64k - The operating system cannot run this application
Language=Russian
ERROR_AUTODATASEG_EXCEEDS_64k - Операционная система не может запустить это приложение.
.
+Language=Polish
+ERROR_AUTODATASEG_EXCEEDS_64k - System operacyjny nie może uruchomić tej aplikacji programu.
+.
MessageId=200
Severity=Success
@@ -1717,6 +2176,9 @@ ERROR_RING2SEG_MUST_BE_MOVABLE - The code segment cannot be greater than or equa
Language=Russian
ERROR_RING2SEG_MUST_BE_MOVABLE - Сегмент кода должен быть меньше 64 КБ.
.
+Language=Polish
+ERROR_RING2SEG_MUST_BE_MOVABLE - Segment kodu nie może być większy niż lub równy 64 KB.
+.
MessageId=201
Severity=Success
@@ -1728,6 +2190,9 @@ ERROR_RELOC_CHAIN_XEEDS_SEGLIM - The operating system cannot run %1.
Language=Russian
ERROR_RELOC_CHAIN_XEEDS_SEGLIM - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_RELOC_CHAIN_XEEDS_SEGLIM - System operacyjny nie może uruchomić %1.
+.
MessageId=202
Severity=Success
@@ -1739,6 +2204,9 @@ ERROR_INFLOOP_IN_RELOC_CHAIN - The operating system cannot run %1.
Language=Russian
ERROR_INFLOOP_IN_RELOC_CHAIN - Операционная система не может выполнить "%1".
.
+Language=Polish
+ERROR_INFLOOP_IN_RELOC_CHAIN - System operacyjny nie może uruchomić %1.
+.
MessageId=203
Severity=Success
@@ -1750,6 +2218,9 @@ ERROR_ENVVAR_NOT_FOUND - The system could not find the environment option that w
Language=Russian
ERROR_ENVVAR_NOT_FOUND - Системе не удается найти указанный параметр среды.
.
+Language=Polish
+ERROR_ENVVAR_NOT_FOUND - System nie mógł znaleźć opcji środowiska, która została wprowadzona.
+.
MessageId=205
Severity=Success
@@ -1761,6 +2232,9 @@ ERROR_NO_SIGNAL_SENT - No process in the command subtree has a signal handler.
Language=Russian
ERROR_NO_SIGNAL_SENT - Ни один из процессов в дереве команды не имеет обработчика сигналов.
.
+Language=Polish
+ERROR_NO_SIGNAL_SENT - Żaden proces w poddrzewie polecenia nie ma obsługi sygnałów.
+.
MessageId=206
Severity=Success
@@ -1772,6 +2246,9 @@ ERROR_FILENAME_EXCED_RANGE - The filename or extension is too long.
Language=Russian
ERROR_FILENAME_EXCED_RANGE - Имя файла или его расширение имеет слишком большую длину.
.
+Language=Polish
+ERROR_FILENAME_EXCED_RANGE - Nazwa pliku lub jej rozszerzenie są za długie.
+.
MessageId=207
Severity=Success
@@ -1783,6 +2260,9 @@ ERROR_RING2_STACK_IN_USE - The ring 2 stack is in use.
Language=Russian
ERROR_RING2_STACK_IN_USE - Кольцо 2 стека занято.
.
+Language=Polish
+ERROR_RING2_STACK_IN_USE - Stos ring 2 jest w użyciu.
+.
MessageId=208
Severity=Success
@@ -1794,6 +2274,9 @@ ERROR_META_EXPANSION_TOO_LONG - The global filename characters, * or ?, are ente
Language=Russian
ERROR_META_EXPANSION_TOO_LONG - Подстановочные знаки * и/или ? заданы неверно или образуют неверный шаблон имени.
.
+Language=Polish
+ERROR_META_EXPANSION_TOO_LONG - Znaki globalne w nazwach plików, * lub ?, są niepoprawnie wprowadzone lub określono za dużo znaków globalnych.
+.
MessageId=209
Severity=Success
@@ -1805,6 +2288,9 @@ ERROR_INVALID_SIGNAL_NUMBER - The signal being posted is not correct.
Language=Russian
ERROR_INVALID_SIGNAL_NUMBER - Отправляемый сигнал неверен.
.
+Language=Polish
+ERROR_INVALID_SIGNAL_NUMBER - Ogłaszany sygnał jest nieprawidłowy.
+.
MessageId=210
Severity=Success
@@ -1816,6 +2302,9 @@ ERROR_THREAD_1_INACTIVE - The signal handler cannot be set.
Language=Russian
ERROR_THREAD_1_INACTIVE - Не удается установить обработчик сигналов.
.
+Language=Polish
+ERROR_THREAD_1_INACTIVE - Nie można ustawić programu obsługi sygnałów.
+.
MessageId=212
Severity=Success
@@ -1827,6 +2316,9 @@ ERROR_LOCKED - The segment is locked and cannot be reallocated.
Language=Russian
ERROR_LOCKED - Сегмент заблокирован и не может быть перемещен.
.
+Language=Polish
+ERROR_LOCKED - Segment jest zablokowany i nie można przydzielić go ponownie.
+.
MessageId=214
Severity=Success
@@ -1838,6 +2330,9 @@ ERROR_TOO_MANY_MODULES - Too many dynamic-link modules are attached to this prog
Language=Russian
ERROR_TOO_MANY_MODULES - К этой программе или модулю присоединено слишком много динамически подключаемых модулей.
.
+Language=Polish
+ERROR_TOO_MANY_MODULES - Do tego programu lub modułu dołączono za dużo modułów dołączanych dynamicznie.
+.
MessageId=215
Severity=Success
@@ -1849,6 +2344,9 @@ ERROR_NESTING_NOT_ALLOWED - Cannot nest calls to LoadModule.
Language=Russian
ERROR_NESTING_NOT_ALLOWED - Вызовы LoadModule не могут быть вложены.
.
+Language=Polish
+ERROR_NESTING_NOT_ALLOWED - Nie można zagnieżdżać wywołań funkcji LoadModule.
+.
MessageId=216
Severity=Success
@@ -1860,6 +2358,9 @@ ERROR_EXE_MACHINE_TYPE_MISMATCH - The image file %1 is valid, but is for a machi
Language=Russian
ERROR_EXE_MACHINE_TYPE_MISMATCH - The image file %1 is valid, but is for a machine type other than the current machine.
.
+Language=Polish
+ERROR_EXE_MACHINE_TYPE_MISMATCH - Plik obrazu %1 jest prawidłowy, ale jest przeznaczony na komputer innego typu niż obecny.
+.
MessageId=217
Severity=Success
@@ -1871,6 +2372,9 @@ ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY - The image file %1 is signed, unable to m
Language=Russian
ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY - The image file %1 is signed, unable to modify.
.
+Language=Polish
+ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY - Plik obrazu %1 jest podpisany, nie można go zmodyfikować.
+.
MessageId=218
Severity=Success
@@ -1882,6 +2386,9 @@ ERRO_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY - The image file %1 is strong signed
Language=Russian
ERRO_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY - The image file %1 is strong signed, unable to modify.
.
+Language=Polish
+ERRO_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY - Plik obrazu %1 ma silny podpis, nie można go zmodyfikować.
+.
MessageId=230
Severity=Success
@@ -1893,6 +2400,9 @@ ERROR_BAD_PIPE - The pipe state is invalid.
Language=Russian
ERROR_BAD_PIPE - The pipe state is invalid.
.
+Language=Polish
+ERROR_BAD_PIPE - Stan potoku jest nieprawidłowy.
+.
MessageId=231
Severity=Success
@@ -1904,6 +2414,9 @@ ERROR_PIPE_BUSY - All pipe instances are busy.
Language=Russian
ERROR_PIPE_BUSY - All pipe instances are busy.
.
+Language=Polish
+ERROR_PIPE_BUSY - Wszystkie wystąpienia potoku są zajęte.
+.
MessageId=232
Severity=Success
@@ -1915,6 +2428,9 @@ ERROR_NO_DATA - The pipe is being closed.
Language=Russian
ERROR_NO_DATA - The pipe is being closed.
.
+Language=Polish
+ERROR_NO_DATA - Trwa zamykanie potoku.
+.
MessageId=233
Severity=Success
@@ -1926,6 +2442,9 @@ ERROR_PIPE_NOT_CONNECTED - No process is on the other end of the pipe.
Language=Russian
ERROR_PIPE_NOT_CONNECTED - No process is on the other end of the pipe.
.
+Language=Polish
+ERROR_PIPE_NOT_CONNECTED - Na drugim końcu potoku nie ma żadnego procesu.
+.
MessageId=234
Severity=Success
@@ -1937,6 +2456,9 @@ ERROR_MORE_DATA - More data is available.
Language=Russian
ERROR_MORE_DATA - More data is available.
.
+Language=Polish
+ERROR_MORE_DATA - Dostępnych jest więcej danych.
+.
MessageId=240
Severity=Success
@@ -1948,6 +2470,9 @@ ERROR_VC_DISCONNECTED - The session was canceled.
Language=Russian
ERROR_VC_DISCONNECTED - The session was canceled.
.
+Language=Polish
+ERROR_VC_DISCONNECTED - Sesja została anulowana.
+.
MessageId=254
Severity=Success
@@ -1959,6 +2484,9 @@ ERROR_INVALID_EA_NAME - The specified extended attribute name was invalid.
Language=Russian
ERROR_INVALID_EA_NAME - The specified extended attribute name was invalid.
.
+Language=Polish
+ERROR_INVALID_EA_NAME - Określona nazwa atrybutu rozszerzonego jest nieprawidłowa.
+.
MessageId=255
Severity=Success
@@ -1970,6 +2498,9 @@ ERROR_EA_LIST_INCONSISTENT - The extended attributes are inconsistent.
Language=Russian
ERROR_EA_LIST_INCONSISTENT - The extended attributes are inconsistent.
.
+Language=Polish
+ERROR_EA_LIST_INCONSISTENT - Atrybuty rozszerzone są niezgodne.
+.
MessageId=258
Severity=Success
@@ -1981,6 +2512,9 @@ WAIT_TIMEOUT - The wait operation timed out.
Language=Russian
WAIT_TIMEOUT - The wait operation timed out.
.
+Language=Polish
+WAIT_TIMEOUT - Upłynął limit czasu operacji oczekiwania.
+.
MessageId=259
Severity=Success
@@ -1992,6 +2526,9 @@ ERROR_NO_MORE_ITEMS - No more data is available.
Language=Russian
ERROR_NO_MORE_ITEMS - No more data is available.
.
+Language=Polish
+ERROR_NO_MORE_ITEMS - Brak dalszych danych.
+.
MessageId=266
Severity=Success
@@ -2003,6 +2540,9 @@ ERROR_CANNOT_COPY - The copy functions cannot be used.
Language=Russian
ERROR_CANNOT_COPY - The copy functions cannot be used.
.
+Language=Polish
+ERROR_CANNOT_COPY - Nie można używać funkcji kopiowania.
+.
MessageId=267
Severity=Success
@@ -2014,6 +2554,9 @@ ERROR_DIRECTORY - The directory name is invalid.
Language=Russian
ERROR_DIRECTORY - The directory name is invalid.
.
+Language=Polish
+ERROR_DIRECTORY - Nazwa katalogu jest nieprawidłowa.
+.
MessageId=275
Severity=Success
@@ -2025,6 +2568,9 @@ ERROR_EAS_DIDNT_FIT - The extended attributes did not fit in the buffer.
Language=Russian
ERROR_EAS_DIDNT_FIT - The extended attributes did not fit in the buffer.
.
+Language=Polish
+ERROR_EAS_DIDNT_FIT - Atrybuty rozszerzone nie zmieściły się w buforze.
+.
MessageId=276
Severity=Success
@@ -2036,6 +2582,9 @@ ERROR_EA_FILE_CORRUPT - The extended attribute file on the mounted file system i
Language=Russian
ERROR_EA_FILE_CORRUPT - The extended attribute file on the mounted file system is corrupt.
.
+Language=Polish
+ERROR_EA_FILE_CORRUPT - Plik atrybutów rozszerzonych w zainstalowanym systemie plików jest uszkodzony.
+.
MessageId=277
Severity=Success
@@ -2047,6 +2596,9 @@ ERROR_EA_TABLE_FULL - The extended attribute table file is full.
Language=Russian
ERROR_EA_TABLE_FULL - The extended attribute table file is full.
.
+Language=Polish
+ERROR_EA_TABLE_FULL - Tabela atrybutów rozszerzonych jest zapełniona.
+.
MessageId=278
Severity=Success
@@ -2058,6 +2610,9 @@ ERROR_INVALID_EA_HANDLE - The specified extended attribute handle is invalid.
Language=Russian
ERROR_INVALID_EA_HANDLE - The specified extended attribute handle is invalid.
.
+Language=Polish
+ERROR_INVALID_EA_HANDLE - Określone dojście atrybutu rozszerzonego jest nieprawidłowe.
+.
MessageId=282
Severity=Success
@@ -2069,6 +2624,9 @@ ERROR_EAS_NOT_SUPPORTED - The mounted file system does not support extended attr
Language=Russian
ERROR_EAS_NOT_SUPPORTED - The mounted file system does not support extended attributes.
.
+Language=Polish
+ERROR_EAS_NOT_SUPPORTED - Zainstalowany system plików nie obsługuje atrybutów rozszerzonych.
+.
MessageId=288
Severity=Success
@@ -2080,6 +2638,9 @@ ERROR_NOT_OWNER - Attempt to release mutex not owned by caller.
Language=Russian
ERROR_NOT_OWNER - Attempt to release mutex not owned by caller.
.
+Language=Polish
+ERROR_NOT_OWNER - Próbowano zwolnić mutex nie będący własnością wywołującego.
+.
MessageId=298
Severity=Success
@@ -2091,6 +2652,9 @@ ERROR_TOO_MANY_POSTS - Too many posts were made to a semaphore.
Language=Russian
ERROR_TOO_MANY_POSTS - Too many posts were made to a semaphore.
.
+Language=Polish
+ERROR_TOO_MANY_POSTS - Wykonano za dużo przesłań do semafora.
+.
MessageId=299
Severity=Success
@@ -2102,6 +2666,9 @@ ERROR_PARTIAL_COPY - Only part of a ReadProcessMemory or WriteProcessMemory requ
Language=Russian
ERROR_PARTIAL_COPY - Only part of a ReadProcessMemory or WriteProcessMemory request was completed.
.
+Language=Polish
+ERROR_PARTIAL_COPY - Ukończono tylko część żądania ReadProcessMemory lub WriteProcessMemory.
+.
MessageId=300
Severity=Success
@@ -2113,6 +2680,9 @@ ERROR_OPLOCK_NOT_GRANTED - The oplock request is denied.
Language=Russian
ERROR_OPLOCK_NOT_GRANTED - The oplock request is denied.
.
+Language=Polish
+ERROR_OPLOCK_NOT_GRANTED - Odmowa żądania operacji oplock.
+.
MessageId=301
Severity=Success
@@ -2124,6 +2694,9 @@ ERROR_INVALID_OPLOCK_PROTOCOL - An invalid oplock acknowledgment was received by
Language=Russian
ERROR_INVALID_OPLOCK_PROTOCOL - An invalid oplock acknowledgment was received by the system.
.
+Language=Polish
+ERROR_INVALID_OPLOCK_PROTOCOL - System odebrał nieprawidłowe potwierdzenie zablokowania operacji.
+.
MessageId=302
Severity=Success
@@ -2135,6 +2708,9 @@ ERROR_DISK_TOO_FRAGMENTED - The volume is too fragmented to complete this operat
Language=Russian
ERROR_DISK_TOO_FRAGMENTED - The volume is too fragmented to complete this operation.
.
+Language=Polish
+ERROR_DISK_TOO_FRAGMENTED - Wolumin jest zbyt pofragmentowany, aby ukończyć tę operację.
+.
MessageId=303
Severity=Success
@@ -2146,6 +2722,9 @@ ERROR_DELETE_PENDING - The file cannot be opened because it is in the process of
Language=Russian
ERROR_DELETE_PENDING - The file cannot be opened because it is in the process of being deleted.
.
+Language=Polish
+ERROR_DELETE_PENDING - Nie można otworzyć pliku, ponieważ trwa proces jego usuwania.
+.
MessageId=317
Severity=Success
@@ -2157,6 +2736,9 @@ ERROR_MR_MID_NOT_FOUND - The system cannot find message text for message number
Language=Russian
ERROR_MR_MID_NOT_FOUND - The system cannot find message text for message number 0x%1 in the message file for %2.
.
+Language=Polish
+ERROR_MR_MID_NOT_FOUND - System nie może znaleźć komunikatu dla numeru komunikatu 0x%1 w pliku komunikatów dla %2.
+.
MessageId=318
Severity=Success
@@ -2168,6 +2750,9 @@ ERROR_SCOPE_NOT_FOUND - The scope specified was not found.
Language=Russian
ERROR_SCOPE_NOT_FOUND - The scope specified was not found.
.
+Language=Polish
+ERROR_SCOPE_NOT_FOUND - Nie można odnaleźć określonego zakresu.
+.
MessageId=487
Severity=Success
@@ -2179,6 +2764,9 @@ ERROR_INVALID_ADDRESS - Attempt to access invalid address.
Language=Russian
ERROR_INVALID_ADDRESS - Attempt to access invalid address.
.
+Language=Polish
+ERROR_INVALID_ADDRESS - Próbowano uzyskać dostęp do nieprawidłowego adresu.
+.
MessageId=534
Severity=Success
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e3b9152935c03c40e02a3…
commit e3b9152935c03c40e02a372ee2224124ffdc0d91
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Mon Jul 23 00:15:23 2018 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Sun Aug 19 22:18:41 2018 +0200
[WIN32K:NTUSER] For processes that start without any window station and no desktops but manage these (e.g. winlogon.exe), assign their startup desktop when they assign a desktop to one of their threads.
---
win32ss/user/ntuser/desktop.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/win32ss/user/ntuser/desktop.c b/win32ss/user/ntuser/desktop.c
index ad070ad4f2..4cfdde9af7 100644
--- a/win32ss/user/ntuser/desktop.c
+++ b/win32ss/user/ntuser/desktop.c
@@ -3210,6 +3210,39 @@ IntSetThreadDesktop(IN HDESK hDesktop,
}
}
+ /*
+ * Processes, in particular Winlogon.exe, that manage window stations
+ * (especially the interactive WinSta0 window station) and desktops,
+ * may not be able to connect at startup to a window station and have
+ * an associated desktop as well, if none exists on the system already.
+ * Because creating a new window station does not affect the window station
+ * associated to the process, and because neither by associating a window
+ * station to the process nor creating a new desktop on it does associate
+ * a startup desktop to that process, the process has to actually assigns
+ * one of its threads to a desktop so that it gets automatically an assigned
+ * startup desktop.
+ *
+ * This is what actually happens for Winlogon.exe, which is started without
+ * any window station and desktop. By creating the first (and therefore
+ * interactive) WinSta0 window station, then assigning WinSta0 to itself
+ * and creating the Default desktop on it, and then assigning this desktop
+ * to its main thread, Winlogon.exe basically does the similar steps that
+ * would have been done automatically at its startup if there were already
+ * an existing WinSta0 window station and Default desktop.
+ *
+ * Of course all this must not be done if we are a SYSTEM or CSRSS thread.
+ */
+ // if (pti->ppi->peProcess != gpepCSRSS)
+ if (!(pti->TIF_flags & (TIF_SYSTEMTHREAD | TIF_CSRSSTHREAD)) &&
+ pti->ppi->rpdeskStartup == NULL && hDesktop != NULL)
+ {
+ ERR("The process 0x%p '%s' didn't have an assigned startup desktop before, assigning it now!\n",
+ pti->ppi->peProcess, pti->ppi->peProcess->ImageFileName);
+
+ pti->ppi->hdeskStartup = hDesktop;
+ pti->ppi->rpdeskStartup = pdesk;
+ }
+
/* free all classes or move them to the shared heap */
if (pti->rpdesk != NULL)
{
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3270979327444f7870057…
commit 3270979327444f7870057a0917cddd1072ea108f
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Jul 22 23:11:00 2018 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Sun Aug 19 22:18:40 2018 +0200
[WIN32K:NTUSER] Add a temporary winsta/desktop-connection hack for CSRSS/USERSRV (connection to WinSta0).
Normally CSRSS must not be connected to any winsta or desktop by default. It should manually connect
to a winsta/desktop only when it has to do some GUI operations, and then disconnect afterwards.
[USERSRV] Temporarily hackfix the harderror dialog display to the current input desktop.
---
win32ss/user/ntuser/main.c | 7 ++++++-
win32ss/user/winsrv/usersrv/harderror.c | 18 ++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/win32ss/user/ntuser/main.c b/win32ss/user/ntuser/main.c
index 21fba73d1d..73d39d3bd5 100644
--- a/win32ss/user/ntuser/main.c
+++ b/win32ss/user/ntuser/main.c
@@ -577,7 +577,8 @@ InitThreadCallback(PETHREAD Thread)
*/
// if (ptiCurrent->ppi->hdeskStartup == NULL && InputWindowStation != NULL)
/* Last things to do only if we are not a SYSTEM or CSRSS thread */
- if (!(ptiCurrent->TIF_flags & (TIF_SYSTEMTHREAD | TIF_CSRSSTHREAD)) &&
+ // HACK Part #1: Temporarily disabled to have our current USERSRV running, but normally this is its duty to connect itself to the required desktop!
+ if (// !(ptiCurrent->TIF_flags & (TIF_SYSTEMTHREAD | TIF_CSRSSTHREAD)) &&
/**/ptiCurrent->ppi->hdeskStartup == NULL &&/**/
InputWindowStation != NULL)
{
@@ -586,6 +587,10 @@ InitThreadCallback(PETHREAD Thread)
UNICODE_STRING DesktopPath;
PDESKTOP pdesk;
+ // HACK Part #2: We force USERSRV to connect to WinSta0 by setting the STARTF_INHERITDESKTOP flag.
+ if (ptiCurrent->TIF_flags & (TIF_SYSTEMTHREAD | TIF_CSRSSTHREAD))
+ ProcessParams->WindowFlags |= STARTF_INHERITDESKTOP;
+
/*
* Inherit the thread desktop and process window station (if not yet inherited)
* from the process startup info structure. See documentation of CreateProcess().
diff --git a/win32ss/user/winsrv/usersrv/harderror.c b/win32ss/user/winsrv/usersrv/harderror.c
index 85ef9fe23d..6ff336aff5 100644
--- a/win32ss/user/winsrv/usersrv/harderror.c
+++ b/win32ss/user/winsrv/usersrv/harderror.c
@@ -1012,16 +1012,34 @@ UserpMessageBox(
IN ULONG Timeout)
{
ULONG MessageBoxResponse;
+ HDESK hDesk, hOldDesk;
DPRINT("Text = '%S', Caption = '%S', Type = 0x%lx\n",
TextStringU->Buffer, CaptionStringU->Buffer, Type);
+ // TEMPORARY HACK to fix desktop assignment for harderror message boxes.
+ hDesk = OpenInputDesktop(0, FALSE, GENERIC_WRITE);
+ if (!hDesk)
+ return ResponseNotHandled;
+
+ /* Assign the desktop to this thread */
+ hOldDesk = GetThreadDesktop(GetCurrentThreadId());
+ if (!SetThreadDesktop(hDesk))
+ {
+ CloseDesktop(hDesk);
+ return ResponseNotHandled;
+ }
+
/* Display a message box */
MessageBoxResponse = MessageBoxTimeoutW(NULL,
TextStringU->Buffer,
CaptionStringU->Buffer,
Type, 0, Timeout);
+ /* Restore the original desktop */
+ SetThreadDesktop(hOldDesk);
+ CloseDesktop(hDesk);
+
/* Return response value */
switch (MessageBoxResponse)
{
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c697f191cf72ce02d987a…
commit c697f191cf72ce02d987aeac7cfff87174461622
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Jul 22 20:38:26 2018 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Sun Aug 19 22:18:37 2018 +0200
[WIN32K:NTUSER] Make NtUserResolveDesktop() and IntResolveDesktop() work in a more Win2k3-compatible manner.
CORE-11933 and PR #621.
Since this API is also called from WINSRV when calling the AllocConsole() API,
it can be tested more-or-less easily. The internal helper IntResolveDesktop()
is also tested during process connection to a window station, when such process
first calls a USER32 or GDI32 function.
This is also the functionality tested by the user32:desktop apitest.
- Adjust how IntResolveDesktop() is called.
---
win32ss/include/ntuser.h | 4 +-
win32ss/user/ntuser/desktop.c | 838 ++++++++++++++++++---
win32ss/user/ntuser/desktop.h | 15 +-
win32ss/user/ntuser/main.c | 36 +-
win32ss/user/winsrv/consrv/frontends/gui/guiterm.c | 2 +-
5 files changed, 762 insertions(+), 133 deletions(-)
diff --git a/win32ss/include/ntuser.h b/win32ss/include/ntuser.h
index 9e4b70938b..68f37ebff8 100644
--- a/win32ss/include/ntuser.h
+++ b/win32ss/include/ntuser.h
@@ -2912,11 +2912,11 @@ NtUserRemoveProp(
ATOM Atom);
HDESK
-APIENTRY
+NTAPI
NtUserResolveDesktop(
IN HANDLE ProcessHandle,
IN PUNICODE_STRING DesktopPath,
- DWORD dwUnknown,
+ IN BOOL bInherit,
OUT HWINSTA* phWinSta);
DWORD
diff --git a/win32ss/user/ntuser/desktop.c b/win32ss/user/ntuser/desktop.c
index 8f0555a746..a90a27caa1 100644
--- a/win32ss/user/ntuser/desktop.c
+++ b/win32ss/user/ntuser/desktop.c
@@ -447,139 +447,726 @@ GetSystemVersionString(OUT PWSTR pwszzVersion,
}
-NTSTATUS FASTCALL
-IntParseDesktopPath(PEPROCESS Process,
- PUNICODE_STRING DesktopPath,
- HWINSTA *hWinSta,
- HDESK *hDesktop)
+/*
+ * IntResolveDesktop
+ *
+ * The IntResolveDesktop function attempts to retrieve valid handles to
+ * a desktop and a window station suitable for the specified process.
+ * The specified desktop path string is used only as a hint for the resolution.
+ *
+ * - If the process is already assigned to a window station and a desktop,
+ * handles to these objects are returned directly regardless of the specified
+ * desktop path string. This is what happens when this function is called for
+ * a process that has been already started and connected to the Win32 USER.
+ *
+ * - If the process is being connected to the Win32 USER, or is in a state
+ * where a window station is assigned to it but no desktop yet, the desktop
+ * path string is used as a hint for the resolution.
+ * A specified window station (if any, otherwise "WinSta0" is used as default)
+ * is tested for existence and accessibility. If the checks are OK a handle
+ * to it is returned. Otherwise we either fail (the window station does not
+ * exist) or, in case a default window station was used, we attempt to open
+ * or create a non-interactive Service-0xXXXX-YYYY$ window station. This is
+ * typically what happens when a non-interactive process is started while
+ * the WinSta0 window station was used as the default one.
+ * A specified desktop (if any, otherwise "Default" is used as default)
+ * is then tested for existence on the opened window station.
+ *
+ * - Rules for the choice of the default window station, when none is specified
+ * in the desktop path:
+ *
+ * 1. By default, a SYSTEM process connects to a non-interactive window
+ * station, either the Service-0x0-3e7$ (from the SYSTEM LUID) station,
+ * or one that has been inherited and that is non-interactive.
+ * Only when the interactive window station WinSta0 is specified that
+ * the process can connect to it (e.g. the case of interactive services).
+ *
+ * 2. An interactive process, i.e. a process whose LUID is the same as the
+ * one assigned to WinSta0 by Winlogon on user logon, connects by default
+ * to the WinSta0 window station, unless it has inherited from another
+ * interactive window station (which must be... none other than WinSta0).
+ *
+ * 3. A non-interactive (but not SYSTEM) process connects by default to
+ * a non-interactive Service-0xXXXX-YYYY$ window station (whose name
+ * is derived from the process' LUID), or to another non-interactive
+ * window station that has been inherited.
+ * Otherwise it may be able connect to the interactive WinSta0 only if
+ * it has explicit access rights to it.
+ *
+ * Parameters
+ * Process
+ * The user process object.
+ *
+ * DesktopPath
+ * The desktop path string used as a hint for desktop resolution.
+ *
+ * bInherit
+ * Whether or not the returned handles are inheritable.
+ *
+ * phWinSta
+ * Pointer to a window station handle.
+ *
+ * phDesktop
+ * Pointer to a desktop handle.
+ *
+ * Return Value
+ * Status code.
+ */
+
+NTSTATUS
+FASTCALL
+IntResolveDesktop(
+ IN PEPROCESS Process,
+ IN PUNICODE_STRING DesktopPath,
+ IN BOOL bInherit,
+ OUT HWINSTA* phWinSta,
+ OUT HDESK* phDesktop)
{
- OBJECT_ATTRIBUTES ObjectAttributes;
- UNICODE_STRING ObjectName;
NTSTATUS Status;
- WCHAR wstrWinstaFullName[MAX_PATH], *pwstrWinsta = NULL, *pwstrDesktop = NULL;
-
- ASSERT(hWinSta);
- ASSERT(hDesktop);
+ HWINSTA hWinSta = NULL, hWinStaDup = NULL;
+ HDESK hDesktop = NULL, hDesktopDup = NULL;
+ PPROCESSINFO ppi;
+ HANDLE hProcess = NULL;
+ LUID ProcessLuid;
+ USHORT StrSize;
+ SIZE_T MemSize;
+ POBJECT_ATTRIBUTES ObjectAttributes = NULL;
+ PUNICODE_STRING ObjectName;
+ UNICODE_STRING WinStaName, DesktopName;
+ const UNICODE_STRING WinSta0Name = RTL_CONSTANT_STRING(L"WinSta0");
+ PWINSTATION_OBJECT WinStaObject;
+ HWINSTA hTempWinSta = NULL;
+ BOOLEAN bUseDefaultWinSta = FALSE;
+ BOOLEAN bInteractive = FALSE;
+ BOOLEAN bAccessAllowed = FALSE;
+
+ ASSERT(phWinSta);
+ ASSERT(phDesktop);
ASSERT(DesktopPath);
- *hWinSta = NULL;
- *hDesktop = NULL;
+ *phWinSta = NULL;
+ *phDesktop = NULL;
+
+ ppi = PsGetProcessWin32Process(Process);
+ /* ppi is typically NULL for console applications that connect to Win32 USER */
+ if (!ppi) TRACE("IntResolveDesktop: ppi is NULL!\n");
+
+ if (ppi && ppi->hwinsta != NULL && ppi->hdeskStartup != NULL)
+ {
+ /*
+ * If this process is the current one, just return the cached handles.
+ * Otherwise, open the window station and desktop objects.
+ */
+ if (Process == PsGetCurrentProcess())
+ {
+ hWinSta = ppi->hwinsta;
+ hDesktop = ppi->hdeskStartup;
+ }
+ else
+ {
+ Status = ObOpenObjectByPointer(ppi->prpwinsta,
+ 0,
+ NULL,
+ MAXIMUM_ALLOWED,
+ ExWindowStationObjectType,
+ UserMode,
+ (PHANDLE)&hWinSta);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("IntResolveDesktop: Could not reference window station 0x%p\n", ppi->prpwinsta);
+ SetLastNtError(Status);
+ return Status;
+ }
+
+ Status = ObOpenObjectByPointer(ppi->rpdeskStartup,
+ 0,
+ NULL,
+ MAXIMUM_ALLOWED,
+ ExDesktopObjectType,
+ UserMode,
+ (PHANDLE)&hDesktop);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("IntResolveDesktop: Could not reference desktop 0x%p\n", ppi->rpdeskStartup);
+ ObCloseHandle(hWinSta, UserMode);
+ SetLastNtError(Status);
+ return Status;
+ }
+ }
+
+ *phWinSta = hWinSta;
+ *phDesktop = hDesktop;
+ return STATUS_SUCCESS;
+ }
+
+ /* We will by default use the default window station and desktop */
+ RtlInitEmptyUnicodeString(&WinStaName, NULL, 0);
+ RtlInitEmptyUnicodeString(&DesktopName, NULL, 0);
+ /*
+ * Parse the desktop path string which can be of the form "WinSta\Desktop"
+ * or just "Desktop". In the latter case we use the default window station
+ * on which the process is attached to (or if none, "WinSta0").
+ */
if (DesktopPath->Buffer != NULL && DesktopPath->Length > sizeof(WCHAR))
+ {
+ DesktopName = *DesktopPath;
+
+ /* Find the separator */
+ while (DesktopName.Length > 0 && *DesktopName.Buffer &&
+ *DesktopName.Buffer != OBJ_NAME_PATH_SEPARATOR)
+ {
+ DesktopName.Buffer++;
+ DesktopName.Length -= sizeof(WCHAR);
+ DesktopName.MaximumLength -= sizeof(WCHAR);
+ }
+ if (DesktopName.Length > 0)
+ {
+ RtlInitEmptyUnicodeString(&WinStaName, DesktopPath->Buffer,
+ DesktopPath->Length - DesktopName.Length);
+ // (USHORT)((ULONG_PTR)DesktopName.Buffer - (ULONG_PTR)DesktopPath->Buffer);
+ WinStaName.Length = WinStaName.MaximumLength;
+
+ /* Skip the separator */
+ DesktopName.Buffer++;
+ DesktopName.Length -= sizeof(WCHAR);
+ DesktopName.MaximumLength -= sizeof(WCHAR);
+ }
+ else
+ {
+ RtlInitEmptyUnicodeString(&WinStaName, NULL, 0);
+ DesktopName = *DesktopPath;
+ }
+ }
+
+ TRACE("IntResolveDesktop: WinStaName:'%wZ' ; DesktopName:'%wZ'\n", &WinStaName, &DesktopName);
+
+ /* Retrieve the process LUID */
+ Status = GetProcessLuid(NULL, Process, &ProcessLuid);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("IntResolveDesktop: Failed to retrieve the process LUID, Status 0x%08lx\n", Status);
+ SetLastNtError(Status);
+ return Status;
+ }
+
+ /*
+ * If this process is not the current one, obtain a temporary handle
+ * to it so that we can perform handles duplication later.
+ */
+ if (Process != PsGetCurrentProcess())
+ {
+ Status = ObOpenObjectByPointer(Process,
+ OBJ_KERNEL_HANDLE,
+ NULL,
+ 0,
+ *PsProcessType,
+ KernelMode,
+ &hProcess);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("IntResolveDesktop: Failed to obtain a handle to process 0x%p, Status 0x%08lx\n", Process, Status);
+ SetLastNtError(Status);
+ return Status;
+ }
+ ASSERT(hProcess);
+ }
+
+ /*
+ * If no window station has been specified, search the process handle table
+ * for inherited window station handles, otherwise use a default one.
+ */
+ if (WinStaName.Buffer == NULL)
{
/*
- * Parse the desktop path string which can be in the form "WinSta\Desktop"
- * or just "Desktop". In latter case WinSta0 will be used.
+ * We want to find a suitable default window station.
+ * For applications that can be interactive, i.e. that have allowed
+ * access to the single interactive window station on the system,
+ * the default window station is 'WinSta0'.
+ * For applications that cannot be interactive, i.e. that do not have
+ * access to 'WinSta0' (e.g. non-interactive services), the default
+ * window station is 'Service-0xXXXX-YYYY$' (created if needed).
+ * Precedence will however be taken by any inherited window station
+ * that possesses the required interactivity property.
*/
+ bUseDefaultWinSta = TRUE;
+
+ /*
+ * Use the default 'WinSta0' window station. Whether we should
+ * use 'Service-0xXXXX-YYYY$' instead will be determined later.
+ */
+ // RtlInitUnicodeString(&WinStaName, L"WinSta0");
+ WinStaName = WinSta0Name;
+
+ if (ObFindHandleForObject(Process,
+ NULL,
+ ExWindowStationObjectType,
+ NULL,
+ (PHANDLE)&hWinSta))
+ {
+ TRACE("IntResolveDesktop: Inherited window station is: 0x%p\n", hWinSta);
+ }
+ }
+
+ /*
+ * If no desktop has been specified, search the process handle table
+ * for inherited desktop handles, otherwise use the Default desktop.
+ * Note that the inherited desktop that we may use, may not belong
+ * to the window station we will connect to.
+ */
+ if (DesktopName.Buffer == NULL)
+ {
+ /* Use a default desktop name */
+ RtlInitUnicodeString(&DesktopName, L"Default");
+
+ if (ObFindHandleForObject(Process,
+ NULL,
+ ExDesktopObjectType,
+ NULL,
+ (PHANDLE)&hDesktop))
+ {
+ TRACE("IntResolveDesktop: Inherited desktop is: 0x%p\n", hDesktop);
+ }
+ }
+
+
+ /*
+ * We are going to open either a window station or a desktop.
+ * Even if this operation is done from kernel-mode, we should
+ * "emulate" an opening from user-mode (i.e. using an ObjectAttributes
+ * allocated in user-mode, with AccessMode == UserMode) for the
+ * Object Manager to perform proper access validation to the
+ * window station or desktop.
+ */
+
+ /*
+ * Estimate the maximum size needed for the window station name
+ * and desktop name to be given to ObjectAttributes->ObjectName.
+ */
+ StrSize = 0;
+
+ /* Window station name */
+ MemSize = _scwprintf(L"Service-0x%x-%x$", MAXULONG, MAXULONG) * sizeof(WCHAR);
+ MemSize = gustrWindowStationsDir.Length + sizeof(OBJ_NAME_PATH_SEPARATOR)
+ + max(WinStaName.Length, MemSize) + sizeof(UNICODE_NULL);
+ if (MemSize > MAXUSHORT)
+ {
+ ERR("IntResolveDesktop: Window station name length is too long.\n");
+ Status = STATUS_NAME_TOO_LONG;
+ goto Quit;
+ }
+ StrSize = max(StrSize, (USHORT)MemSize);
+
+ /* Desktop name */
+ MemSize = max(DesktopName.Length + sizeof(UNICODE_NULL), sizeof(L"Default"));
+ StrSize = max(StrSize, (USHORT)MemSize);
+
+ /* Size for the OBJECT_ATTRIBUTES */
+ MemSize = ALIGN_UP(sizeof(OBJECT_ATTRIBUTES), sizeof(PVOID));
+
+ /* Add the string size */
+ MemSize += ALIGN_UP(sizeof(UNICODE_STRING), sizeof(PVOID));
+ MemSize += StrSize;
+
+ /* Allocate the memory in user-mode */
+ Status = ZwAllocateVirtualMemory(ZwCurrentProcess(),
+ (PVOID*)&ObjectAttributes,
+ 0,
+ &MemSize,
+ MEM_COMMIT,
+ PAGE_READWRITE);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("ZwAllocateVirtualMemory() failed, Status 0x%08lx\n", Status);
+ goto Quit;
+ }
+
+ ObjectName = (PUNICODE_STRING)((ULONG_PTR)ObjectAttributes +
+ ALIGN_UP(sizeof(OBJECT_ATTRIBUTES), sizeof(PVOID)));
+
+ RtlInitEmptyUnicodeString(ObjectName,
+ (PWCHAR)((ULONG_PTR)ObjectName +
+ ALIGN_UP(sizeof(UNICODE_STRING), sizeof(PVOID))),
+ StrSize);
+
- pwstrDesktop = wcschr(DesktopPath->Buffer, L'\\');
- if (pwstrDesktop != NULL)
+ /* If we got an inherited window station handle, duplicate and use it */
+ if (hWinSta)
+ {
+ ASSERT(bUseDefaultWinSta);
+
+ /* Duplicate the handle if it belongs to another process than the current one */
+ if (Process != PsGetCurrentProcess())
{
- *pwstrDesktop = 0;
- pwstrDesktop++;
- pwstrWinsta = DesktopPath->Buffer;
+ ASSERT(hProcess);
+ Status = ZwDuplicateObject(hProcess,
+ hWinSta,
+ ZwCurrentProcess(),
+ (PHANDLE)&hWinStaDup,
+ 0,
+ 0,
+ DUPLICATE_SAME_ACCESS);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("IntResolveDesktop: Failed to duplicate the window station handle, Status 0x%08lx\n", Status);
+ /* We will use a default window station */
+ hWinSta = NULL;
+ }
+ else
+ {
+ hWinSta = hWinStaDup;
+ }
+ }
+ }
+
+ /*
+ * If we have an inherited window station, check whether
+ * it is interactive and remember that for later.
+ */
+ if (hWinSta)
+ {
+ ASSERT(bUseDefaultWinSta);
+
+ /* Reference the inherited window station */
+ Status = ObReferenceObjectByHandle(hWinSta,
+ 0,
+ ExWindowStationObjectType,
+ KernelMode,
+ (PVOID*)&WinStaObject,
+ NULL);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("Failed to reference the inherited window station, Status 0x%08lx\n", Status);
+ /* We will use a default window station */
+ if (hWinStaDup)
+ {
+ ASSERT(hWinSta == hWinStaDup);
+ ObCloseHandle(hWinStaDup, UserMode);
+ hWinStaDup = NULL;
+ }
+ hWinSta = NULL;
}
else
{
- pwstrDesktop = DesktopPath->Buffer;
- pwstrWinsta = NULL;
+ ERR("Process LUID is: 0x%x-%x, inherited window station LUID is: 0x%x-%x\n",
+ ProcessLuid.HighPart, ProcessLuid.LowPart,
+ WinStaObject->luidUser.HighPart, WinStaObject->luidUser.LowPart);
+
+ /* Check whether this window station is interactive, and remember it for later */
+ bInteractive = !(WinStaObject->Flags & WSS_NOIO);
+
+ /* Dereference the window station */
+ ObDereferenceObject(WinStaObject);
}
+ }
- TRACE("IntParseDesktopPath pwstrWinsta:%S pwstrDesktop:%S\n", pwstrWinsta, pwstrDesktop);
+ /* Build a valid window station name */
+ Status = RtlStringCbPrintfW(ObjectName->Buffer,
+ ObjectName->MaximumLength,
+ L"%wZ\\%wZ",
+ &gustrWindowStationsDir,
+ &WinStaName);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("Impossible to build a valid window station name, Status 0x%08lx\n", Status);
+ goto Quit;
}
+ ObjectName->Length = (USHORT)(wcslen(ObjectName->Buffer) * sizeof(WCHAR));
-#if 0
- /* Search the process handle table for (inherited) window station
- handles, use a more appropriate one than WinSta0 if possible. */
- if (!ObFindHandleForObject(Process,
- NULL,
- ExWindowStationObjectType,
+ TRACE("Parsed initial window station: '%wZ'\n", ObjectName);
+
+ /* Try to open the window station */
+ InitializeObjectAttributes(ObjectAttributes,
+ ObjectName,
+ OBJ_CASE_INSENSITIVE,
NULL,
- (PHANDLE)hWinSta))
-#endif
+ NULL);
+ if (bInherit)
+ ObjectAttributes->Attributes |= OBJ_INHERIT;
+
+ Status = ObOpenObjectByName(ObjectAttributes,
+ ExWindowStationObjectType,
+ UserMode,
+ NULL,
+ WINSTA_ACCESS_ALL,
+ NULL,
+ (PHANDLE)&hTempWinSta);
+ if (!NT_SUCCESS(Status))
{
- /* We had no luck searching for opened handles, use WinSta0 now */
- if (!pwstrWinsta)
- pwstrWinsta = L"WinSta0";
+ ERR("Failed to open the window station '%wZ', Status 0x%08lx\n", ObjectName, Status);
}
+ else
+ {
+ //
+ // FIXME TODO: Perform a window station access check!!
+ // If we fail AND bUseDefaultWinSta == FALSE we just quit.
+ //
-#if 0
- /* Search the process handle table for (inherited) desktop
- handles, use a more appropriate one than Default if possible. */
- if (!ObFindHandleForObject(Process,
- NULL,
- ExDesktopObjectType,
- NULL,
- (PHANDLE)hDesktop))
-#endif
+ /*
+ * Check whether we are opening the (single) interactive
+ * window station, and if so, perform an access check.
+ */
+ /* Check whether we are allowed to perform interactions */
+ if (RtlEqualUnicodeString(&WinStaName, &WinSta0Name, TRUE))
+ {
+ LUID SystemLuid = SYSTEM_LUID;
+
+ /* Interactive window station: check for user LUID */
+ WinStaObject = InputWindowStation;
+
+ Status = STATUS_ACCESS_DENIED;
+
+ // TODO: Check also that we compare wrt. window station WinSta0
+ // which is the only one that can be interactive on the system.
+ if (((!bUseDefaultWinSta || bInherit) && RtlEqualLuid(&ProcessLuid, &SystemLuid)) ||
+ RtlEqualLuid(&ProcessLuid, &WinStaObject->luidUser))
+ {
+ /* We are interactive on this window station */
+ bAccessAllowed = TRUE;
+ Status = STATUS_SUCCESS;
+ }
+ }
+ else
+ {
+ /* Non-interactive window station: we have access since we were able to open it */
+ bAccessAllowed = TRUE;
+ Status = STATUS_SUCCESS;
+ }
+ }
+
+ /* If we failed, bail out if we were not trying to open the default window station */
+ if (!NT_SUCCESS(Status) && !bUseDefaultWinSta) // if (!bAccessAllowed)
+ goto Quit;
+
+ if (/* bAccessAllowed && */ bInteractive || !bAccessAllowed)
+ {
+ /*
+ * Close WinSta0 if the inherited window station is interactive so that
+ * we can use it, or we do not have access to the interactive WinSta0.
+ */
+ ObCloseHandle(hTempWinSta, UserMode);
+ hTempWinSta = NULL;
+ }
+ if (bInteractive == bAccessAllowed)
+ {
+ /* Keep using the inherited window station */
+ NOTHING;
+ }
+ else // if (bInteractive != bAccessAllowed)
{
- /* We had no luck searching for opened handles, use Desktop now */
- if (!pwstrDesktop)
- pwstrDesktop = L"Default";
+ /*
+ * Close the inherited window station, we will either keep using
+ * the interactive WinSta0, or use Service-0xXXXX-YYYY$.
+ */
+ if (hWinStaDup)
+ {
+ ASSERT(hWinSta == hWinStaDup);
+ ObCloseHandle(hWinStaDup, UserMode);
+ hWinStaDup = NULL;
+ }
+ hWinSta = hTempWinSta; // hTempWinSta is NULL in case bAccessAllowed == FALSE
}
- if (*hWinSta == NULL)
+ if (bUseDefaultWinSta)
{
- swprintf(wstrWinstaFullName, L"%wZ\\%ws", &gustrWindowStationsDir, pwstrWinsta);
- RtlInitUnicodeString( &ObjectName, wstrWinstaFullName);
+ if (hWinSta == NULL && !bInteractive)
+ {
+ /* Build a valid window station name from the LUID */
+ Status = RtlStringCbPrintfW(ObjectName->Buffer,
+ ObjectName->MaximumLength,
+ L"%wZ\\Service-0x%x-%x$",
+ &gustrWindowStationsDir,
+ ProcessLuid.HighPart,
+ ProcessLuid.LowPart);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("Impossible to build a valid window station name, Status 0x%08lx\n", Status);
+ goto Quit;
+ }
+ ObjectName->Length = (USHORT)(wcslen(ObjectName->Buffer) * sizeof(WCHAR));
+
+ /*
+ * Create or open the non-interactive window station.
+ * NOTE: The non-interactive window station handle is never inheritable.
+ */
+ // FIXME: Set security!
+ InitializeObjectAttributes(ObjectAttributes,
+ ObjectName,
+ OBJ_CASE_INSENSITIVE | OBJ_OPENIF,
+ NULL,
+ NULL);
- TRACE("parsed initial winsta: %wZ\n", &ObjectName);
+ Status = IntCreateWindowStation(&hWinSta,
+ ObjectAttributes,
+ UserMode,
+ KernelMode,
+ MAXIMUM_ALLOWED,
+ 0, 0, 0, 0, 0);
+ if (!NT_SUCCESS(Status))
+ {
+ ASSERT(hWinSta == NULL);
+ ERR("Failed to create or open the non-interactive window station '%wZ', Status 0x%08lx\n",
+ ObjectName, Status);
+ goto Quit;
+ }
- /* Open the window station */
- InitializeObjectAttributes(&ObjectAttributes,
- &ObjectName,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
+ //
+ // FIXME: We might not need to always create or open the "Default"
+ // desktop on the Service-0xXXXX-YYYY$ window station; we may need
+ // to use another one....
+ //
+
+ /* Create or open the Default desktop on the window station */
+ Status = RtlStringCbCopyW(ObjectName->Buffer,
+ ObjectName->MaximumLength,
+ L"Default");
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("Impossible to build a valid desktop name, Status 0x%08lx\n", Status);
+ goto Quit;
+ }
+ ObjectName->Length = (USHORT)(wcslen(ObjectName->Buffer) * sizeof(WCHAR));
+
+ /* NOTE: The non-interactive desktop handle is never inheritable. */
+ // FIXME: Set security!
+ InitializeObjectAttributes(ObjectAttributes,
+ ObjectName,
+ OBJ_CASE_INSENSITIVE | OBJ_OPENIF,
+ hWinSta,
+ NULL);
- Status = ObOpenObjectByName(&ObjectAttributes,
- ExWindowStationObjectType,
- KernelMode,
- NULL,
- WINSTA_ACCESS_ALL,
- NULL,
- (HANDLE*)hWinSta);
+ Status = IntCreateDesktop(&hDesktop,
+ ObjectAttributes,
+ UserMode,
+ NULL,
+ NULL,
+ 0,
+ MAXIMUM_ALLOWED);
+ if (!NT_SUCCESS(Status))
+ {
+ ASSERT(hDesktop == NULL);
+ ERR("Failed to create or open the desktop '%wZ' on window station 0x%p, Status 0x%08lx\n",
+ ObjectName, hWinSta, Status);
+ }
- if (!NT_SUCCESS(Status))
+ goto Quit;
+ }
+/*
+ if (hWinSta == NULL)
{
- SetLastNtError(Status);
- ERR("Failed to reference window station %wZ PID: --!\n", &ObjectName );
- return Status;
+ Status = STATUS_UNSUCCESSFUL;
+ goto Quit;
}
+*/
}
- if (*hDesktop == NULL)
+ /*
+ * If we got an inherited desktop handle, duplicate and use it,
+ * otherwise open a new desktop.
+ */
+ if (hDesktop != NULL)
{
- RtlInitUnicodeString(&ObjectName, pwstrDesktop);
+ /* Duplicate the handle if it belongs to another process than the current one */
+ if (Process != PsGetCurrentProcess())
+ {
+ ASSERT(hProcess);
+ Status = ZwDuplicateObject(hProcess,
+ hDesktop,
+ ZwCurrentProcess(),
+ (PHANDLE)&hDesktopDup,
+ 0,
+ 0,
+ DUPLICATE_SAME_ACCESS);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("IntResolveDesktop: Failed to duplicate the desktop handle, Status 0x%08lx\n", Status);
+ /* We will use a default desktop */
+ hDesktop = NULL;
+ }
+ else
+ {
+ hDesktop = hDesktopDup;
+ }
+ }
+ }
- TRACE("parsed initial desktop: %wZ\n", &ObjectName);
+ if ((hWinSta != NULL) && (hDesktop == NULL))
+ {
+ Status = RtlStringCbCopyNW(ObjectName->Buffer,
+ ObjectName->MaximumLength,
+ DesktopName.Buffer,
+ DesktopName.Length);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("Impossible to build a valid desktop name, Status 0x%08lx\n", Status);
+ goto Quit;
+ }
+ ObjectName->Length = (USHORT)(wcslen(ObjectName->Buffer) * sizeof(WCHAR));
+
+ TRACE("Parsed initial desktop: '%wZ'\n", ObjectName);
/* Open the desktop object */
- InitializeObjectAttributes(&ObjectAttributes,
- &ObjectName,
+ InitializeObjectAttributes(ObjectAttributes,
+ ObjectName,
OBJ_CASE_INSENSITIVE,
- *hWinSta,
+ hWinSta,
NULL);
+ if (bInherit)
+ ObjectAttributes->Attributes |= OBJ_INHERIT;
- Status = ObOpenObjectByName(&ObjectAttributes,
+ Status = ObOpenObjectByName(ObjectAttributes,
ExDesktopObjectType,
- KernelMode,
+ UserMode,
NULL,
DESKTOP_ALL_ACCESS,
NULL,
- (HANDLE*)hDesktop);
-
+ (PHANDLE)&hDesktop);
if (!NT_SUCCESS(Status))
{
- *hDesktop = NULL;
- NtClose(*hWinSta);
- *hWinSta = NULL;
- SetLastNtError(Status);
- ERR("Failed to reference desktop %wZ PID: --!\n", &ObjectName);
- return Status;
+ ERR("Failed to open the desktop '%wZ' on window station 0x%p, Status 0x%08lx\n",
+ ObjectName, hWinSta, Status);
+ goto Quit;
}
}
- return STATUS_SUCCESS;
+
+Quit:
+ /* Release the object attributes */
+ if (ObjectAttributes)
+ {
+ MemSize = 0;
+ ZwFreeVirtualMemory(ZwCurrentProcess(),
+ (PVOID*)&ObjectAttributes,
+ &MemSize,
+ MEM_RELEASE);
+ }
+
+ /* Close the temporary process handle */
+ if (hProcess) // if (Process != PsGetCurrentProcess())
+ ObCloseHandle(hProcess, KernelMode);
+
+ if (NT_SUCCESS(Status))
+ {
+ *phWinSta = hWinSta;
+ *phDesktop = hDesktop;
+ return STATUS_SUCCESS;
+ }
+ else
+ {
+ ERR("IntResolveDesktop(%wZ) failed, Status 0x%08lx\n", DesktopPath, Status);
+
+ if (hDesktopDup)
+ ObCloseHandle(hDesktopDup, UserMode);
+ if (hWinStaDup)
+ ObCloseHandle(hWinStaDup, UserMode);
+
+ if (hDesktop)
+ ObCloseHandle(hDesktop, UserMode);
+ if (hWinSta)
+ ObCloseHandle(hWinSta, UserMode);
+
+ SetLastNtError(Status);
+ return Status;
+ }
}
/*
@@ -2115,15 +2702,24 @@ NtUserPaintDesktop(HDC hDC)
/*
* NtUserResolveDesktop
*
- * The NtUserResolveDesktop function retrieves handles to the desktop and
- * the window station specified by the desktop path string.
+ * The NtUserResolveDesktop function attempts to retrieve valid handles to
+ * a desktop and a window station suitable for the specified process.
+ * The specified desktop path string is used only as a hint for the resolution.
+ *
+ * See the description of IntResolveDesktop for more details.
*
* Parameters
* ProcessHandle
* Handle to a user process.
*
* DesktopPath
- * The desktop path string.
+ * The desktop path string used as a hint for desktop resolution.
+ *
+ * bInherit
+ * Whether or not the returned handles are inheritable.
+ *
+ * phWinSta
+ * Pointer to a window station handle.
*
* Return Value
* Handle to the desktop (direct return value) and
@@ -2138,17 +2734,18 @@ NtUserPaintDesktop(HDC hDC)
*/
HDESK
-APIENTRY
+NTAPI
NtUserResolveDesktop(
IN HANDLE ProcessHandle,
IN PUNICODE_STRING DesktopPath,
- DWORD dwUnknown,
+ IN BOOL bInherit,
OUT HWINSTA* phWinSta)
{
NTSTATUS Status;
- PEPROCESS Process = NULL;
+ PEPROCESS Process;
HWINSTA hWinSta = NULL;
HDESK hDesktop = NULL;
+ UNICODE_STRING CapturedDesktopPath;
/* Allow only the Console Server to perform this operation (via CSRSS) */
if (PsGetCurrentProcess() != gpepCSRSS)
@@ -2161,44 +2758,63 @@ NtUserResolveDesktop(
UserMode,
(PVOID*)&Process,
NULL);
- if (!NT_SUCCESS(Status)) return NULL;
+ if (!NT_SUCCESS(Status))
+ return NULL;
// UserEnterShared();
_SEH2_TRY
{
- UNICODE_STRING CapturedDesktopPath;
+ /* Probe the handle pointer */
+ // ProbeForWriteHandle
+ ProbeForWrite(phWinSta, sizeof(HWINSTA), sizeof(HWINSTA));
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Status = _SEH2_GetExceptionCode();
+ _SEH2_YIELD(goto Quit);
+ }
+ _SEH2_END;
- /* Capture the user desktop path string */
- Status = IntSafeCopyUnicodeStringTerminateNULL(&CapturedDesktopPath,
- DesktopPath);
- if (!NT_SUCCESS(Status)) _SEH2_YIELD(goto Quit);
+ /* Capture the user desktop path string */
+ Status = ProbeAndCaptureUnicodeString(&CapturedDesktopPath,
+ UserMode,
+ DesktopPath);
+ if (!NT_SUCCESS(Status))
+ goto Quit;
- /* Call the internal function */
- Status = IntParseDesktopPath(Process,
- &CapturedDesktopPath,
- &hWinSta,
- &hDesktop);
- if (!NT_SUCCESS(Status))
- {
- ERR("IntParseDesktopPath failed, Status = 0x%08lx\n", Status);
- hWinSta = NULL;
- hDesktop = NULL;
- }
+ /* Call the internal function */
+ Status = IntResolveDesktop(Process,
+ &CapturedDesktopPath,
+ bInherit,
+ &hWinSta,
+ &hDesktop);
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("IntResolveDesktop failed, Status 0x%08lx\n", Status);
+ hWinSta = NULL;
+ hDesktop = NULL;
+ }
+ _SEH2_TRY
+ {
/* Return the window station handle */
*phWinSta = hWinSta;
-
- /* Free the captured string */
- if (CapturedDesktopPath.Buffer)
- ExFreePoolWithTag(CapturedDesktopPath.Buffer, TAG_STRING);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
Status = _SEH2_GetExceptionCode();
+
+ /* We failed, close the opened desktop and window station */
+ if (hDesktop) ObCloseHandle(hDesktop, UserMode);
+ hDesktop = NULL;
+ if (hWinSta) ObCloseHandle(hWinSta, UserMode);
}
_SEH2_END;
+ /* Free the captured string */
+ ReleaseCapturedUnicodeString(&CapturedDesktopPath, UserMode);
+
Quit:
// UserLeave();
diff --git a/win32ss/user/ntuser/desktop.h b/win32ss/user/ntuser/desktop.h
index 7156f22bf7..0e1950ff64 100644
--- a/win32ss/user/ntuser/desktop.h
+++ b/win32ss/user/ntuser/desktop.h
@@ -161,6 +161,15 @@ IntHideDesktop(PDESKTOP Desktop);
BOOL IntSetThreadDesktop(IN HDESK hDesktop,
IN BOOL FreeOnFailure);
+NTSTATUS
+FASTCALL
+IntResolveDesktop(
+ IN PEPROCESS Process,
+ IN PUNICODE_STRING DesktopPath,
+ IN BOOL bInherit,
+ OUT HWINSTA* phWinSta,
+ OUT HDESK* phDesktop);
+
NTSTATUS FASTCALL
IntValidateDesktopHandle(
HDESK Desktop,
@@ -179,12 +188,6 @@ IntCreateDesktop(
IN DWORD dwFlags,
IN ACCESS_MASK dwDesiredAccess);
-NTSTATUS FASTCALL
-IntParseDesktopPath(PEPROCESS Process,
- PUNICODE_STRING DesktopPath,
- HWINSTA *hWinSta,
- HDESK *hDesktop);
-
VOID APIENTRY UserRedrawDesktop(VOID);
BOOL IntRegisterShellHookWindow(HWND hWnd);
BOOL IntDeRegisterShellHookWindow(HWND hWnd);
diff --git a/win32ss/user/ntuser/main.c b/win32ss/user/ntuser/main.c
index c10e48230e..2fc1b69082 100644
--- a/win32ss/user/ntuser/main.c
+++ b/win32ss/user/ntuser/main.c
@@ -532,12 +532,12 @@ InitThreadCallback(PETHREAD Thread)
ptiCurrent->TIF_flags &= ~TIF_INCLEANUP;
+ // FIXME: Flag SYSTEM threads with... TIF_SYSTEMTHREAD !!
+
/* CSRSS threads have some special features */
if (Process == gpepCSRSS)
ptiCurrent->TIF_flags = TIF_CSRSSTHREAD | TIF_DONTATTACHQUEUE;
- // FIXME: Flag SYSTEM threads with... TIF_SYSTEMTHREAD !!
-
ptiCurrent->pcti = &ptiCurrent->cti;
/* Initialize the CLIENTINFO */
@@ -570,9 +570,16 @@ InitThreadCallback(PETHREAD Thread)
}
}
- /* Assign a default window station and desktop to the process */
- /* Do not try to open a desktop or window station before winlogon initializes */
- if (ptiCurrent->ppi->hdeskStartup == NULL && gpidLogon != 0)
+ /*
+ * Assign a default window station and desktop to the process.
+ * Do not try to open a desktop or window station before the very first
+ * (interactive) window station has been created by Winlogon.
+ */
+ // if (ptiCurrent->ppi->hdeskStartup == NULL && InputWindowStation != NULL)
+ /* Last things to do only if we are not a SYSTEM or CSRSS thread */
+ if (!(ptiCurrent->TIF_flags & (TIF_SYSTEMTHREAD | TIF_CSRSSTHREAD)) &&
+ /**/ptiCurrent->ppi->hdeskStartup == NULL &&/**/
+ InputWindowStation != NULL)
{
HWINSTA hWinSta = NULL;
HDESK hDesk = NULL;
@@ -580,8 +587,8 @@ InitThreadCallback(PETHREAD Thread)
PDESKTOP pdesk;
/*
- * inherit the thread desktop and process window station (if not yet inherited) from the process startup
- * info structure. See documentation of CreateProcess()
+ * Inherit the thread desktop and process window station (if not yet inherited)
+ * from the process startup info structure. See documentation of CreateProcess().
*/
Status = STATUS_UNSUCCESSFUL;
@@ -594,17 +601,18 @@ InitThreadCallback(PETHREAD Thread)
RtlInitUnicodeString(&DesktopPath, NULL);
}
- Status = IntParseDesktopPath(Process,
- &DesktopPath,
- &hWinSta,
- &hDesk);
+ Status = IntResolveDesktop(Process,
+ &DesktopPath,
+ FALSE,
+ &hWinSta,
+ &hDesk);
if (DesktopPath.Buffer)
ExFreePoolWithTag(DesktopPath.Buffer, TAG_STRING);
if (!NT_SUCCESS(Status))
{
- ERR_CH(UserThread, "Failed to assign default dekstop and winsta to process\n");
+ ERR_CH(UserThread, "Failed to assign default desktop and winsta to process\n");
goto error;
}
@@ -615,7 +623,7 @@ InitThreadCallback(PETHREAD Thread)
goto error;
}
- /* Validate the new desktop. */
+ /* Validate the new desktop */
Status = IntValidateDesktopHandle(hDesk, UserMode, 0, &pdesk);
if (!NT_SUCCESS(Status))
{
@@ -624,6 +632,8 @@ InitThreadCallback(PETHREAD Thread)
}
/* Store the parsed desktop as the initial desktop */
+ ASSERT(ptiCurrent->ppi->hdeskStartup == NULL);
+ ASSERT(Process->UniqueProcessId != gpidLogon);
ptiCurrent->ppi->hdeskStartup = hDesk;
ptiCurrent->ppi->rpdeskStartup = pdesk;
}
diff --git a/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c b/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c
index a3ebb0390c..258b1e28e6 100644
--- a/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c
+++ b/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c
@@ -324,7 +324,7 @@ GuiInit(IN PCONSOLE_INIT_INFO ConsoleInitInfo,
hDesk = NtUserResolveDesktop(ConsoleLeaderProcessHandle,
&DesktopPath,
- 0,
+ FALSE,
&hWinSta);
DPRINT("NtUserResolveDesktop(DesktopPath = '%wZ') returned hDesk = 0x%p; hWinSta = 0x%p\n",
&DesktopPath, hDesk, hWinSta);