mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 04:13:34 +00:00
Sunc with trunk revision 58971.
svn path=/branches/kd++/; revision=58972
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
|
||||
add_executable(hostname hostname.c hostname.rc)
|
||||
|
||||
set_module_type(hostname win32cui)
|
||||
add_importlibs(hostname msvcrt kernel32)
|
||||
set_module_type(hostname win32cui UNICODE)
|
||||
add_importlibs(hostname user32 msvcrt kernel32)
|
||||
add_cd_file(TARGET hostname DESTINATION reactos/system32 FOR all)
|
||||
|
||||
@@ -23,38 +23,52 @@
|
||||
* PROGRAMMER: Emanuele Aliberti ([email protected])
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
//#include <string.h>
|
||||
#include <conio.h>
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winuser.h>
|
||||
|
||||
int main (int argc, char ** argv)
|
||||
#include "resource.h"
|
||||
|
||||
int wmain(int argc, WCHAR* argv[])
|
||||
{
|
||||
if (1 == argc)
|
||||
{
|
||||
TCHAR ComputerName [MAX_COMPUTERNAME_LENGTH + 1];
|
||||
DWORD ComputerNameSize = sizeof ComputerName / sizeof ComputerName[0];
|
||||
WCHAR Msg[100];
|
||||
|
||||
ZeroMemory (ComputerName, sizeof ComputerName );
|
||||
if (GetComputerName(ComputerName, & ComputerNameSize))
|
||||
{
|
||||
printf ("%s\n", ComputerName);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
fprintf (stderr, "%s: Win32 error %lu.\n",
|
||||
argv[0], GetLastError());
|
||||
return EXIT_FAILURE;
|
||||
}else{
|
||||
if (0 == strcmp(argv[1],"-s"))
|
||||
{
|
||||
fprintf(stderr,"%s: -s not supported.\n",argv[0]);
|
||||
return EXIT_FAILURE;
|
||||
}else{
|
||||
printf("Print the current host's name.\n\nhostname\n");
|
||||
}
|
||||
}
|
||||
return EXIT_SUCCESS;
|
||||
if (1 == argc)
|
||||
{
|
||||
WCHAR ComputerName[MAX_COMPUTERNAME_LENGTH + 1] = L"";
|
||||
DWORD ComputerNameSize = sizeof(ComputerName) / sizeof(ComputerName[0]);
|
||||
|
||||
if (!GetComputerName(ComputerName, &ComputerNameSize))
|
||||
{
|
||||
/* Fail in case of error */
|
||||
LoadStringW(GetModuleHandle(NULL), IDS_ERROR, Msg, 100);
|
||||
_cwprintf(L"%s %lu.\n", Msg, GetLastError());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Print out the computer's name */
|
||||
_cwprintf(L"%s\n", ComputerName);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((wcsicmp(argv[1], L"-s") == 0) || (wcsicmp(argv[1], L"/s") == 0))
|
||||
{
|
||||
/* The program doesn't allow the user to set the computer's name */
|
||||
LoadStringW(GetModuleHandle(NULL), IDS_NOSET, Msg, 100);
|
||||
_cwprintf(L"%s\n", Msg);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Let the user know what the program does */
|
||||
LoadStringW(GetModuleHandle(NULL), IDS_USAGE, Msg, 100);
|
||||
_cwprintf(L"\n%s\n\n", Msg);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "Win32 Get local host name\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "hostname\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "hostname.exe\0"
|
||||
#include <windef.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "Host name application"
|
||||
#define REACTOS_STR_INTERNAL_NAME "hostname"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "hostname.exe"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
#include "rsrc.rc"
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
/* FILE: base/applications/cmdutils/hostname/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* UPDATED: 2013-05-01
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_USAGE, "Vypíše současný název hostitele.\n\nhostname"
|
||||
IDS_NOSET, "hostname -s není podporováno."
|
||||
IDS_ERROR, "Win32 chyba"
|
||||
END
|
||||
@@ -0,0 +1,8 @@
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_USAGE, "Print the current host's name.\n\nhostname"
|
||||
IDS_NOSET, "hostname -s is not supported."
|
||||
IDS_ERROR, "Win32 error"
|
||||
END
|
||||
@@ -0,0 +1,8 @@
|
||||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_USAGE, "Affiche le nom de l'hôte actuel.\n\nhostname"
|
||||
IDS_NOSET, "hostname -s n'est pas pris en charge."
|
||||
IDS_ERROR, "Erreur Win32"
|
||||
END
|
||||
@@ -0,0 +1,8 @@
|
||||
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_USAGE, "Wyœwietla obecn¹ nazwê komputera.\n\nhostname"
|
||||
IDS_NOSET, "Opcja hostname -s nie jest wspierana."
|
||||
IDS_ERROR, "B³¹d Win32"
|
||||
END
|
||||
@@ -0,0 +1,8 @@
|
||||
#ifndef RESOURCE_H
|
||||
#define RESOURCE_H
|
||||
|
||||
#define IDS_USAGE 0
|
||||
#define IDS_NOSET 1
|
||||
#define IDS_ERROR 2
|
||||
|
||||
#endif /* RESOURCE_H */
|
||||
@@ -0,0 +1,17 @@
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
// UTF-8
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef LANGUAGE_CS_CZ
|
||||
#include "lang/cs-CZ.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_FR_FR
|
||||
#include "lang/fr-FR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_PL_PL
|
||||
#include "lang/pl-PL.rc"
|
||||
#endif
|
||||
@@ -0,0 +1,21 @@
|
||||
/* FILE: base/applications/cmdutils/reg/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* UPDATED: 2013-05-01
|
||||
*/
|
||||
|
||||
#include "reg.h"
|
||||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_USAGE, "Syntaxe tohoto příkazu:\n\nREG [ ADD | DELETE | QUERY ]\nREG operace /?\n"
|
||||
STRING_ADD_USAGE, "REG ADD název_klíče [/v název_hodnoty | /ve] [/t type] [/s oddělovač] [/d data] [/f]\n"
|
||||
STRING_DELETE_USAGE, "REG DELETE název_klíče [/v název_hodnoty | /ve | /va] [/f]\n"
|
||||
STRING_QUERY_USAGE, "REG QUERY název_klíče [/v název_hodnoty | /ve] [/s]\n"
|
||||
STRING_SUCCESS, "Operace byla úspěšně dokončena\n"
|
||||
STRING_INVALID_KEY, "Chyba: Neplatný název klíče\n"
|
||||
STRING_INVALID_CMDLINE, "Chyba: Neplatné parametry příkazové řádky\n"
|
||||
STRING_NO_REMOTE, "Chyba: Nelze přidat klíče na vzdálený stroj\n"
|
||||
STRING_CANNOT_FIND, "Chyba: Systém nenalezl zadaný klíč nebo hodnotu registru\n"
|
||||
}
|
||||
@@ -3,6 +3,9 @@
|
||||
#ifdef LANGUAGE_BG_BG
|
||||
#include "lang/bg-BG.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_CS_CZ
|
||||
#include "lang/cs-CZ.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_DA_DK
|
||||
#include "lang/da-DK.rc"
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Çeviri: Arda Tanrıkulu <[email protected]>
|
||||
* Çeviri: Arda Tanrıkulu ([email protected]), Erdem Ersoy ([email protected])
|
||||
*/
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
@@ -12,7 +12,7 @@ FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "Tab1",IDC_TAB_CONTROL,"SysTabControl32",WS_TABSTOP,2,2,474,250
|
||||
PUSHBUTTON "&Yardım", IDC_BUTTON_HELP, 2, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
DEFPUSHBUTTON "S&onraki Sayfa", IDC_BUTTON_NEXT, 257, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
DEFPUSHBUTTON "&Sonraki Bölüm", IDC_BUTTON_NEXT, 257, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
PUSHBUTTON "&Tüm Bilgileri Kaydet...", IDC_BUTTON_SAVE_INFO, 311, 261, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
PUSHBUTTON "&Çıkış", IDC_BUTTON_EXIT, 425, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
END
|
||||
@@ -21,19 +21,19 @@ IDD_SYSTEM_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Bu araç, sisteminizde yüklü ReactX bileşenleri ve sürücüleri hakkında detaylı bilgi raporlar. İşlevselliği sınamanızı, sorunları tanımanızı en iyi şekilde çalışmak için sistem yapılandırmanızı değiştirmenizi sağlar.", -1, 10, 10, 443, 17
|
||||
LTEXT "Hangi alanın soruna neden olduğunu biliyorsanız, yukarıda uygun sekmeyi tıklatın. Aksi halde, sırayla her sayfaya gitmek için aşağıdaki ""Sonraki Sayfa"" düğmesini kullanabilirsiniz.", -1, 10, 30, 443, 25
|
||||
GROUPBOX "Sistem Bilgisi", -1, 10, 55, 443, 130, SS_RIGHT
|
||||
LTEXT "Geçerli Tarih/Saat:", -1, 70, 70, 80, 10, SS_RIGHT
|
||||
LTEXT "Bilgisayar Adı:", -1, 70, 80, 80, 10, SS_RIGHT
|
||||
LTEXT "İşletim Sistemi:", -1, 70, 90, 80, 10, SS_RIGHT
|
||||
LTEXT "Bu araç, dizgenizde yüklü ReactX bileşenleri ve sürücüleri hakkında ayrıntılı bilgi yazanaklar.", -1, 10, 10, 443, 17
|
||||
LTEXT "Soruna hangi bölümün neden olduğunu biliyorsanız, yukarıdaki uygun sekmeyi tıklatınız. Bilmiyorsanız sırayla her bölüme gitmek için aşağıdaki ""Sonraki Bölüm"" düğmesini kullanabilirsiniz.", -1, 10, 30, 443, 25
|
||||
GROUPBOX "Bilgisayar Bilgisi", -1, 10, 55, 443, 130, SS_RIGHT
|
||||
LTEXT "Geçerli Zaman:", -1, 70, 70, 80, 10, SS_RIGHT
|
||||
LTEXT "Ad:", -1, 70, 80, 80, 10, SS_RIGHT
|
||||
LTEXT "İşletim Dizgesi:", -1, 70, 90, 80, 10, SS_RIGHT
|
||||
LTEXT "Dil:", -1, 70, 100, 80, 10, SS_RIGHT
|
||||
LTEXT "Sistem Üreticisi:", -1, 70, 110, 80, 10, SS_RIGHT
|
||||
LTEXT "Sistem Modeli:", -1, 70, 120, 80, 10, SS_RIGHT
|
||||
LTEXT "Üretici:", -1, 70, 110, 80, 10, SS_RIGHT
|
||||
LTEXT "Biçim:", -1, 70, 120, 80, 10, SS_RIGHT
|
||||
LTEXT "BIOS:", -1, 70, 130, 80, 10, SS_RIGHT
|
||||
LTEXT "İşlemci:", -1, 70, 140, 80, 10, SS_RIGHT
|
||||
LTEXT "Bellek:", -1, 70, 150, 80, 10, SS_RIGHT
|
||||
LTEXT "Sayfa Dosyası:", -1, 70, 160, 80, 10, SS_RIGHT
|
||||
LTEXT "Disk Belleği:", -1, 70, 160, 80, 10, SS_RIGHT
|
||||
LTEXT "ReactX Sürümü:", -1, 70, 170, 80, 10, SS_RIGHT
|
||||
LTEXT "", IDC_STATIC_TIME, 155, 70, 195, 10, SS_LEFT
|
||||
LTEXT "", IDC_STATIC_COMPUTER, 155, 80, 195, 10, SS_LEFT
|
||||
@@ -55,11 +55,11 @@ BEGIN
|
||||
GROUPBOX "Aygıt", -1, 10, 10, 250, 100
|
||||
RTEXT "Ad:", -1, 20, 25, 70, 10
|
||||
RTEXT "Üretici:", -1, 20, 35, 70, 10
|
||||
RTEXT "Yonga türü:", -1, 20, 45, 70, 10
|
||||
RTEXT "DAC türü:", -1, 20, 55, 70, 10
|
||||
RTEXT "Yaklaşık Top. Bellek:", -1, 20, 65, 70, 10
|
||||
RTEXT "Geçerli Görüntü Modu:", -1, 20, 75, 70, 10
|
||||
RTEXT "Monitör:", -1, 20, 85, 70, 10
|
||||
RTEXT "Yonga Türü:", -1, 20, 45, 70, 10
|
||||
RTEXT "DAC Türü:", -1, 20, 55, 70, 10
|
||||
RTEXT "Yaklaşık Toplam Bellek:", -1, 20, 65, 70, 10
|
||||
RTEXT "Geçerli Görüntü Seçeneği:", -1, 20, 75, 70, 10
|
||||
RTEXT "Göstergeç:", -1, 20, 85, 70, 10
|
||||
LTEXT "", IDC_STATIC_ADAPTER_ID, 95, 25, 150, 10
|
||||
LTEXT "", IDC_STATIC_ADAPTER_VENDOR, 95, 35, 150, 10
|
||||
LTEXT "", IDC_STATIC_ADAPTER_CHIP, 95, 45, 150, 10
|
||||
@@ -71,8 +71,8 @@ BEGIN
|
||||
GROUPBOX "Sürücüler", -1, 270, 10, 190, 100
|
||||
RTEXT "Ana Sürücü:", -1, 275, 25, 55, 10
|
||||
RTEXT "Sürüm:", -1, 275, 35, 55, 10
|
||||
RTEXT "Tarih:", -1, 275, 45, 55, 10
|
||||
RTEXT "WHQL Logolu:", -1, 275, 55, 55, 10
|
||||
RTEXT "Zaman:", -1, 275, 45, 55, 10
|
||||
RTEXT "WHQL İmleği:", -1, 275, 55, 55, 10
|
||||
RTEXT "Mini VDD:", -1, 275, 65, 55, 10
|
||||
RTEXT " vvdddVDD:", -1, 275, 75, 55, 10
|
||||
RTEXT "DDI Sürümü:", -1, 275, 85, 55, 10
|
||||
@@ -85,17 +85,17 @@ BEGIN
|
||||
LTEXT "", IDC_STATIC_ADAPTER_DDI, 335, 85, 100, 10
|
||||
|
||||
GROUPBOX "ReactX Özellikleri", -1, 10, 115, 450, 60
|
||||
RTEXT "DirectDraw Hızlandırması:", -1, 15, 130, 110, 12
|
||||
RTEXT "Direct3D Hızlandırması:", -1, 15, 145, 110, 12
|
||||
RTEXT "ReactDraw Hızlandırması:", -1, 15, 130, 110, 12
|
||||
RTEXT "React3D Hızlandırması:", -1, 15, 145, 110, 12
|
||||
RTEXT "AGP Doku Hızlandırması:", -1, 15, 160, 110, 12
|
||||
LTEXT "", IDC_STATIC_DDSTATE, 130, 130, 40, 10
|
||||
LTEXT "", IDC_STATIC_D3DSTATE, 130, 145, 40, 10
|
||||
LTEXT "", IDC_STATIC_AGPSTATE, 130, 160, 40, 10
|
||||
PUSHBUTTON "Enable", IDC_BUTTON_DDRAW, 170, 124, 60, 14, WS_DISABLED
|
||||
PUSHBUTTON "Enable", IDC_BUTTON_D3D, 170, 140, 60, 14, WS_DISABLED
|
||||
PUSHBUTTON "Enable", IDC_BUTTON_AGP, 170, 156, 60, 14, WS_DISABLED
|
||||
PUSHBUTTON "DirectDra&w Sınaması Yap", IDC_BUTTON_TESTDD, 250, 124, 80, 14
|
||||
PUSHBUTTON "Dire&ct3D Sınaması Yap", IDC_BUTTON_TEST3D, 250, 140, 80, 14
|
||||
PUSHBUTTON "Etkinleştir", IDC_BUTTON_DDRAW, 170, 124, 60, 14, WS_DISABLED
|
||||
PUSHBUTTON "Etkinleştir", IDC_BUTTON_D3D, 170, 140, 60, 14, WS_DISABLED
|
||||
PUSHBUTTON "Etkinleştir", IDC_BUTTON_AGP, 170, 156, 60, 14, WS_DISABLED
|
||||
PUSHBUTTON "&ReactDraw'ı Sına", IDC_BUTTON_TESTDD, 250, 124, 80, 14
|
||||
PUSHBUTTON "R&eact3D'yi Sına", IDC_BUTTON_TEST3D, 250, 140, 80, 14
|
||||
|
||||
GROUPBOX "Notlar", -1, 10, 180, 450, 40
|
||||
EDITTEXT IDC_TEXT_INFO, 20, 192, 432, 20, WS_DISABLED | WS_TABSTOP
|
||||
@@ -108,11 +108,11 @@ FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
GROUPBOX "Aygıt", -1, 10, 10, 250, 100
|
||||
RTEXT "Ad:", -1, 20, 25, 70, 10
|
||||
RTEXT "Aygıt tanıtıcı:", -1, 20, 35, 70, 10
|
||||
RTEXT "Aygıt Kimliği:", -1, 20, 35, 70, 10
|
||||
RTEXT "Üretici Kimliği:", -1, 20, 45, 70, 10
|
||||
RTEXT "Ürün Kimliği:", -1, 20, 55, 70, 10
|
||||
RTEXT "Tür:", -1, 20, 65, 70, 10
|
||||
RTEXT "Varsayılan aygıt:", -1, 20, 75, 70, 10
|
||||
RTEXT "Varsayılan Aygıt:", -1, 20, 75, 70, 10
|
||||
LTEXT "", IDC_STATIC_DSOUND_NAME, 95, 25, 150, 10
|
||||
LTEXT "", IDC_STATIC_DSOUND_DEVICEID, 95, 35, 150, 10
|
||||
LTEXT "", IDC_STATIC_DSOUND_VENDORID, 95, 45, 150, 10
|
||||
@@ -122,9 +122,9 @@ BEGIN
|
||||
GROUPBOX "Sürücü", -1, 270, 10, 190, 100
|
||||
RTEXT "Ad:", -1, 275, 25, 55, 10
|
||||
RTEXT "Sürüm:", -1, 275, 35, 55, 10
|
||||
RTEXT "Tarih:", -1, 275, 45, 55, 10
|
||||
RTEXT "WHQL Logolu:", -1, 275, 55, 55, 10
|
||||
RTEXT "Diğer Dosyalar:", -1, 275, 65, 55, 10
|
||||
RTEXT "Zaman:", -1, 275, 45, 55, 10
|
||||
RTEXT "WHQL İmleği:", -1, 275, 55, 55, 10
|
||||
RTEXT "Diğer Kütükler:", -1, 275, 65, 55, 10
|
||||
RTEXT "Sağlayıcı:", -1, 275, 75, 55, 10
|
||||
LTEXT "", IDC_STATIC_DSOUND_DRIVER, 335, 25, 100, 10
|
||||
LTEXT "", IDC_STATIC_DSOUND_VERSION, 335, 35, 100, 10
|
||||
@@ -134,8 +134,8 @@ BEGIN
|
||||
LTEXT "", IDC_STATIC_ADAPTER_PROVIDER, 335, 75, 100, 10
|
||||
GROUPBOX "ReactX Özellikleri", -1, 10, 115, 450, 60
|
||||
CONTROL "", IDC_SLIDER_DSOUND, "msctls_trackbar32", TBS_BOTTOM | TBS_AUTOTICKS | WS_TABSTOP, 120, 135, 80, 17
|
||||
RTEXT "Donanım Ses\nHızlandırma Düzeyi:", -1, 20, 135, 90, 20
|
||||
PUSHBUTTON "DirectSo&und'u Sına", IDC_BUTTON_TESTDSOUND, 270, 134, 80, 14
|
||||
RTEXT "Donanım İvmesi:", -1, 20, 135, 90, 20
|
||||
PUSHBUTTON "&ReactSound'u Sına", IDC_BUTTON_TESTDSOUND, 270, 134, 80, 14
|
||||
GROUPBOX "Notlar", -1, 10, 180, 450, 40
|
||||
EDITTEXT IDC_TEXT_DSOUNDINFO, 20, 192, 432, 20, WS_DISABLED | WS_TABSTOP
|
||||
END
|
||||
@@ -151,7 +151,7 @@ IDD_INPUT_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
GROUPBOX "DirectInput Aygıtları", -1, 10, 10, 452, 80
|
||||
GROUPBOX "ReactInput Aygıtları", -1, 10, 10, 452, 80
|
||||
CONTROL "", IDC_LIST_DEVICE, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 20, 22, 432, 60
|
||||
GROUPBOX "Girişle İlgili Aygıtlar", -1, 10, 100, 452, 60
|
||||
CONTROL "", IDC_TREE_PORT, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 20, 112, 432, 40, 0x00000200
|
||||
@@ -163,7 +163,7 @@ IDD_NETWORK_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
GROUPBOX "Kayıtlı DirectPlay Hizmet Sağlayıcıları", -1, 10, 10, 452, 80
|
||||
GROUPBOX "Kayıtlı ReactPlay Hizmet Sağlayıcıları", -1, 10, 10, 452, 80
|
||||
CONTROL "", IDC_LIST_PROVIDER, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 20, 22, 432, 60
|
||||
END
|
||||
|
||||
@@ -176,54 +176,54 @@ END
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_MAIN_DIALOG "ReactX Tanı Aracı"
|
||||
IDS_SYSTEM_DIALOG "Sistem"
|
||||
IDS_SYSTEM_DIALOG "Dizge"
|
||||
IDS_DISPLAY_DIALOG "Görüntü"
|
||||
IDS_SOUND_DIALOG "Ses"
|
||||
IDS_MUSIC_DIALOG "Müzik"
|
||||
IDS_MUSIC_DIALOG "Mûsiki"
|
||||
IDS_INPUT_DIALOG "Giriş"
|
||||
IDS_NETWORK_DIALOG "Ağ"
|
||||
IDS_HELP_DIALOG "Yardım"
|
||||
IDS_FORMAT_MB "%I64uMB RAM"
|
||||
IDS_FORMAT_SWAP "%I64u MB kullanılan, %I64u MB kullanılabilir"
|
||||
IDS_FORMAT_MB "%I64u MB RAM"
|
||||
IDS_FORMAT_SWAP "%I64u MB kullanıldı, %I64u MB kullanılabilir"
|
||||
IDS_FORMAT_UNIPROC "%s (%u CPU)"
|
||||
IDS_FORMAT_MPPROC "%s (%u CPUlar)"
|
||||
IDS_FORMAT_MPPROC "%s (%u CPU)"
|
||||
IDS_VERSION_UNKNOWN "Bilinmeyen Sürüm"
|
||||
IDS_DEVICE_STATUS_ATTACHED "Bağlı"
|
||||
IDS_DEVICE_STATUS_MISSING "Bağlı değil"
|
||||
IDS_DEVICE_STATUS_UNKNOWN "Bilinmiyor"
|
||||
IDS_DEVICE_NAME "Aygıt adı"
|
||||
IDS_DEVICE_NAME "Aygıt Adı"
|
||||
IDS_DEVICE_STATUS "Durum"
|
||||
IDS_DEVICE_CONTROLLER "Denetleyici Kimliği"
|
||||
IDS_DEVICE_MANUFACTURER "Üretici Kimliği"
|
||||
IDS_DEVICE_PRODUCT "Ürüm Kimliği"
|
||||
IDS_DEVICE_FORCEFEEDBACK "Force Feedback Sürücü"
|
||||
IDS_NOT_APPLICABLE "Kullanılamaz"
|
||||
IDS_DEVICE_PRODUCT "Ürün Kimliği"
|
||||
IDS_DEVICE_FORCEFEEDBACK "Güç Geribildirimli Sürücüsü"
|
||||
IDS_NOT_APPLICABLE "Uygulanamaz"
|
||||
IDS_OPTION_YES "Evet"
|
||||
IDS_DIRECTPLAY_COL_NAME1 "Ad"
|
||||
IDS_DIRECTPLAY_COL_NAME2 "Kayıt"
|
||||
IDS_DIRECTPLAY_COL_NAME3 "Dosya"
|
||||
IDS_DIRECTPLAY_COL_NAME2 "Değer"
|
||||
IDS_DIRECTPLAY_COL_NAME3 "Kütük"
|
||||
IDS_DIRECTPLAY_COL_NAME4 "Sürüm"
|
||||
IDS_DIRECTPLAY8_MODEMSP "DirectPlay8-Modem Servis Sağlayıcısı"
|
||||
IDS_DIRECTPLAY8_SERIALSP "DirectPlay8 Seri Servis Sağlayıcısı"
|
||||
IDS_DIRECTPLAY8_IPXSP "DirectPlay8 IPX Servis Sağlayıcısı"
|
||||
IDS_DIRECTPLAY8_TCPSP "DirectPlay8-TCP/IP Servis Sağlayıcısı"
|
||||
IDS_DIRECTPLAY_TCPCONN "DirectPlay için Internet TCP/IP Bağlantısı"
|
||||
IDS_DIRECTPLAY_IPXCONN "DirectPlay için IPX Bağlantısı"
|
||||
IDS_DIRECTPLAY_MODEMCONN "DirectPlay için Modem Bağlantısı"
|
||||
IDS_DIRECTPLAY_SERIALCONN "DirectPlay için Seri Bağlantı"
|
||||
IDS_DIRECTPLAY8_MODEMSP "ReactPlay8 Çevirge Hizmeti Sağlayıcısı"
|
||||
IDS_DIRECTPLAY8_SERIALSP "ReactPlay8 Dizi Hizmeti Sağlayıcısı"
|
||||
IDS_DIRECTPLAY8_IPXSP "ReactPlay8 IPX Hizmeti Sağlayıcısı"
|
||||
IDS_DIRECTPLAY8_TCPSP "ReactPlay8 TCP/IP Hizmeti Sağlayıcısı"
|
||||
IDS_DIRECTPLAY_TCPCONN "ReactPlay için Genelağ TCP/IP Bağlantısı"
|
||||
IDS_DIRECTPLAY_IPXCONN "ReactPlay için IPX Bağlantısı"
|
||||
IDS_DIRECTPLAY_MODEMCONN "ReactPlay için Çeivrge Bağlantısı"
|
||||
IDS_DIRECTPLAY_SERIALCONN "ReactPlay için Dizi Bağlantısı"
|
||||
IDS_REG_SUCCESS "Tamam"
|
||||
IDS_REG_FAIL "Hata"
|
||||
IDS_DDTEST_ERROR "Test başarısız oldu!"
|
||||
IDS_DDTEST_DESCRIPTION "DirectDraw arayüz sınaması başlatılacak. Devam?"
|
||||
IDS_DDPRIMARY_DESCRIPTION "Bu sınama DirectDraw'u birincil yüzeye yazmak için kullanacak. Siyah ve beyaz dikdörtgenler çizilecek. Devam?"
|
||||
IDS_DDPRIMARY_RESULT "Siyah ve beyaz dikdörtgenler gördünüz mü?"
|
||||
IDS_DDOFFSCREEN_DESCRIPTION "Bu sınama DirectDraw'u ekranüstü arabelleği kullanacak. Hareket eden beyaz dikdörtgen göreceksiniz. Devam?"
|
||||
IDS_DDOFFSCREEN_RESULT "Hareket eden beyaz dikdörtgen gördünüz mü?"
|
||||
IDS_DDFULLSCREEN_DESCRIPTION "Bu sınama DirectDraw ile tam ekran yazım yapacak. Hareket eden beyaz dikdörtgen göreceksiniz. Devam?"
|
||||
IDS_DDFULLSCREEN_RESULT "Tam ekran modunda hareket eden beyaz dikdörtgen gördünüz mü?"
|
||||
IDS_DDTEST_ERROR "Sınama başarısız oldu."
|
||||
IDS_DDTEST_DESCRIPTION "ReactDraw arayüz sınaması başlatılacak. Sürdürülsün mü?"
|
||||
IDS_DDPRIMARY_DESCRIPTION "Bu sınama, ReactDraw'ı birincil yüzeye çizmek için kullanacak. Ekrana ak ve kara dikdörtgenler çizilecek. Sürdürülsün mü?"
|
||||
IDS_DDPRIMARY_RESULT "Ekranda ak ve kara dikdörtgenler gördünüz mü?"
|
||||
IDS_DDOFFSCREEN_DESCRIPTION "Bu sınama, ReactDraw'ı ekran dışı arabelleğe çizmek için kullanacak. Ekranda devinen bir ak dikdörtgen göreceksiniz. Sürdürülsün mü?"
|
||||
IDS_DDOFFSCREEN_RESULT "Ekranda devinen bir ak dikdörtgen gördünüz mü?"
|
||||
IDS_DDFULLSCREEN_DESCRIPTION "Bu sınama, ReactDraw'ı tam ekranda çizmek için kullanacak. Tam ekranda devinen bir ak dikdörtgen göreceksiniz. Sürdürülsün mü?"
|
||||
IDS_DDFULLSCREEN_RESULT "Tam ekranda devinen bir ak dikdörtgen gördünüz mü?"
|
||||
IDS_FORMAT_ADAPTER_MEM "%u MB"
|
||||
IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u bit)(%uHz)"
|
||||
IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u ikillik) (%uHz)"
|
||||
IDS_OPTION_NO "Hayır"
|
||||
IDS_D3DTEST_DESCRIPTION "Direct3D arayüz sınaması başlatılacak. Devam?"
|
||||
IDS_D3DTEST_D3Dx "Bu sınama donanım hızlandırmalı Direct3D %u arayüzünü kullanacak."
|
||||
IDS_D3DTEST_DESCRIPTION "React3D arayüz sınaması başlatılacak. Sürdürülsün mü?"
|
||||
IDS_D3DTEST_D3Dx "Bu sınama, donanım hızlandırmalı React3D %u arayüzünü kullanacak."
|
||||
END
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
|
||||
|
||||
IDR_POPUP MENU
|
||||
BEGIN
|
||||
POPUP "popup"
|
||||
BEGIN
|
||||
MENUITEM "&Yeğlemeler...", ID_PREFERENCES
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Çıkış", ID_EXIT
|
||||
END
|
||||
END
|
||||
@@ -52,6 +52,9 @@
|
||||
#ifdef LANGUAGE_SV_SE
|
||||
#include "lang/sv-SE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
#include "lang/tr-TR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_UK_UA
|
||||
#include "lang/uk-UA.rc"
|
||||
#endif
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <winsvc.h>
|
||||
#include <winuser.h>
|
||||
#include <windowsx.h> /* GET_X/Y_LPARAM */
|
||||
#include <wincon.h>
|
||||
#include <tchar.h>
|
||||
#include <commdlg.h>
|
||||
#include <cderr.h>
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <winreg.h>
|
||||
#include <wingdi.h>
|
||||
#include <winuser.h>
|
||||
#include <wincon.h>
|
||||
#include <commdlg.h>
|
||||
#include <shlobj.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -5,6 +5,9 @@ list(APPEND SOURCE
|
||||
main.c
|
||||
cmdstart.c
|
||||
cmdStop.c
|
||||
cmdHelpMsg.c
|
||||
cmdPause.c
|
||||
cmdContinue.c
|
||||
help.c)
|
||||
|
||||
add_executable(net ${SOURCE})
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS net command
|
||||
* FILE: cmdContinue.c
|
||||
* PURPOSE:
|
||||
*
|
||||
* PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
|
||||
*/
|
||||
|
||||
#include "net.h"
|
||||
|
||||
INT cmdContinue(INT argc, WCHAR **argv)
|
||||
{
|
||||
SC_HANDLE hManager = NULL;
|
||||
SC_HANDLE hService = NULL;
|
||||
SERVICE_STATUS status;
|
||||
INT nError = 0;
|
||||
|
||||
if (argc != 3)
|
||||
{
|
||||
puts("Usage: NET CONTINUE <Service Name>");
|
||||
return 1;
|
||||
}
|
||||
|
||||
hManager = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ENUMERATE_SERVICE);
|
||||
if (hManager == NULL)
|
||||
{
|
||||
printf("[OpenSCManager] Error: %ld\n", GetLastError());
|
||||
nError = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
hService = OpenService(hManager, argv[2], SERVICE_PAUSE_CONTINUE);
|
||||
if (hService == NULL)
|
||||
{
|
||||
printf("[OpenService] Error: %ld\n", GetLastError());
|
||||
nError = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!ControlService(hService, SERVICE_CONTROL_CONTINUE, &status))
|
||||
{
|
||||
printf("[ControlService] Error: %ld\n", GetLastError());
|
||||
nError = 1;
|
||||
}
|
||||
|
||||
done:
|
||||
if (hService != NULL)
|
||||
CloseServiceHandle(hService);
|
||||
|
||||
if (hManager != NULL)
|
||||
CloseServiceHandle(hManager);
|
||||
|
||||
return nError;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS net command
|
||||
* FILE: cmdHelpmsg.c
|
||||
* PURPOSE:
|
||||
*
|
||||
* PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
|
||||
*/
|
||||
|
||||
#include "net.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
INT cmdHelpMsg(INT argc, WCHAR **argv)
|
||||
{
|
||||
LPWSTR endptr;
|
||||
LPWSTR lpBuffer;
|
||||
LONG errNum;
|
||||
|
||||
if (argc < 3)
|
||||
{
|
||||
puts("Usage: NET HELPMSG <Error Code>");
|
||||
return 1;
|
||||
}
|
||||
|
||||
errNum = wcstol(argv[2], &endptr, 10);
|
||||
if (*endptr != 0)
|
||||
{
|
||||
puts("Usage: NET HELPMSG <Error Code>");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Unicode printing is not supported in ReactOS yet */
|
||||
if (FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL,
|
||||
errNum,
|
||||
LANG_USER_DEFAULT,
|
||||
(LPWSTR)&lpBuffer,
|
||||
0,
|
||||
NULL))
|
||||
{
|
||||
printf("\n%S\n", lpBuffer);
|
||||
LocalFree(lpBuffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Unrecognized error code: %ld\n", errNum);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS net command
|
||||
* FILE: cmdPause.c
|
||||
* PURPOSE:
|
||||
*
|
||||
* PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
|
||||
*/
|
||||
|
||||
#include "net.h"
|
||||
|
||||
INT cmdPause(INT argc, WCHAR **argv)
|
||||
{
|
||||
SC_HANDLE hManager = NULL;
|
||||
SC_HANDLE hService = NULL;
|
||||
SERVICE_STATUS status;
|
||||
INT nError = 0;
|
||||
|
||||
if (argc != 3)
|
||||
{
|
||||
puts("Usage: NET PAUSE <Service Name>");
|
||||
return 1;
|
||||
}
|
||||
|
||||
hManager = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ENUMERATE_SERVICE);
|
||||
if (hManager == NULL)
|
||||
{
|
||||
printf("[OpenSCManager] Error: %ld\n", GetLastError());
|
||||
nError = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
hService = OpenService(hManager, argv[2], SERVICE_PAUSE_CONTINUE);
|
||||
if (hService == NULL)
|
||||
{
|
||||
printf("[OpenService] Error: %ld\n", GetLastError());
|
||||
nError = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!ControlService(hService, SERVICE_CONTROL_PAUSE, &status))
|
||||
{
|
||||
printf("[ControlService] Error: %ld\n", GetLastError());
|
||||
}
|
||||
|
||||
done:
|
||||
if (hService != NULL)
|
||||
CloseServiceHandle(hService);
|
||||
|
||||
if (hManager != NULL)
|
||||
CloseServiceHandle(hManager);
|
||||
|
||||
return nError;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
INT cmdHelp(INT argc, WCHAR **argv)
|
||||
{
|
||||
if (argc > 3)
|
||||
if (argc != 3)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -21,14 +21,15 @@ COMMAND cmds[] =
|
||||
{L"accounts", unimplemented},
|
||||
{L"computer", unimplemented},
|
||||
{L"config", unimplemented},
|
||||
{L"continue", unimplemented},
|
||||
{L"continue", cmdContinue},
|
||||
{L"file", unimplemented},
|
||||
{L"group", unimplemented},
|
||||
{L"help", cmdHelp},
|
||||
{L"helpmsg", unimplemented},
|
||||
{L"helpmsg", cmdHelpMsg},
|
||||
{L"localgroup", unimplemented},
|
||||
{L"name", unimplemented},
|
||||
{L"print", unimplemented},
|
||||
{L"pause", cmdPause},
|
||||
{L"send", unimplemented},
|
||||
{L"session", unimplemented},
|
||||
{L"share", unimplemented},
|
||||
@@ -39,7 +40,7 @@ COMMAND cmds[] =
|
||||
{L"use", unimplemented},
|
||||
{L"user", unimplemented},
|
||||
{L"view", unimplemented},
|
||||
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
int wmain(int argc, WCHAR **argv)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* FILE:
|
||||
* PURPOSE:
|
||||
*
|
||||
* PROGRAMMERS: Magnus Olsen ([email protected])
|
||||
* PROGRAMMERS: Magnus Olsen ([email protected])
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
@@ -16,6 +16,9 @@
|
||||
VOID help(VOID);
|
||||
INT unimplemented(INT argc, WCHAR **argv);
|
||||
|
||||
INT cmdContinue(INT argc, WCHAR **argv);
|
||||
INT cmdHelp(INT argc, WCHAR **argv);
|
||||
INT cmdHelpMsg(INT argc, WCHAR **argv);
|
||||
INT cmdPause(INT argc, WCHAR **argv);
|
||||
INT cmdStart(INT argc, WCHAR **argv);
|
||||
INT cmdStop(INT argc, WCHAR **argv);
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/* FILE: base/applications/network/wlanconf/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* UPDATED: 2013-02-15
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_USAGE, "\nNakonfiguruje bezdrátový síťový adaptér (WLAN).\n\n\
|
||||
WLANCONF [-c SSID [-w WEP] [-a]] [-d] [-s]\n\n\
|
||||
\t-c SSID\t\tPřipojí se k zadanému SSID.\n\
|
||||
\t-w WEP\t\tSpecifikuje použitý WEP klíč.\n\
|
||||
\t-a\t\tSpecifikuje, že cílová síť je v režimu ad hoc.\n\
|
||||
\t-d\t\tOdpojí se od současného AP (přístupového bodu).\n\
|
||||
\t-s\t\tProhledá a zobrazí seznam přístupových bodů v dosahu.\n\
|
||||
Spuštění bez parametrů vypíše informace o současném bezdrátovém připojení.\n"
|
||||
/* === */
|
||||
IDS_NO_NETWORK, "Nebyly nalezeny žádné sítě\n"
|
||||
IDS_NO_WLAN_ADAPTER, "V systému nebyl nalezen WLAN adaptér\n"
|
||||
IDS_SUCCESS, "Operace byla úspěšně dokončena.\n"
|
||||
IDS_WLAN_DISCONNECT, "\nWLAN odpojen\n"
|
||||
/* === */
|
||||
IDS_MSG_WEP_ENABLED, "WEP zapnuto: %s\n"
|
||||
IDS_MSG_NETWORK_MODE, "Režim sítě: %s\n"
|
||||
IDS_MSG_CURRENT_WIRELESS, "\nAktuální informace o bezdrátové konfiguraci:\n\n"
|
||||
IDS_MSG_ENCRYPTED, "Zašifrováno: %s\n"
|
||||
IDS_MSG_NETWORK_TYPE, "Typ sítě: %s\n"
|
||||
IDS_MSG_RSSI, "RSSI: %i dBm\n"
|
||||
IDS_MSG_SUPPORT_RATE, "Podporované rychlosti (Mbps): "
|
||||
IDS_MSG_TRANSMISSION_POWER, "Přenosový výkon: %d mW\n"
|
||||
IDS_MSG_ANTENNA_COUNT, "Počet antén: %d\n"
|
||||
IDS_MSG_TRANSMIT_ANTENNA, "Vysílací anténa: %d\n"
|
||||
IDS_MSG_TRANSMIT_ANTENNA_ANY, "Vysílací anténa: jakákoliv\n"
|
||||
IDS_MSG_RECEIVE_ANTENNA, "Přijímací anténa: %d\n"
|
||||
IDS_MSG_RECEIVE_ANTENNA_ANY, "Přijímací anténa: jakákoliv\n"
|
||||
IDS_MSG_FRAGMENT_THRESHOLD, "Hranice fragmentace: %d bajtů\n"
|
||||
IDS_MSG_RTS_THRESHOLD, "Hranice RTS: %d bajtů\n"
|
||||
/* === */
|
||||
IDS_YES, "Ano"
|
||||
IDS_NO, "Ne"
|
||||
IDS_ADHOC, "Ad hoc"
|
||||
IDS_INFRASTRUCTURE, "Infrastruktura"
|
||||
END
|
||||
@@ -19,6 +19,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_CS_CZ
|
||||
#include "lang/cs-CZ.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_IT_IT
|
||||
#include "lang/it-IT.rc"
|
||||
#endif
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <wingdi.h>
|
||||
#include <winnls.h>
|
||||
#include <winuser.h>
|
||||
#include <wincon.h>
|
||||
#include <richedit.h>
|
||||
#include <shellapi.h>
|
||||
#include <shlwapi.h>
|
||||
|
||||
@@ -376,7 +376,7 @@ END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_BINARY_EMPTY "(binární položka nulové hodnoty)"
|
||||
IDS_BINARY_EMPTY "(binární položka nulové hodnoty)"
|
||||
IDS_DEFAULT_VALUE_NAME "(Výchozí)"
|
||||
IDS_VALUE_NOT_SET "(Hodnota nezadána)"
|
||||
IDS_UNKNOWN_TYPE "Neznámý typ: (0x%lx)"
|
||||
@@ -434,10 +434,10 @@ END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_IMPORT_PROMPT "Adding information can unintentionally change or delete values and cause components to stop working correctly.\nIf you do not trust the source of this information in '%s', do not add it to registry.\n\nAre you sure you want to continue?"
|
||||
IDS_IMPORT_OK "The keys and values contained in '%s' have been successfully added to the registry."
|
||||
IDS_IMPORT_ERROR "Cannot import '%s': Error opening the file. There may be a disk, file system error or file may not exist."
|
||||
IDS_EXPORT_ERROR "Cannot export '%s': Error creating or writing to the file. There may be a disk or file system error."
|
||||
IDS_IMPORT_PROMPT "Přidáváním informací můžete neúmyslně změnit nebo odstranit hodnoty a způsobit, že komponenty přestanou správně fungovat\nPokud nevěříte zdroji těchto informací v '%s', nepřidávejte je do registru.\n\nOpravdu chcete pokračovat?"
|
||||
IDS_IMPORT_OK "Klíče a hodnoty z '%s' byly úspěšně přidány do registru."
|
||||
IDS_IMPORT_ERROR "Nelze importovat '%s': Chyba při otevírání souboru. Došlo k chybě disku nebo souborového systému, nebo soubor neexistuje."
|
||||
IDS_EXPORT_ERROR "Nelze exportovat '%s': Chyba při vytváření či psaní do souboru. Došlo k chybě disku nebo souborového systému."
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -24,12 +24,12 @@
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Registry Explorer\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "regedit\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "regedit.exe\0"
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Registry Explorer"
|
||||
#define REACTOS_STR_INTERNAL_NAME "regedit"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "regedit.exe"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
#include "rsrc.rc"
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <wingdi.h>
|
||||
#include <winnls.h>
|
||||
#include <winver.h>
|
||||
#include <wincon.h>
|
||||
#include <shellapi.h>
|
||||
#include <shlobj.h>
|
||||
#include <shlobj_undoc.h>
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <winreg.h>
|
||||
#include <wingdi.h>
|
||||
#include <winnls.h>
|
||||
#include <wincon.h>
|
||||
#include <ole2.h>
|
||||
#include <shlwapi.h>
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <winbase.h>
|
||||
#include <winreg.h>
|
||||
#include <wingdi.h>
|
||||
#include <wincon.h>
|
||||
#include <shellapi.h>
|
||||
#include <regstr.h>
|
||||
#include <shlobj.h>
|
||||
|
||||
@@ -69,9 +69,6 @@ HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","18",2,"secur32.dll"
|
||||
HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","68",2,"netlogon.dll"
|
||||
HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","9",2,"secur32.dll"
|
||||
|
||||
; .NET
|
||||
HKLM,"SOFTWARE\Microsoft\.NETFramework\","InstallRoot",0x00020000,"%SystemRoot%\Microsoft .NET\Framework\"
|
||||
|
||||
HKLM,"SOFTWARE\Microsoft\Secure",,0x00000012
|
||||
|
||||
; WBem
|
||||
@@ -115,7 +112,7 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions",,0x00000012
|
||||
; FIXME - usetup doesn't handle extra paths
|
||||
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce","",0x00000000,"cmd /c md ""%programfiles%\Internet Explorer\"" && move %windir%\iexplore.exe ""%programfiles%\Internet Explorer\"" && ""%programfiles%\Internet Explorer\iexplore.exe"" /RegServer"
|
||||
; Create .NET Framework InstallRoot key, reg_sz & full path
|
||||
;HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce","InstallRoot.NET",0x00000000,"cmd /c reg add HKLM\SOFTWARE\Microsoft\.NETFramework /v InstallRoot /t REG_SZ /d %SystemRoot%\Microsoft.NET\Framework\"
|
||||
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce","InstallRoot.NET",0x00000000,"cmd /c reg add HKLM\SOFTWARE\Microsoft\.NETFramework /v InstallRoot /t REG_SZ /d %SystemRoot%\Microsoft.NET\Framework\"
|
||||
|
||||
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012
|
||||
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012
|
||||
|
||||
@@ -123,7 +123,8 @@ set(baseaddress_dxdiagn 0x74520000)
|
||||
set(baseaddress_faultrep 0x744f0000)
|
||||
set(baseaddress_fmifs 0x744d0000)
|
||||
set(baseaddress_fontext 0x744a0000)
|
||||
set(baseaddress_fusion 0x74470000)
|
||||
#fusion has to have dynamic address
|
||||
#set(baseaddress_fusion 0x74470000)
|
||||
set(baseaddress_getuname 0x74440000)
|
||||
set(baseaddress_hhctrl 0x74400000)
|
||||
set(baseaddress_hlink 0x743c0000)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <winreg.h>
|
||||
#include <wingdi.h>
|
||||
#include <winuser.h>
|
||||
#include <wincon.h>
|
||||
#include <shellapi.h>
|
||||
#include <commdlg.h>
|
||||
#include <cpl.h>
|
||||
|
||||
@@ -61,7 +61,7 @@ BEGIN
|
||||
COMBOBOX IDC_APPEARANCE_VISUAL_STYLE, 7, 140, 134, 90, CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Schéma", IDC_STATIC, 7, 160, 64, 7
|
||||
COMBOBOX IDC_APPEARANCE_COLORSCHEME, 7, 170, 134, 90, CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Size", IDC_STATIC, 7, 190, 64, 7
|
||||
LTEXT "Velikost", IDC_STATIC, 7, 190, 64, 7
|
||||
COMBOBOX IDC_APPEARANCE_SIZE, 7, 200, 134, 90, CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
PUSHBUTTON "&Efekty...", IDC_APPEARANCE_EFFECTS, 182, 150, 56, 15
|
||||
PUSHBUTTON "Upřesnit", IDC_APPEARANCE_ADVANCED, 182, 170, 56, 15
|
||||
@@ -239,7 +239,7 @@ BEGIN
|
||||
IDS_MESSBOX "Okno zprávy"
|
||||
IDS_MESSTEXT "Text zprávy"
|
||||
IDS_BUTTEXT "OK"
|
||||
IDS_CLASSIC_THEME "Classic Theme"
|
||||
IDS_CLASSIC_THEME "Klasické téma"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <winreg.h>
|
||||
#include <wingdi.h>
|
||||
#include <winuser.h>
|
||||
#include <wincon.h>
|
||||
#include <commdlg.h>
|
||||
#include <cplext.h>
|
||||
#include <tchar.h>
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <winreg.h>
|
||||
#include <wingdi.h>
|
||||
#include <winnls.h>
|
||||
#include <wincon.h>
|
||||
#include <powrprof.h>
|
||||
#include <tchar.h>
|
||||
#include <cpl.h>
|
||||
|
||||
+139
-139
@@ -30,145 +30,6 @@ PCSR_SERVER_API_ROUTINE CsrServerApiRoutine;
|
||||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
HANDLE
|
||||
NTAPI
|
||||
CsrGetProcessId(VOID)
|
||||
{
|
||||
return CsrProcessId;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
CsrClientCallServer(IN OUT PCSR_API_MESSAGE ApiMessage,
|
||||
IN OUT PCSR_CAPTURE_BUFFER CaptureBuffer OPTIONAL,
|
||||
IN CSR_API_NUMBER ApiNumber,
|
||||
IN ULONG DataLength)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
ULONG PointerCount;
|
||||
PULONG_PTR OffsetPointer;
|
||||
|
||||
/* Fill out the Port Message Header */
|
||||
ApiMessage->Header.u2.ZeroInit = 0;
|
||||
ApiMessage->Header.u1.s1.TotalLength =
|
||||
FIELD_OFFSET(CSR_API_MESSAGE, Data) + DataLength;
|
||||
ApiMessage->Header.u1.s1.DataLength =
|
||||
ApiMessage->Header.u1.s1.TotalLength - sizeof(PORT_MESSAGE);
|
||||
|
||||
/* Fill out the CSR Header */
|
||||
ApiMessage->ApiNumber = ApiNumber;
|
||||
ApiMessage->CsrCaptureData = NULL;
|
||||
|
||||
DPRINT("API: %lx, u1.s1.DataLength: %x, u1.s1.TotalLength: %x\n",
|
||||
ApiNumber,
|
||||
ApiMessage->Header.u1.s1.DataLength,
|
||||
ApiMessage->Header.u1.s1.TotalLength);
|
||||
|
||||
/* Check if we are already inside a CSR Server */
|
||||
if (!InsideCsrProcess)
|
||||
{
|
||||
/* Check if we got a Capture Buffer */
|
||||
if (CaptureBuffer)
|
||||
{
|
||||
/*
|
||||
* We have to convert from our local (client) view
|
||||
* to the remote (server) view.
|
||||
*/
|
||||
ApiMessage->CsrCaptureData = (PCSR_CAPTURE_BUFFER)
|
||||
((ULONG_PTR)CaptureBuffer + CsrPortMemoryDelta);
|
||||
|
||||
/* Lock the buffer. */
|
||||
CaptureBuffer->BufferEnd = NULL;
|
||||
|
||||
/*
|
||||
* Each client pointer inside the CSR message is converted into
|
||||
* a server pointer, and each pointer to these message pointers
|
||||
* is converted into an offset.
|
||||
*/
|
||||
PointerCount = CaptureBuffer->PointerCount;
|
||||
OffsetPointer = CaptureBuffer->PointerOffsetsArray;
|
||||
while (PointerCount--)
|
||||
{
|
||||
if (*OffsetPointer != 0)
|
||||
{
|
||||
*(PULONG_PTR)*OffsetPointer += CsrPortMemoryDelta;
|
||||
*OffsetPointer -= (ULONG_PTR)ApiMessage;
|
||||
}
|
||||
++OffsetPointer;
|
||||
}
|
||||
}
|
||||
|
||||
/* Send the LPC Message */
|
||||
Status = NtRequestWaitReplyPort(CsrApiPort,
|
||||
&ApiMessage->Header,
|
||||
&ApiMessage->Header);
|
||||
|
||||
/* Check if we got a Capture Buffer */
|
||||
if (CaptureBuffer)
|
||||
{
|
||||
/*
|
||||
* We have to convert back from the remote (server) view
|
||||
* to our local (client) view.
|
||||
*/
|
||||
ApiMessage->CsrCaptureData = (PCSR_CAPTURE_BUFFER)
|
||||
((ULONG_PTR)ApiMessage->CsrCaptureData - CsrPortMemoryDelta);
|
||||
|
||||
/*
|
||||
* Convert back the offsets into pointers to CSR message
|
||||
* pointers, and convert back these message server pointers
|
||||
* into client pointers.
|
||||
*/
|
||||
PointerCount = CaptureBuffer->PointerCount;
|
||||
OffsetPointer = CaptureBuffer->PointerOffsetsArray;
|
||||
while (PointerCount--)
|
||||
{
|
||||
if (*OffsetPointer != 0)
|
||||
{
|
||||
*OffsetPointer += (ULONG_PTR)ApiMessage;
|
||||
*(PULONG_PTR)*OffsetPointer -= CsrPortMemoryDelta;
|
||||
}
|
||||
++OffsetPointer;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for success */
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
/* We failed. Overwrite the return value with the failure. */
|
||||
DPRINT1("LPC Failed: %lx\n", Status);
|
||||
ApiMessage->Status = Status;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This is a server-to-server call. Save our CID and do a direct call. */
|
||||
DPRINT1("Next gen server-to-server call\n");
|
||||
|
||||
/* We check this equality inside CsrValidateMessageBuffer */
|
||||
ApiMessage->Header.ClientId = NtCurrentTeb()->ClientId;
|
||||
|
||||
Status = CsrServerApiRoutine(&ApiMessage->Header,
|
||||
&ApiMessage->Header);
|
||||
|
||||
/* Check for success */
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
/* We failed. Overwrite the return value with the failure. */
|
||||
ApiMessage->Status = Status;
|
||||
}
|
||||
}
|
||||
|
||||
/* Return the CSR Result */
|
||||
DPRINT("Got back: 0x%lx\n", ApiMessage->Status);
|
||||
return ApiMessage->Status;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
CsrpConnectToServer(IN PWSTR ObjectDirectory)
|
||||
@@ -460,4 +321,143 @@ CsrClientConnectToServer(IN PWSTR ObjectDirectory,
|
||||
return Status;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
CsrClientCallServer(IN OUT PCSR_API_MESSAGE ApiMessage,
|
||||
IN OUT PCSR_CAPTURE_BUFFER CaptureBuffer OPTIONAL,
|
||||
IN CSR_API_NUMBER ApiNumber,
|
||||
IN ULONG DataLength)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
ULONG PointerCount;
|
||||
PULONG_PTR OffsetPointer;
|
||||
|
||||
/* Fill out the Port Message Header */
|
||||
ApiMessage->Header.u2.ZeroInit = 0;
|
||||
ApiMessage->Header.u1.s1.TotalLength =
|
||||
FIELD_OFFSET(CSR_API_MESSAGE, Data) + DataLength;
|
||||
ApiMessage->Header.u1.s1.DataLength =
|
||||
ApiMessage->Header.u1.s1.TotalLength - sizeof(PORT_MESSAGE);
|
||||
|
||||
/* Fill out the CSR Header */
|
||||
ApiMessage->ApiNumber = ApiNumber;
|
||||
ApiMessage->CsrCaptureData = NULL;
|
||||
|
||||
DPRINT("API: %lx, u1.s1.DataLength: %x, u1.s1.TotalLength: %x\n",
|
||||
ApiNumber,
|
||||
ApiMessage->Header.u1.s1.DataLength,
|
||||
ApiMessage->Header.u1.s1.TotalLength);
|
||||
|
||||
/* Check if we are already inside a CSR Server */
|
||||
if (!InsideCsrProcess)
|
||||
{
|
||||
/* Check if we got a Capture Buffer */
|
||||
if (CaptureBuffer)
|
||||
{
|
||||
/*
|
||||
* We have to convert from our local (client) view
|
||||
* to the remote (server) view.
|
||||
*/
|
||||
ApiMessage->CsrCaptureData = (PCSR_CAPTURE_BUFFER)
|
||||
((ULONG_PTR)CaptureBuffer + CsrPortMemoryDelta);
|
||||
|
||||
/* Lock the buffer. */
|
||||
CaptureBuffer->BufferEnd = NULL;
|
||||
|
||||
/*
|
||||
* Each client pointer inside the CSR message is converted into
|
||||
* a server pointer, and each pointer to these message pointers
|
||||
* is converted into an offset.
|
||||
*/
|
||||
PointerCount = CaptureBuffer->PointerCount;
|
||||
OffsetPointer = CaptureBuffer->PointerOffsetsArray;
|
||||
while (PointerCount--)
|
||||
{
|
||||
if (*OffsetPointer != 0)
|
||||
{
|
||||
*(PULONG_PTR)*OffsetPointer += CsrPortMemoryDelta;
|
||||
*OffsetPointer -= (ULONG_PTR)ApiMessage;
|
||||
}
|
||||
++OffsetPointer;
|
||||
}
|
||||
}
|
||||
|
||||
/* Send the LPC Message */
|
||||
Status = NtRequestWaitReplyPort(CsrApiPort,
|
||||
&ApiMessage->Header,
|
||||
&ApiMessage->Header);
|
||||
|
||||
/* Check if we got a Capture Buffer */
|
||||
if (CaptureBuffer)
|
||||
{
|
||||
/*
|
||||
* We have to convert back from the remote (server) view
|
||||
* to our local (client) view.
|
||||
*/
|
||||
ApiMessage->CsrCaptureData = (PCSR_CAPTURE_BUFFER)
|
||||
((ULONG_PTR)ApiMessage->CsrCaptureData - CsrPortMemoryDelta);
|
||||
|
||||
/*
|
||||
* Convert back the offsets into pointers to CSR message
|
||||
* pointers, and convert back these message server pointers
|
||||
* into client pointers.
|
||||
*/
|
||||
PointerCount = CaptureBuffer->PointerCount;
|
||||
OffsetPointer = CaptureBuffer->PointerOffsetsArray;
|
||||
while (PointerCount--)
|
||||
{
|
||||
if (*OffsetPointer != 0)
|
||||
{
|
||||
*OffsetPointer += (ULONG_PTR)ApiMessage;
|
||||
*(PULONG_PTR)*OffsetPointer -= CsrPortMemoryDelta;
|
||||
}
|
||||
++OffsetPointer;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for success */
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
/* We failed. Overwrite the return value with the failure. */
|
||||
DPRINT1("LPC Failed: %lx\n", Status);
|
||||
ApiMessage->Status = Status;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This is a server-to-server call. Save our CID and do a direct call. */
|
||||
DPRINT1("Next gen server-to-server call\n");
|
||||
|
||||
/* We check this equality inside CsrValidateMessageBuffer */
|
||||
ApiMessage->Header.ClientId = NtCurrentTeb()->ClientId;
|
||||
|
||||
Status = CsrServerApiRoutine(&ApiMessage->Header,
|
||||
&ApiMessage->Header);
|
||||
|
||||
/* Check for success */
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
/* We failed. Overwrite the return value with the failure. */
|
||||
ApiMessage->Status = Status;
|
||||
}
|
||||
}
|
||||
|
||||
/* Return the CSR Result */
|
||||
DPRINT("Got back: 0x%lx\n", ApiMessage->Status);
|
||||
return ApiMessage->Status;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
HANDLE
|
||||
NTAPI
|
||||
CsrGetProcessId(VOID)
|
||||
{
|
||||
return CsrProcessId;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <wingdi.h>
|
||||
#include <wincon.h>
|
||||
#include <tchar.h>
|
||||
#include <shlobj.h>
|
||||
#include <dll/desk/deskcplx.h>
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <wingdi.h>
|
||||
#include <wincon.h>
|
||||
#include <tchar.h>
|
||||
#include <shlobj.h>
|
||||
#include <dll/desk/deskcplx.h>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winreg.h>
|
||||
#include <wincon.h>
|
||||
#include <shellapi.h>
|
||||
#include <shlobj.h>
|
||||
#include <tchar.h>
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
/* INCLUDES *****************************************************************/
|
||||
|
||||
#include <advapi32.h>
|
||||
#include <pseh/pseh2.h>
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(reg);
|
||||
|
||||
/* DEFINES ******************************************************************/
|
||||
@@ -4952,10 +4953,29 @@ RegSetValueExW(HKEY hKey,
|
||||
DWORD cbData)
|
||||
{
|
||||
UNICODE_STRING ValueName;
|
||||
PUNICODE_STRING pValueName;
|
||||
HANDLE KeyHandle;
|
||||
NTSTATUS Status;
|
||||
|
||||
if (is_string(dwType) && (cbData != 0))
|
||||
{
|
||||
PWSTR pwsData = (PWSTR)lpData;
|
||||
|
||||
_SEH2_TRY
|
||||
{
|
||||
if((pwsData[cbData / sizeof(WCHAR) - 1] != L'\0') &&
|
||||
(pwsData[cbData / sizeof(WCHAR)] == L'\0'))
|
||||
{
|
||||
/* Increment length if last character is not zero and next is zero */
|
||||
cbData += sizeof(WCHAR);
|
||||
}
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
_SEH2_YIELD(return ERROR_NOACCESS);
|
||||
}
|
||||
_SEH2_END;
|
||||
}
|
||||
|
||||
Status = MapDefaultKey(&KeyHandle,
|
||||
hKey);
|
||||
if (!NT_SUCCESS(Status))
|
||||
@@ -4964,22 +4984,9 @@ RegSetValueExW(HKEY hKey,
|
||||
}
|
||||
|
||||
RtlInitUnicodeString(&ValueName, lpValueName);
|
||||
pValueName = &ValueName;
|
||||
|
||||
if (is_string(dwType) && (cbData != 0))
|
||||
{
|
||||
PWSTR pwsData = (PWSTR)lpData;
|
||||
|
||||
if((pwsData[cbData / sizeof(WCHAR) - 1] != L'\0') &&
|
||||
(pwsData[cbData / sizeof(WCHAR)] == L'\0'))
|
||||
{
|
||||
/* Increment length if last character is not zero and next is zero */
|
||||
cbData += sizeof(WCHAR);
|
||||
}
|
||||
}
|
||||
|
||||
Status = NtSetValueKey(KeyHandle,
|
||||
pValueName,
|
||||
&ValueName,
|
||||
0,
|
||||
dwType,
|
||||
(PVOID)lpData,
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <winreg.h>
|
||||
#include <wingdi.h>
|
||||
#include <winnls.h>
|
||||
#include <wincon.h>
|
||||
#include <shellapi.h>
|
||||
#include <shlobj.h>
|
||||
#include <shlobj_undoc.h>
|
||||
|
||||
@@ -165,6 +165,7 @@ typedef struct {
|
||||
#include "wingdi.h"
|
||||
#include "winuser.h"
|
||||
#include "winnls.h"
|
||||
#include "wincon.h"
|
||||
#include "commctrl.h"
|
||||
#include "shlobj.h"
|
||||
#include "shellapi.h"
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
//#include "windef.h"
|
||||
//#include "winbase.h"
|
||||
//#include "winuser.h"
|
||||
#include "wincon.h"
|
||||
#include <shlobj.h>
|
||||
//#include "objbase.h"
|
||||
//#include "commdlg.h"
|
||||
|
||||
@@ -10,7 +10,6 @@ list(APPEND SOURCE
|
||||
asmname.c
|
||||
assembly.c
|
||||
fusion.c
|
||||
fusion_main.c
|
||||
version.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/fusion_stubs.c
|
||||
${CMAKE_CURRENT_BINARY_DIR}/fusion.def)
|
||||
@@ -18,7 +17,7 @@ list(APPEND SOURCE
|
||||
add_library(fusion SHARED ${SOURCE})
|
||||
set_module_type(fusion win32dll)
|
||||
target_link_libraries(fusion wine uuid)
|
||||
add_importlibs(fusion shlwapi advapi32 dbghelp user32 msvcrt kernel32 ntdll)
|
||||
add_importlibs(fusion advapi32 dbghelp shlwapi user32 msvcrt kernel32 ntdll)
|
||||
add_cd_file(TARGET fusion DESTINATION reactos/Microsoft.NET/Framework/v1.0.3705 FOR all)
|
||||
add_cd_file(TARGET fusion DESTINATION reactos/Microsoft.NET/Framework/v1.1.4322 FOR all)
|
||||
add_cd_file(TARGET fusion DESTINATION reactos/Microsoft.NET/Framework/v2.0.50727 FOR all)
|
||||
|
||||
+119
-33
@@ -98,32 +98,48 @@ static BOOL create_full_path(LPCWSTR path)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static BOOL get_assembly_directory(LPWSTR dir, DWORD size, BYTE architecture)
|
||||
static BOOL get_assembly_directory(LPWSTR dir, DWORD size, const char *version, PEKIND architecture)
|
||||
{
|
||||
static const WCHAR dotnet[] = {'\\','M','i','c','r','o','s','o','f','t','.','N','E','T','\\',0};
|
||||
static const WCHAR gac[] = {'\\','a','s','s','e','m','b','l','y','\\','G','A','C',0};
|
||||
|
||||
static const WCHAR msil[] = {'_','M','S','I','L',0};
|
||||
static const WCHAR x86[] = {'_','3','2',0};
|
||||
static const WCHAR amd64[] = {'_','6','4',0};
|
||||
DWORD len = GetWindowsDirectoryW(dir, size);
|
||||
|
||||
GetWindowsDirectoryW(dir, size);
|
||||
strcatW(dir, gac);
|
||||
|
||||
if (!strcmp(version, "v4.0.30319"))
|
||||
{
|
||||
strcpyW(dir + len, dotnet);
|
||||
len += sizeof(dotnet)/sizeof(WCHAR) -1;
|
||||
strcpyW(dir + len, gac + 1);
|
||||
len += sizeof(gac)/sizeof(WCHAR) - 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpyW(dir + len, gac);
|
||||
len += sizeof(gac)/sizeof(WCHAR) - 1;
|
||||
}
|
||||
switch (architecture)
|
||||
{
|
||||
case peNone:
|
||||
break;
|
||||
|
||||
case peMSIL:
|
||||
strcatW(dir, msil);
|
||||
strcpyW(dir + len, msil);
|
||||
break;
|
||||
|
||||
case peI386:
|
||||
strcatW(dir, x86);
|
||||
strcpyW(dir + len, x86);
|
||||
break;
|
||||
|
||||
case peAMD64:
|
||||
strcatW(dir, amd64);
|
||||
strcpyW(dir + len, amd64);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
WARN("unhandled architecture %u\n", architecture);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -153,7 +169,7 @@ static HRESULT WINAPI IAssemblyCacheImpl_QueryInterface(IAssemblyCache *iface,
|
||||
if (IsEqualIID(riid, &IID_IUnknown) ||
|
||||
IsEqualIID(riid, &IID_IAssemblyCache))
|
||||
{
|
||||
IUnknown_AddRef(iface);
|
||||
IAssemblyCache_AddRef(iface);
|
||||
*ppobj = This;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -312,11 +328,16 @@ static HRESULT WINAPI IAssemblyCacheImpl_QueryAssemblyInfo(IAssemblyCache *iface
|
||||
if (FAILED(hr))
|
||||
goto done;
|
||||
|
||||
hr = IAssemblyEnum_GetNextAssembly(asmenum, NULL, &next, 0);
|
||||
if (hr == S_FALSE)
|
||||
for (;;)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
|
||||
goto done;
|
||||
hr = IAssemblyEnum_GetNextAssembly(asmenum, NULL, &next, 0);
|
||||
if (hr != S_OK)
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
|
||||
goto done;
|
||||
}
|
||||
hr = IAssemblyName_IsEqual(asmname, next, ASM_CMPF_IL_ALL);
|
||||
if (hr == S_OK) break;
|
||||
}
|
||||
|
||||
if (!pAsmInfo)
|
||||
@@ -353,24 +374,51 @@ static HRESULT WINAPI IAssemblyCacheImpl_CreateAssemblyScavenger(IAssemblyCache
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT copy_file( const WCHAR *src_dir, DWORD src_len, const WCHAR *dst_dir, DWORD dst_len,
|
||||
const WCHAR *filename )
|
||||
{
|
||||
WCHAR *src_file, *dst_file;
|
||||
DWORD len = strlenW( filename );
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
if (!(src_file = HeapAlloc( GetProcessHeap(), 0, (src_len + len + 1) * sizeof(WCHAR) )))
|
||||
return E_OUTOFMEMORY;
|
||||
memcpy( src_file, src_dir, src_len * sizeof(WCHAR) );
|
||||
strcpyW( src_file + src_len, filename );
|
||||
|
||||
if (!(dst_file = HeapAlloc( GetProcessHeap(), 0, (dst_len + len + 1) * sizeof(WCHAR) )))
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, src_file );
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
memcpy( dst_file, dst_dir, dst_len * sizeof(WCHAR) );
|
||||
strcpyW( dst_file + dst_len, filename );
|
||||
|
||||
if (!CopyFileW( src_file, dst_file, FALSE )) hr = HRESULT_FROM_WIN32( GetLastError() );
|
||||
HeapFree( GetProcessHeap(), 0, src_file );
|
||||
HeapFree( GetProcessHeap(), 0, dst_file );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IAssemblyCacheImpl_InstallAssembly(IAssemblyCache *iface,
|
||||
DWORD dwFlags,
|
||||
LPCWSTR pszManifestFilePath,
|
||||
LPCFUSION_INSTALL_REFERENCE pRefData)
|
||||
{
|
||||
static const WCHAR format[] = {'%','s','\\','%','s','\\','%','s','_','_','%','s','\\',0};
|
||||
static const WCHAR format[] =
|
||||
{'%','s','\\','%','s','\\','%','s','_','_','%','s','\\',0};
|
||||
static const WCHAR format_v40[] =
|
||||
{'%','s','\\','%','s','\\','v','4','.','0','_','%','s','_','_','%','s','\\',0};
|
||||
static const WCHAR ext_exe[] = {'.','e','x','e',0};
|
||||
static const WCHAR ext_dll[] = {'.','d','l','l',0};
|
||||
IAssemblyCacheImpl *cache = impl_from_IAssemblyCache(iface);
|
||||
ASSEMBLY *assembly;
|
||||
LPWSTR filename;
|
||||
LPWSTR name = NULL;
|
||||
LPWSTR token = NULL;
|
||||
LPWSTR version = NULL;
|
||||
LPWSTR asmpath = NULL;
|
||||
WCHAR path[MAX_PATH];
|
||||
WCHAR asmdir[MAX_PATH];
|
||||
LPWSTR ext;
|
||||
const WCHAR *extension, *filename, *src_dir;
|
||||
WCHAR *name = NULL, *token = NULL, *version = NULL, *asmpath = NULL;
|
||||
WCHAR asmdir[MAX_PATH], *p, **external_files = NULL, *dst_dir = NULL;
|
||||
PEKIND architecture;
|
||||
char *clr_version;
|
||||
DWORD i, count = 0, src_len, dst_len = sizeof(format_v40)/sizeof(format_v40[0]);
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("(%p, %d, %s, %p)\n", iface, dwFlags,
|
||||
@@ -379,10 +427,10 @@ static HRESULT WINAPI IAssemblyCacheImpl_InstallAssembly(IAssemblyCache *iface,
|
||||
if (!pszManifestFilePath || !*pszManifestFilePath)
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (!(ext = strrchrW(pszManifestFilePath, '.')))
|
||||
if (!(extension = strrchrW(pszManifestFilePath, '.')))
|
||||
return HRESULT_FROM_WIN32(ERROR_INVALID_NAME);
|
||||
|
||||
if (lstrcmpiW(ext, ext_exe) && lstrcmpiW(ext, ext_dll))
|
||||
if (lstrcmpiW(extension, ext_exe) && lstrcmpiW(extension, ext_dll))
|
||||
return HRESULT_FROM_WIN32(ERROR_INVALID_NAME);
|
||||
|
||||
if (GetFileAttributesW(pszManifestFilePath) == INVALID_FILE_ATTRIBUTES)
|
||||
@@ -407,29 +455,67 @@ static HRESULT WINAPI IAssemblyCacheImpl_InstallAssembly(IAssemblyCache *iface,
|
||||
if (FAILED(hr))
|
||||
goto done;
|
||||
|
||||
hr = assembly_get_runtime_version(assembly, &clr_version);
|
||||
if (FAILED(hr))
|
||||
goto done;
|
||||
|
||||
hr = assembly_get_external_files(assembly, &external_files, &count);
|
||||
if (FAILED(hr))
|
||||
goto done;
|
||||
|
||||
cache_lock( cache );
|
||||
|
||||
get_assembly_directory(asmdir, MAX_PATH, assembly_get_architecture(assembly));
|
||||
architecture = assembly_get_architecture(assembly);
|
||||
get_assembly_directory(asmdir, MAX_PATH, clr_version, architecture);
|
||||
|
||||
sprintfW(path, format, asmdir, name, version, token);
|
||||
dst_len += strlenW(asmdir) + strlenW(name) + strlenW(version) + strlenW(token);
|
||||
if (!(dst_dir = HeapAlloc(GetProcessHeap(), 0, dst_len * sizeof(WCHAR))))
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
if (!strcmp(clr_version, "v4.0.30319"))
|
||||
dst_len = sprintfW(dst_dir, format_v40, asmdir, name, version, token);
|
||||
else
|
||||
dst_len = sprintfW(dst_dir, format, asmdir, name, version, token);
|
||||
|
||||
create_full_path(path);
|
||||
create_full_path(dst_dir);
|
||||
|
||||
hr = assembly_get_path(assembly, &asmpath);
|
||||
if (FAILED(hr))
|
||||
goto done;
|
||||
|
||||
filename = PathFindFileNameW(asmpath);
|
||||
if ((p = strrchrW(asmpath, '\\')))
|
||||
{
|
||||
filename = p + 1;
|
||||
src_dir = asmpath;
|
||||
src_len = filename - asmpath;
|
||||
}
|
||||
else
|
||||
{
|
||||
filename = asmpath;
|
||||
src_dir = NULL;
|
||||
src_len = 0;
|
||||
}
|
||||
hr = copy_file(src_dir, src_len, dst_dir, dst_len, filename);
|
||||
if (FAILED(hr))
|
||||
goto done;
|
||||
|
||||
strcatW(path, filename);
|
||||
if (!CopyFileW(asmpath, path, FALSE))
|
||||
hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
hr = copy_file(src_dir, src_len, dst_dir, dst_len, external_files[i]);
|
||||
if (FAILED(hr))
|
||||
break;
|
||||
}
|
||||
|
||||
done:
|
||||
HeapFree(GetProcessHeap(), 0, name);
|
||||
HeapFree(GetProcessHeap(), 0, token);
|
||||
HeapFree(GetProcessHeap(), 0, version);
|
||||
HeapFree(GetProcessHeap(), 0, asmpath);
|
||||
HeapFree(GetProcessHeap(), 0, dst_dir);
|
||||
for (i = 0; i < count; i++) HeapFree(GetProcessHeap(), 0, external_files[i]);
|
||||
HeapFree(GetProcessHeap(), 0, external_files);
|
||||
assembly_release(assembly);
|
||||
cache_unlock( cache );
|
||||
return hr;
|
||||
@@ -501,7 +587,7 @@ static HRESULT WINAPI IAssemblyCacheItemImpl_QueryInterface(IAssemblyCacheItem *
|
||||
if (IsEqualIID(riid, &IID_IUnknown) ||
|
||||
IsEqualIID(riid, &IID_IAssemblyCacheItem))
|
||||
{
|
||||
IUnknown_AddRef(iface);
|
||||
IAssemblyCacheItem_AddRef(iface);
|
||||
*ppobj = This;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
+91
-46
@@ -25,6 +25,8 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
#define NONAMELESSUNION
|
||||
#define NONAMELESSSTRUCT
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
@@ -73,7 +75,7 @@ static HRESULT WINAPI IAssemblyEnumImpl_QueryInterface(IAssemblyEnum *iface,
|
||||
if (IsEqualIID(riid, &IID_IUnknown) ||
|
||||
IsEqualIID(riid, &IID_IAssemblyEnum))
|
||||
{
|
||||
IUnknown_AddRef(iface);
|
||||
IAssemblyEnum_AddRef(iface);
|
||||
*ppobj = This;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -168,23 +170,32 @@ static const IAssemblyEnumVtbl AssemblyEnumVtbl = {
|
||||
IAssemblyEnumImpl_Clone
|
||||
};
|
||||
|
||||
static void parse_name(IAssemblyName *name, int depth, LPWSTR path, LPWSTR buf)
|
||||
static void build_file_mask(IAssemblyName *name, int depth, const WCHAR *path,
|
||||
const WCHAR *prefix, WCHAR *buf)
|
||||
{
|
||||
WCHAR disp[MAX_PATH];
|
||||
static const WCHAR star[] = {'*',0};
|
||||
static const WCHAR ss_fmt[] = {'%','s','\\','%','s',0};
|
||||
static const WCHAR sss_fmt[] = {'%','s','\\','%','s','_','_','%','s',0};
|
||||
static const WCHAR ssss_fmt[] = {'%','s','\\','%','s','%','s','_','_','%','s',0};
|
||||
static const WCHAR ver_fmt[] = {'%','u','.','%','u','.','%','u','.','%','u',0};
|
||||
static const WCHAR star_fmt[] = {'%','s','\\','*',0};
|
||||
static const WCHAR star_prefix_fmt[] = {'%','s','\\','%','s','*',0};
|
||||
WCHAR disp[MAX_PATH], version[24]; /* strlen("65535") * 4 + 3 + 1 */
|
||||
LPCWSTR verptr, pubkeyptr;
|
||||
HRESULT hr;
|
||||
DWORD size, major_size, minor_size, build_size, revision_size;
|
||||
WORD major, minor, build, revision;
|
||||
|
||||
static const WCHAR star[] = {'*',0};
|
||||
static const WCHAR ss_fmt[] = {'%','s','\\','%','s',0};
|
||||
static const WCHAR verpubkey[] = {'%','s','\\','%','s','_','_','%','s',0};
|
||||
static const WCHAR ver_fmt[] = {'%','u','.','%','u','.','%','u','.','%','u',0};
|
||||
|
||||
WCHAR version[24]; /* strlen("65535") * 4 + 3 + 1 */
|
||||
WCHAR token_str[TOKEN_LENGTH + 1];
|
||||
BYTE token[BYTES_PER_TOKEN];
|
||||
|
||||
if (!name)
|
||||
{
|
||||
if (prefix && depth == 1)
|
||||
sprintfW(buf, star_prefix_fmt, path, prefix);
|
||||
else
|
||||
sprintfW(buf, star_fmt, path);
|
||||
return;
|
||||
}
|
||||
if (depth == 0)
|
||||
{
|
||||
size = MAX_PATH;
|
||||
@@ -226,7 +237,10 @@ static void parse_name(IAssemblyName *name, int depth, LPWSTR path, LPWSTR buf)
|
||||
pubkeyptr = token_str;
|
||||
}
|
||||
|
||||
sprintfW(buf, verpubkey, path, verptr, pubkeyptr);
|
||||
if (prefix)
|
||||
sprintfW(buf, ssss_fmt, path, prefix, verptr, pubkeyptr);
|
||||
else
|
||||
sprintfW(buf, sss_fmt, path, verptr, pubkeyptr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,34 +305,24 @@ static void insert_assembly(struct list *assemblies, ASMNAME *to_insert)
|
||||
}
|
||||
|
||||
static HRESULT enum_gac_assemblies(struct list *assemblies, IAssemblyName *name,
|
||||
int depth, LPWSTR path)
|
||||
int depth, const WCHAR *prefix, LPWSTR path)
|
||||
{
|
||||
WIN32_FIND_DATAW ffd;
|
||||
WCHAR buf[MAX_PATH];
|
||||
WCHAR disp[MAX_PATH];
|
||||
WCHAR asmpath[MAX_PATH];
|
||||
ASMNAME *asmname;
|
||||
HANDLE hfind;
|
||||
LPWSTR ptr;
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
static WCHAR parent[MAX_PATH];
|
||||
|
||||
static const WCHAR dot[] = {'.',0};
|
||||
static const WCHAR dotdot[] = {'.','.',0};
|
||||
static const WCHAR search_fmt[] = {'%','s','\\','*',0};
|
||||
static const WCHAR dblunder[] = {'_','_',0};
|
||||
static const WCHAR path_fmt[] = {'%','s','\\','%','s','\\','%','s','.','d','l','l',0};
|
||||
static const WCHAR fmt[] = {'%','s',',',' ','V','e','r','s','i','o','n','=','%','s',',',' ',
|
||||
static const WCHAR name_fmt[] = {'%','s',',',' ','V','e','r','s','i','o','n','=','%','s',',',' ',
|
||||
'C','u','l','t','u','r','e','=','n','e','u','t','r','a','l',',',' ',
|
||||
'P','u','b','l','i','c','K','e','y','T','o','k','e','n','=','%','s',0};
|
||||
static const WCHAR ss_fmt[] = {'%','s','\\','%','s',0};
|
||||
WIN32_FIND_DATAW ffd;
|
||||
WCHAR buf[MAX_PATH], disp[MAX_PATH], asmpath[MAX_PATH], *ptr;
|
||||
static WCHAR parent[MAX_PATH];
|
||||
ASMNAME *asmname;
|
||||
HANDLE hfind;
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
if (name)
|
||||
parse_name(name, depth, path, buf);
|
||||
else
|
||||
sprintfW(buf, search_fmt, path);
|
||||
|
||||
build_file_mask(name, depth, path, prefix, buf);
|
||||
hfind = FindFirstFileW(buf, &ffd);
|
||||
if (hfind == INVALID_HANDLE_VALUE)
|
||||
return S_OK;
|
||||
@@ -339,13 +343,21 @@ static HRESULT enum_gac_assemblies(struct list *assemblies, IAssemblyName *name,
|
||||
}
|
||||
else if (depth == 1)
|
||||
{
|
||||
sprintfW(asmpath, path_fmt, path, ffd.cFileName, parent);
|
||||
const WCHAR *token, *version = ffd.cFileName;
|
||||
|
||||
sprintfW(asmpath, path_fmt, path, ffd.cFileName, parent);
|
||||
ptr = strstrW(ffd.cFileName, dblunder);
|
||||
*ptr = '\0';
|
||||
ptr += 2;
|
||||
token = ptr + 2;
|
||||
|
||||
sprintfW(disp, fmt, parent, ffd.cFileName, ptr);
|
||||
if (prefix)
|
||||
{
|
||||
unsigned int prefix_len = strlenW(prefix);
|
||||
if (strlenW(ffd.cFileName) >= prefix_len &&
|
||||
!memicmpW(ffd.cFileName, prefix, prefix_len))
|
||||
version += prefix_len;
|
||||
}
|
||||
sprintfW(disp, name_fmt, parent, version, token);
|
||||
|
||||
asmname = HeapAlloc(GetProcessHeap(), 0, sizeof(ASMNAME));
|
||||
if (!asmname)
|
||||
@@ -375,7 +387,7 @@ static HRESULT enum_gac_assemblies(struct list *assemblies, IAssemblyName *name,
|
||||
}
|
||||
|
||||
sprintfW(buf, ss_fmt, path, ffd.cFileName);
|
||||
hr = enum_gac_assemblies(assemblies, name, depth + 1, buf);
|
||||
hr = enum_gac_assemblies(assemblies, name, depth + 1, prefix, buf);
|
||||
if (FAILED(hr))
|
||||
break;
|
||||
} while (FindNextFileW(hfind, &ffd) != 0);
|
||||
@@ -386,32 +398,65 @@ static HRESULT enum_gac_assemblies(struct list *assemblies, IAssemblyName *name,
|
||||
|
||||
static HRESULT enumerate_gac(IAssemblyEnumImpl *asmenum, IAssemblyName *pName)
|
||||
{
|
||||
WCHAR path[MAX_PATH];
|
||||
WCHAR buf[MAX_PATH];
|
||||
static const WCHAR gac[] = {'\\','G','A','C',0};
|
||||
static const WCHAR gac_32[] = {'\\','G','A','C','_','3','2',0};
|
||||
static const WCHAR gac_64[] = {'\\','G','A','C','_','6','4',0};
|
||||
static const WCHAR gac_msil[] = {'\\','G','A','C','_','M','S','I','L',0};
|
||||
static const WCHAR v40[] = {'v','4','.','0','_',0};
|
||||
WCHAR path[MAX_PATH], buf[MAX_PATH];
|
||||
SYSTEM_INFO info;
|
||||
HRESULT hr;
|
||||
DWORD size;
|
||||
|
||||
static WCHAR under32[] = {'_','3','2',0};
|
||||
static WCHAR msil[] = {'_','M','S','I','L',0};
|
||||
size = MAX_PATH;
|
||||
hr = GetCachePath(ASM_CACHE_ROOT_EX, buf, &size);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
strcpyW(path, buf);
|
||||
GetNativeSystemInfo(&info);
|
||||
if (info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
|
||||
{
|
||||
strcpyW(path + size - 1, gac_64);
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, v40, path);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
}
|
||||
strcpyW(path + size - 1, gac_32);
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, v40, path);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
strcpyW(path + size - 1, gac_msil);
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, v40, path);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
size = MAX_PATH;
|
||||
hr = GetCachePath(ASM_CACHE_GAC, buf, &size);
|
||||
hr = GetCachePath(ASM_CACHE_ROOT, buf, &size);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
lstrcpyW(path, buf);
|
||||
lstrcatW(path, under32);
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, path);
|
||||
strcpyW(path, buf);
|
||||
if (info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
|
||||
{
|
||||
strcpyW(path + size - 1, gac_64);
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, NULL, path);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
}
|
||||
strcpyW(path + size - 1, gac_32);
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, NULL, path);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
lstrcpyW(path, buf);
|
||||
lstrcatW(path, msil);
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, path);
|
||||
strcpyW(path + size - 1, gac_msil);
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, NULL, path);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, buf);
|
||||
strcpyW(path + size - 1, gac);
|
||||
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, NULL, path);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
|
||||
+77
-20
@@ -88,7 +88,7 @@ static HRESULT WINAPI IAssemblyNameImpl_QueryInterface(IAssemblyName *iface,
|
||||
if (IsEqualIID(riid, &IID_IUnknown) ||
|
||||
IsEqualIID(riid, &IID_IAssemblyName))
|
||||
{
|
||||
IUnknown_AddRef(iface);
|
||||
IAssemblyName_AddRef(iface);
|
||||
*ppobj = This;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -265,7 +265,7 @@ static HRESULT WINAPI IAssemblyNameImpl_GetDisplayName(IAssemblyName *iface,
|
||||
{
|
||||
static const WCHAR spec[] = {'%','d',0};
|
||||
static const WCHAR period[] = {'.',0};
|
||||
int i;
|
||||
DWORD i;
|
||||
|
||||
wsprintfW(verstr, spec, name->version[0]);
|
||||
|
||||
@@ -411,10 +411,37 @@ static HRESULT WINAPI IAssemblyNameImpl_GetVersion(IAssemblyName *iface,
|
||||
|
||||
static HRESULT WINAPI IAssemblyNameImpl_IsEqual(IAssemblyName *iface,
|
||||
IAssemblyName *pName,
|
||||
DWORD dwCmpFlags)
|
||||
DWORD flags)
|
||||
{
|
||||
FIXME("(%p, %p, %d) stub!\n", iface, pName, dwCmpFlags);
|
||||
return E_NOTIMPL;
|
||||
IAssemblyNameImpl *name1 = impl_from_IAssemblyName(iface);
|
||||
IAssemblyNameImpl *name2 = impl_from_IAssemblyName(pName);
|
||||
|
||||
TRACE("(%p, %p, 0x%08x)\n", iface, pName, flags);
|
||||
|
||||
if (!pName) return S_FALSE;
|
||||
if (flags & ~ASM_CMPF_IL_ALL) FIXME("unsupported flags\n");
|
||||
|
||||
if ((flags & ASM_CMPF_NAME) && strcmpW(name1->name, name2->name)) return S_FALSE;
|
||||
if (name1->versize && name2->versize)
|
||||
{
|
||||
if ((flags & ASM_CMPF_MAJOR_VERSION) &&
|
||||
name1->version[0] != name2->version[0]) return S_FALSE;
|
||||
if ((flags & ASM_CMPF_MINOR_VERSION) &&
|
||||
name1->version[1] != name2->version[1]) return S_FALSE;
|
||||
if ((flags & ASM_CMPF_BUILD_NUMBER) &&
|
||||
name1->version[2] != name2->version[2]) return S_FALSE;
|
||||
if ((flags & ASM_CMPF_REVISION_NUMBER) &&
|
||||
name1->version[3] != name2->version[3]) return S_FALSE;
|
||||
}
|
||||
if ((flags & ASM_CMPF_PUBLIC_KEY_TOKEN) &&
|
||||
name1->haspubkey && name2->haspubkey &&
|
||||
memcmp(name1->pubkey, name2->pubkey, sizeof(name1->pubkey))) return S_FALSE;
|
||||
|
||||
if ((flags & ASM_CMPF_CULTURE) &&
|
||||
name1->culture && name2->culture &&
|
||||
strcmpW(name1->culture, name2->culture)) return S_FALSE;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IAssemblyNameImpl_Clone(IAssemblyName *iface,
|
||||
@@ -538,6 +565,10 @@ static HRESULT parse_pubkey(IAssemblyNameImpl *name, LPCWSTR pubkey)
|
||||
{
|
||||
int i;
|
||||
BYTE val;
|
||||
static const WCHAR nullstr[] = {'n','u','l','l',0};
|
||||
|
||||
if(lstrcmpiW(pubkey, nullstr) == 0)
|
||||
return FUSION_E_PRIVATE_ASM_DISALLOWED;
|
||||
|
||||
if (lstrlenW(pubkey) < CHARS_PER_PUBKEY)
|
||||
return FUSION_E_INVALID_NAME;
|
||||
@@ -557,10 +588,32 @@ static HRESULT parse_pubkey(IAssemblyNameImpl *name, LPCWSTR pubkey)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static WCHAR *parse_value( const WCHAR *str, unsigned int len )
|
||||
{
|
||||
WCHAR *ret;
|
||||
const WCHAR *p = str;
|
||||
BOOL quoted = FALSE;
|
||||
unsigned int i = 0;
|
||||
|
||||
if (!(ret = HeapAlloc( GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR) ))) return NULL;
|
||||
if (*p == '\"')
|
||||
{
|
||||
quoted = TRUE;
|
||||
p++;
|
||||
}
|
||||
while (*p && *p != '\"') ret[i++] = *p++;
|
||||
if ((quoted && *p != '\"') || (!quoted && *p == '\"'))
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, ret );
|
||||
return NULL;
|
||||
}
|
||||
ret[i] = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR szAssemblyName)
|
||||
{
|
||||
LPWSTR str, save;
|
||||
LPWSTR ptr, ptr2;
|
||||
LPWSTR str, save, ptr, ptr2, value;
|
||||
HRESULT hr = S_OK;
|
||||
BOOL done = FALSE;
|
||||
|
||||
@@ -599,7 +652,7 @@ static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR szAssemblyNam
|
||||
if (!ptr)
|
||||
goto done;
|
||||
|
||||
str = ptr + 2;
|
||||
str = ptr + 1;
|
||||
while (!done)
|
||||
{
|
||||
ptr = strchrW(str, '=');
|
||||
@@ -616,7 +669,7 @@ static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR szAssemblyNam
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!(ptr2 = strstrW(ptr, separator)))
|
||||
if (!(ptr2 = strchrW(ptr, ',')))
|
||||
{
|
||||
if (!(ptr2 = strchrW(ptr, '\0')))
|
||||
{
|
||||
@@ -628,21 +681,25 @@ static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR szAssemblyNam
|
||||
}
|
||||
|
||||
*ptr2 = '\0';
|
||||
|
||||
if (!(value = parse_value( ptr, ptr2 - ptr )))
|
||||
{
|
||||
hr = FUSION_E_INVALID_NAME;
|
||||
goto done;
|
||||
}
|
||||
while (*str == ' ') str++;
|
||||
|
||||
if (!lstrcmpW(str, version))
|
||||
hr = parse_version(name, ptr);
|
||||
else if (!lstrcmpW(str, culture))
|
||||
hr = parse_culture(name, ptr);
|
||||
else if (!lstrcmpW(str, pubkey))
|
||||
hr = parse_pubkey(name, ptr);
|
||||
else if (!lstrcmpW(str, procarch))
|
||||
if (!lstrcmpiW(str, version))
|
||||
hr = parse_version( name, value );
|
||||
else if (!lstrcmpiW(str, culture))
|
||||
hr = parse_culture( name, value );
|
||||
else if (!lstrcmpiW(str, pubkey))
|
||||
hr = parse_pubkey( name, value );
|
||||
else if (!lstrcmpiW(str, procarch))
|
||||
{
|
||||
name->procarch = strdupW(ptr);
|
||||
if (!name->procarch)
|
||||
hr = E_OUTOFMEMORY;
|
||||
name->procarch = value;
|
||||
value = NULL;
|
||||
}
|
||||
HeapFree( GetProcessHeap(), 0, value );
|
||||
|
||||
if (FAILED(hr))
|
||||
goto done;
|
||||
|
||||
+82
-43
@@ -486,8 +486,9 @@ static inline ULONG get_table_size(const ASSEMBLY *assembly, DWORD index)
|
||||
|
||||
static HRESULT parse_clr_tables(ASSEMBLY *assembly, ULONG offset)
|
||||
{
|
||||
DWORD i, previ, offidx;
|
||||
DWORD i, count;
|
||||
ULONG currofs;
|
||||
ULONGLONG mask;
|
||||
|
||||
currofs = offset;
|
||||
assembly->tableshdr = assembly_data_offset(assembly, currofs);
|
||||
@@ -506,44 +507,22 @@ static HRESULT parse_clr_tables(ASSEMBLY *assembly, ULONG offset)
|
||||
if (!assembly->numrows)
|
||||
return E_FAIL;
|
||||
|
||||
assembly->numtables = 0;
|
||||
for (i = 0; i < MAX_CLR_TABLES; i++)
|
||||
{
|
||||
if ((i < 32 && (assembly->tableshdr->MaskValid.u.LowPart >> i) & 1) ||
|
||||
(i >= 32 && (assembly->tableshdr->MaskValid.u.HighPart >> i) & 1))
|
||||
{
|
||||
assembly->numtables++;
|
||||
}
|
||||
}
|
||||
|
||||
currofs += assembly->numtables * sizeof(DWORD);
|
||||
memset(assembly->tables, -1, MAX_CLR_TABLES * sizeof(CLRTABLE));
|
||||
|
||||
if (assembly->tableshdr->MaskValid.u.LowPart & 1)
|
||||
assembly->tables[0].offset = currofs;
|
||||
|
||||
offidx = 0;
|
||||
for (i = 0; i < MAX_CLR_TABLES; i++)
|
||||
for (i = count = 0, mask = 1; i < MAX_CLR_TABLES; i++, mask <<= 1)
|
||||
{
|
||||
if ((i < 32 && (assembly->tableshdr->MaskValid.u.LowPart >> i) & 1) ||
|
||||
(i >= 32 && (assembly->tableshdr->MaskValid.u.HighPart >> i) & 1))
|
||||
{
|
||||
assembly->tables[i].rows = assembly->numrows[offidx];
|
||||
offidx++;
|
||||
}
|
||||
if (assembly->tableshdr->MaskValid.QuadPart & mask)
|
||||
assembly->tables[i].rows = assembly->numrows[count++];
|
||||
}
|
||||
assembly->numtables = count;
|
||||
currofs += assembly->numtables * sizeof(DWORD);
|
||||
|
||||
previ = 0;
|
||||
offidx = 1;
|
||||
for (i = 1; i < MAX_CLR_TABLES; i++)
|
||||
for (i = 0, mask = 1; i < MAX_CLR_TABLES; i++, mask <<= 1)
|
||||
{
|
||||
if ((i < 32 && (assembly->tableshdr->MaskValid.u.LowPart >> i) & 1) ||
|
||||
(i >= 32 && (assembly->tableshdr->MaskValid.u.HighPart >> i) & 1))
|
||||
if (assembly->tableshdr->MaskValid.QuadPart & mask)
|
||||
{
|
||||
currofs += get_table_size(assembly, previ) * assembly->numrows[offidx - 1];
|
||||
assembly->tables[i].offset = currofs;
|
||||
offidx++;
|
||||
previ = i;
|
||||
currofs += get_table_size(assembly, i) * assembly->tables[i].rows;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -571,7 +550,7 @@ static HRESULT parse_metadata_header(ASSEMBLY *assembly, DWORD *hdrsz)
|
||||
size = FIELD_OFFSET(METADATAHDR, Version);
|
||||
memcpy(assembly->metadatahdr, metadatahdr, size);
|
||||
|
||||
/* we don't care about the version string */
|
||||
assembly->metadatahdr->Version = (LPSTR)&metadatahdr->Version;
|
||||
|
||||
ofs = FIELD_OFFSET(METADATAHDR, Flags);
|
||||
ptr += FIELD_OFFSET(METADATAHDR, Version) + metadatahdr->VersionLength + 1;
|
||||
@@ -765,9 +744,9 @@ HRESULT assembly_get_name(ASSEMBLY *assembly, LPWSTR *name)
|
||||
|
||||
ptr += FIELD_OFFSET(ASSEMBLYTABLE, PublicKey) + assembly->blobsz;
|
||||
if (assembly->stringsz == sizeof(DWORD))
|
||||
stridx = *((DWORD *)ptr);
|
||||
stridx = *(DWORD *)ptr;
|
||||
else
|
||||
stridx = *((WORD *)ptr);
|
||||
stridx = *(WORD *)ptr;
|
||||
|
||||
*name = assembly_dup_str(assembly, stridx);
|
||||
if (!*name)
|
||||
@@ -815,10 +794,10 @@ HRESULT assembly_get_version(ASSEMBLY *assembly, LPWSTR *version)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
BYTE assembly_get_architecture(ASSEMBLY *assembly)
|
||||
PEKIND assembly_get_architecture(ASSEMBLY *assembly)
|
||||
{
|
||||
if ((assembly->corhdr->MajorRuntimeVersion == 2) && (assembly->corhdr->MinorRuntimeVersion == 0))
|
||||
return 0; /* .NET 1.x assembly */
|
||||
return peNone; /* .NET 1.x assembly */
|
||||
|
||||
if (assembly->nthdr->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
|
||||
return peAMD64; /* AMD64/IA64 assembly */
|
||||
@@ -829,23 +808,22 @@ BYTE assembly_get_architecture(ASSEMBLY *assembly)
|
||||
return peI386; /* x86 assembly */
|
||||
}
|
||||
|
||||
static BYTE *assembly_get_blob(ASSEMBLY *assembly, WORD index, ULONG *size)
|
||||
static BYTE *assembly_get_blob(ASSEMBLY *assembly, DWORD index, ULONG *size)
|
||||
{
|
||||
return GetData(&assembly->blobs[index], size);
|
||||
}
|
||||
|
||||
HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token)
|
||||
{
|
||||
ASSEMBLYTABLE *asmtbl;
|
||||
ULONG i, size;
|
||||
LONG offset;
|
||||
BYTE *hashdata;
|
||||
BYTE *hashdata, *pubkey, *ptr;
|
||||
HCRYPTPROV crypt;
|
||||
HCRYPTHASH hash;
|
||||
BYTE *pubkey;
|
||||
BYTE tokbytes[BYTES_PER_TOKEN];
|
||||
HRESULT hr = E_FAIL;
|
||||
LPWSTR tok;
|
||||
DWORD idx;
|
||||
|
||||
*token = NULL;
|
||||
|
||||
@@ -853,11 +831,17 @@ HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token)
|
||||
if (offset == -1)
|
||||
return E_FAIL;
|
||||
|
||||
asmtbl = assembly_data_offset(assembly, offset);
|
||||
if (!asmtbl)
|
||||
ptr = assembly_data_offset(assembly, offset);
|
||||
if (!ptr)
|
||||
return E_FAIL;
|
||||
|
||||
pubkey = assembly_get_blob(assembly, asmtbl->PublicKey, &size);
|
||||
ptr += FIELD_OFFSET(ASSEMBLYTABLE, PublicKey);
|
||||
if (assembly->blobsz == sizeof(DWORD))
|
||||
idx = *(DWORD *)ptr;
|
||||
else
|
||||
idx = *(WORD *)ptr;
|
||||
|
||||
pubkey = assembly_get_blob(assembly, idx, &size);
|
||||
|
||||
if (!CryptAcquireContextA(&crypt, NULL, NULL, PROV_RSA_FULL,
|
||||
CRYPT_VERIFYCONTEXT))
|
||||
@@ -905,3 +889,58 @@ done:
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT assembly_get_runtime_version(ASSEMBLY *assembly, LPSTR *version)
|
||||
{
|
||||
*version = assembly->metadatahdr->Version;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT assembly_get_external_files(ASSEMBLY *assembly, LPWSTR **files, DWORD *count)
|
||||
{
|
||||
LONG offset;
|
||||
INT i, num_rows;
|
||||
WCHAR **ret;
|
||||
BYTE *ptr;
|
||||
DWORD idx;
|
||||
|
||||
*count = 0;
|
||||
|
||||
offset = assembly->tables[TableFromToken(mdtFile)].offset;
|
||||
if (offset == -1)
|
||||
return S_OK;
|
||||
|
||||
ptr = assembly_data_offset(assembly, offset);
|
||||
if (!ptr)
|
||||
return S_OK;
|
||||
|
||||
num_rows = assembly->tables[TableFromToken(mdtFile)].rows;
|
||||
if (num_rows <= 0)
|
||||
return S_OK;
|
||||
|
||||
ret = HeapAlloc(GetProcessHeap(), 0, num_rows * sizeof(WCHAR *));
|
||||
if (!ret)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
for (i = 0; i < num_rows; i++)
|
||||
{
|
||||
ptr += sizeof(DWORD); /* skip Flags field */
|
||||
if (assembly->stringsz == sizeof(DWORD))
|
||||
idx = *(DWORD *)ptr;
|
||||
else
|
||||
idx = *(WORD *)ptr;
|
||||
|
||||
ret[i] = assembly_dup_str(assembly, idx);
|
||||
if (!ret[i])
|
||||
{
|
||||
for (; i >= 0; i--) HeapFree(GetProcessHeap(), 0, ret[i]);
|
||||
HeapFree(GetProcessHeap(), 0, ret);
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
ptr += assembly->stringsz; /* skip Name field */
|
||||
ptr += assembly->blobsz; /* skip Hash field */
|
||||
}
|
||||
*count = num_rows;
|
||||
*files = ret;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
+38
-29
@@ -36,6 +36,16 @@
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(fusion);
|
||||
|
||||
|
||||
/******************************************************************
|
||||
* InitializeFusion (FUSION.@)
|
||||
*/
|
||||
HRESULT WINAPI InitializeFusion(void)
|
||||
{
|
||||
FIXME("\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
/******************************************************************
|
||||
* ClearDownloadCache (FUSION.@)
|
||||
*/
|
||||
@@ -80,9 +90,9 @@ static HRESULT get_corversion(LPWSTR version, DWORD size)
|
||||
|
||||
pGetCORVersion = (void *)GetProcAddress(hmscoree, "GetCORVersion");
|
||||
if (!pGetCORVersion)
|
||||
return E_FAIL;
|
||||
|
||||
hr = pGetCORVersion(version, size, &len);
|
||||
hr = E_FAIL;
|
||||
else
|
||||
hr = pGetCORVersion(version, size, &len);
|
||||
|
||||
FreeLibrary(hmscoree);
|
||||
return hr;
|
||||
@@ -94,32 +104,26 @@ static HRESULT get_corversion(LPWSTR version, DWORD size)
|
||||
HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath,
|
||||
PDWORD pcchPath)
|
||||
{
|
||||
WCHAR path[MAX_PATH];
|
||||
WCHAR windir[MAX_PATH];
|
||||
WCHAR version[MAX_PATH];
|
||||
DWORD len;
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
static const WCHAR backslash[] = {'\\',0};
|
||||
static const WCHAR assembly[] = {'a','s','s','e','m','b','l','y',0};
|
||||
static const WCHAR gac[] = {'G','A','C',0};
|
||||
static const WCHAR nativeimg[] = {
|
||||
'N','a','t','i','v','e','I','m','a','g','e','s','_',0};
|
||||
static const WCHAR assembly[] = {'\\','a','s','s','e','m','b','l','y',0};
|
||||
static const WCHAR gac[] = {'\\','G','A','C',0};
|
||||
static const WCHAR nativeimg[] = {'N','a','t','i','v','e','I','m','a','g','e','s','_',0};
|
||||
static const WCHAR dotnet[] = {'\\','M','i','c','r','o','s','o','f','t','.','N','E','T',0};
|
||||
#ifdef _WIN64
|
||||
static const WCHAR zapfmt[] = {'%','s','\\','%','s','\\','%','s','%','s','_','6','4',0};
|
||||
#else
|
||||
static const WCHAR zapfmt[] = {'%','s','\\','%','s','\\','%','s','%','s','_','3','2',0};
|
||||
#endif
|
||||
WCHAR path[MAX_PATH], windir[MAX_PATH], version[MAX_PATH];
|
||||
DWORD len;
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
TRACE("(%08x, %p, %p)\n", dwCacheFlags, pwzCachePath, pcchPath);
|
||||
|
||||
if (!pcchPath)
|
||||
return E_INVALIDARG;
|
||||
|
||||
GetWindowsDirectoryW(windir, MAX_PATH);
|
||||
lstrcpyW(path, windir);
|
||||
lstrcatW(path, backslash);
|
||||
lstrcatW(path, assembly);
|
||||
len = GetWindowsDirectoryW(windir, MAX_PATH);
|
||||
strcpyW(path, windir);
|
||||
|
||||
switch (dwCacheFlags)
|
||||
{
|
||||
@@ -129,37 +133,42 @@ HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath,
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
sprintfW(path, zapfmt, windir, assembly, nativeimg, version);
|
||||
len = sprintfW(path, zapfmt, windir, assembly + 1, nativeimg, version);
|
||||
break;
|
||||
}
|
||||
|
||||
case ASM_CACHE_GAC:
|
||||
{
|
||||
lstrcatW(path, backslash);
|
||||
lstrcatW(path, gac);
|
||||
strcpyW(path + len, assembly);
|
||||
len += sizeof(assembly)/sizeof(WCHAR) - 1;
|
||||
strcpyW(path + len, gac);
|
||||
len += sizeof(gac)/sizeof(WCHAR) - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
case ASM_CACHE_DOWNLOAD:
|
||||
{
|
||||
FIXME("Download cache not implemented\n");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
case ASM_CACHE_ROOT:
|
||||
break; /* already set */
|
||||
|
||||
strcpyW(path + len, assembly);
|
||||
len += sizeof(assembly)/sizeof(WCHAR) - 1;
|
||||
break;
|
||||
case ASM_CACHE_ROOT_EX:
|
||||
strcpyW(path + len, dotnet);
|
||||
len += sizeof(dotnet)/sizeof(WCHAR) - 1;
|
||||
strcpyW(path + len, assembly);
|
||||
len += sizeof(assembly)/sizeof(WCHAR) - 1;
|
||||
break;
|
||||
default:
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
len = lstrlenW(path) + 1;
|
||||
len++;
|
||||
if (*pcchPath <= len || !pwzCachePath)
|
||||
hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
|
||||
else if (pwzCachePath)
|
||||
lstrcpyW(pwzCachePath, path);
|
||||
strcpyW(pwzCachePath, path);
|
||||
|
||||
*pcchPath = len;
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
@ stdcall CreateInstallReferenceEnum(ptr ptr long ptr)
|
||||
@ stdcall GetCachePath(long wstr ptr)
|
||||
@ stub GetHistoryFileDirectory
|
||||
@ stub InitializeFusion
|
||||
@ stdcall InitializeFusion()
|
||||
@ stub InstallCustomAssembly
|
||||
@ stub InstallCustomModule
|
||||
@ stub LookupHistoryAssembly
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* fusion main
|
||||
*
|
||||
* Copyright 2008 James Hawkins
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <wine/debug.h>
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(fusion);
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||
{
|
||||
TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
|
||||
|
||||
switch (fdwReason)
|
||||
{
|
||||
case DLL_WINE_PREATTACH:
|
||||
return FALSE; /* prefer native version */
|
||||
case DLL_PROCESS_ATTACH:
|
||||
DisableThreadLibraryCalls(hinstDLL);
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -433,8 +433,10 @@ HRESULT assembly_release(ASSEMBLY *assembly) DECLSPEC_HIDDEN;
|
||||
HRESULT assembly_get_name(ASSEMBLY *assembly, LPWSTR *name) DECLSPEC_HIDDEN;
|
||||
HRESULT assembly_get_path(const ASSEMBLY *assembly, LPWSTR *path) DECLSPEC_HIDDEN;
|
||||
HRESULT assembly_get_version(ASSEMBLY *assembly, LPWSTR *version) DECLSPEC_HIDDEN;
|
||||
BYTE assembly_get_architecture(ASSEMBLY *assembly) DECLSPEC_HIDDEN;
|
||||
PEKIND assembly_get_architecture(ASSEMBLY *assembly) DECLSPEC_HIDDEN;
|
||||
HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token) DECLSPEC_HIDDEN;
|
||||
HRESULT assembly_get_runtime_version(ASSEMBLY *assembly, LPSTR *version) DECLSPEC_HIDDEN;
|
||||
HRESULT assembly_get_external_files(ASSEMBLY *assembly, LPWSTR **files, DWORD *count) DECLSPEC_HIDDEN;
|
||||
|
||||
extern HRESULT IAssemblyName_SetPath(IAssemblyName *iface, LPCWSTR path) DECLSPEC_HIDDEN;
|
||||
extern HRESULT IAssemblyName_GetPath(IAssemblyName *iface, LPWSTR buf, ULONG *len) DECLSPEC_HIDDEN;
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <winbase.h>
|
||||
#include <wingdi.h>
|
||||
//#include "winuser.h"
|
||||
#include <wincon.h>
|
||||
|
||||
//#include "ole2.h"
|
||||
//#include "olectl.h"
|
||||
|
||||
@@ -64,7 +64,7 @@ STRINGTABLE
|
||||
IDS_TB_FORWARD "Forward"
|
||||
IDS_TB_STOP "Stop"
|
||||
IDS_TB_REFRESH "Refresh"
|
||||
IDS_TB_HOME "#msgctxt#home page#Home"
|
||||
IDS_TB_HOME "Home"
|
||||
IDS_TB_PRINT "Print..."
|
||||
}
|
||||
|
||||
|
||||
@@ -291,7 +291,7 @@ SetInformationJobObject(IN HANDLE hJob,
|
||||
if (LocalInfo.BasicLimitInformation.LimitFlags &
|
||||
JOB_OBJECT_LIMIT_WORKINGSET)
|
||||
{
|
||||
Status = RtlAcquirePrivilege(&Privilege, TRUE, FALSE, &State);
|
||||
Status = RtlAcquirePrivilege(&Privilege, 1, 0, &State);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -379,7 +379,6 @@ SetLocalTime(IN CONST SYSTEMTIME *lpSystemTime)
|
||||
NewSystemTime.QuadPart += TimeZoneBias.QuadPart;
|
||||
|
||||
Status = RtlAcquirePrivilege(&Privilege, 1, 0, &State);
|
||||
Status = STATUS_SUCCESS;
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
Status = NtSetSystemTime(&NewSystemTime, NULL);
|
||||
@@ -423,7 +422,6 @@ SetSystemTime(IN CONST SYSTEMTIME *lpSystemTime)
|
||||
}
|
||||
|
||||
Status = RtlAcquirePrivilege(&Privilege, 1, 0, &State);
|
||||
Status = STATUS_SUCCESS;
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
Status = NtSetSystemTime(&NewSystemTime, NULL);
|
||||
|
||||
@@ -627,7 +627,7 @@ BasepIsRealtimeAllowed(IN BOOLEAN Keep)
|
||||
PVOID State;
|
||||
NTSTATUS Status;
|
||||
|
||||
Status = RtlAcquirePrivilege(&Privilege, TRUE, FALSE, &State);
|
||||
Status = RtlAcquirePrivilege(&Privilege, 1, 0, &State);
|
||||
if (!NT_SUCCESS(Status)) return NULL;
|
||||
|
||||
if (Keep)
|
||||
|
||||
+169
-12
@@ -18,6 +18,17 @@ typedef enum _LSA_TOKEN_INFORMATION_TYPE
|
||||
LsaTokenInformationV1
|
||||
} LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE;
|
||||
|
||||
typedef struct _LSA_TOKEN_INFORMATION_V1
|
||||
{
|
||||
LARGE_INTEGER ExpirationTime;
|
||||
TOKEN_USER User;
|
||||
PTOKEN_GROUPS Groups;
|
||||
TOKEN_PRIMARY_GROUP PrimaryGroup;
|
||||
PTOKEN_PRIVILEGES Privileges;
|
||||
TOKEN_OWNER Owner;
|
||||
TOKEN_DEFAULT_DACL DefaultDacl;
|
||||
} LSA_TOKEN_INFORMATION_V1, *PLSA_TOKEN_INFORMATION_V1;
|
||||
|
||||
typedef PVOID PLSA_CLIENT_REQUEST;
|
||||
|
||||
typedef PVOID (NTAPI *PLSA_ALLOCATE_LSA_HEAP)(ULONG);
|
||||
@@ -283,6 +294,26 @@ LsapGetAuthenticationPackage(IN ULONG PackageId)
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
LsapCreateLogonSession(IN PLUID LogonId)
|
||||
{
|
||||
TRACE("()\n");
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
LsapDeleteLogonSession(IN PLUID LogonId)
|
||||
{
|
||||
TRACE("()\n");
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
PVOID
|
||||
NTAPI
|
||||
@@ -404,8 +435,8 @@ LsapInitAuthPackages(VOID)
|
||||
PackageId = 0;
|
||||
|
||||
/* Initialize the dispatch table */
|
||||
DispatchTable.CreateLogonSession = NULL;
|
||||
DispatchTable.DeleteLogonSession = NULL;
|
||||
DispatchTable.CreateLogonSession = &LsapCreateLogonSession;
|
||||
DispatchTable.DeleteLogonSession = &LsapDeleteLogonSession;
|
||||
DispatchTable.AddCredential = NULL;
|
||||
DispatchTable.GetCredentials = NULL;
|
||||
DispatchTable.DeleteCredential = NULL;
|
||||
@@ -531,16 +562,19 @@ LsapLogonUser(PLSA_API_MSG RequestMsg,
|
||||
PLSAP_LOGON_CONTEXT LogonContext)
|
||||
{
|
||||
PAUTH_PACKAGE Package;
|
||||
ULONG PackageId;
|
||||
NTSTATUS Status;
|
||||
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
SECURITY_QUALITY_OF_SERVICE Qos;
|
||||
LSA_TOKEN_INFORMATION_TYPE TokenInformationType;
|
||||
PVOID TokenInformation = NULL;
|
||||
PLSA_TOKEN_INFORMATION_V1 TokenInfo1 = NULL;
|
||||
PUNICODE_STRING AccountName = NULL;
|
||||
PUNICODE_STRING AuthenticatingAuthority = NULL;
|
||||
PUNICODE_STRING MachineName = NULL;
|
||||
|
||||
PVOID LocalAuthInfo = NULL;
|
||||
HANDLE TokenHandle = NULL;
|
||||
ULONG i;
|
||||
ULONG PackageId;
|
||||
NTSTATUS Status;
|
||||
|
||||
TRACE("(%p %p)\n", RequestMsg, LogonContext);
|
||||
|
||||
@@ -556,7 +590,7 @@ LsapLogonUser(PLSA_API_MSG RequestMsg,
|
||||
|
||||
if (RequestMsg->LogonUser.Request.AuthenticationInformationLength > 0)
|
||||
{
|
||||
/* Allocat the local authentication info buffer */
|
||||
/* Allocate the local authentication info buffer */
|
||||
LocalAuthInfo = RtlAllocateHeap(RtlGetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
RequestMsg->LogonUser.Request.AuthenticationInformationLength);
|
||||
@@ -633,28 +667,151 @@ LsapLogonUser(PLSA_API_MSG RequestMsg,
|
||||
&AuthenticatingAuthority);
|
||||
}
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
TRACE("LsaApLogonUser/Ex/2 failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (TokenInformationType == LsaTokenInformationV1)
|
||||
{
|
||||
TokenInfo1 = (PLSA_TOKEN_INFORMATION_V1)TokenInformation;
|
||||
|
||||
Qos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE);
|
||||
Qos.ImpersonationLevel = SecurityImpersonation;
|
||||
Qos.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING;
|
||||
Qos.EffectiveOnly = FALSE;
|
||||
|
||||
ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
|
||||
ObjectAttributes.RootDirectory = NULL;
|
||||
ObjectAttributes.ObjectName = NULL;
|
||||
ObjectAttributes.Attributes = 0;
|
||||
ObjectAttributes.SecurityDescriptor = NULL;
|
||||
ObjectAttributes.SecurityQualityOfService = &Qos;
|
||||
|
||||
/* Create the logon token */
|
||||
Status = NtCreateToken(&TokenHandle,
|
||||
TOKEN_ALL_ACCESS,
|
||||
&ObjectAttributes,
|
||||
TokenPrimary,
|
||||
&RequestMsg->LogonUser.Reply.LogonId,
|
||||
&TokenInfo1->ExpirationTime,
|
||||
&TokenInfo1->User,
|
||||
TokenInfo1->Groups,
|
||||
TokenInfo1->Privileges,
|
||||
&TokenInfo1->Owner,
|
||||
&TokenInfo1->PrimaryGroup,
|
||||
&TokenInfo1->DefaultDacl,
|
||||
&RequestMsg->LogonUser.Request.SourceContext);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
TRACE("NtCreateToken failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("TokenInformationType %d is not supported!\n", TokenInformationType);
|
||||
Status = STATUS_NOT_IMPLEMENTED;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Duplicate the token handle into the client process */
|
||||
Status = NtDuplicateObject(NtCurrentProcess(),
|
||||
TokenHandle,
|
||||
LogonContext->ClientProcessHandle,
|
||||
&RequestMsg->LogonUser.Reply.Token,
|
||||
0,
|
||||
0,
|
||||
DUPLICATE_SAME_ACCESS | DUPLICATE_SAME_ATTRIBUTES | DUPLICATE_CLOSE_SOURCE);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
TRACE("NtDuplicateObject failed (Status 0x%08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
TokenHandle = NULL;
|
||||
|
||||
done:
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
if (TokenHandle != NULL)
|
||||
NtClose(TokenHandle);
|
||||
}
|
||||
|
||||
/* Free the local authentication info buffer */
|
||||
if (LocalAuthInfo != NULL)
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, LocalAuthInfo);
|
||||
|
||||
/* Free the token information */
|
||||
if (TokenInformation != NULL)
|
||||
{
|
||||
if (TokenInformationType == LsaTokenInformationV1)
|
||||
{
|
||||
TokenInfo1 = (PLSA_TOKEN_INFORMATION_V1)TokenInformation;
|
||||
|
||||
if (TokenInfo1 != NULL)
|
||||
{
|
||||
if (TokenInfo1->User.User.Sid != NULL)
|
||||
LsapFreeHeap(TokenInfo1->User.User.Sid);
|
||||
|
||||
if (TokenInfo1->Groups != NULL)
|
||||
{
|
||||
for (i = 0; i < TokenInfo1->Groups->GroupCount; i++)
|
||||
{
|
||||
if (TokenInfo1->Groups->Groups[i].Sid != NULL)
|
||||
LsapFreeHeap(TokenInfo1->Groups->Groups[i].Sid);
|
||||
}
|
||||
|
||||
LsapFreeHeap(TokenInfo1->Groups);
|
||||
}
|
||||
|
||||
if (TokenInfo1->PrimaryGroup.PrimaryGroup != NULL)
|
||||
LsapFreeHeap(TokenInfo1->PrimaryGroup.PrimaryGroup);
|
||||
|
||||
if (TokenInfo1->Privileges != NULL)
|
||||
LsapFreeHeap(TokenInfo1->Privileges);
|
||||
|
||||
if (TokenInfo1->Owner.Owner != NULL)
|
||||
LsapFreeHeap(TokenInfo1->Owner.Owner);
|
||||
|
||||
if (TokenInfo1->DefaultDacl.DefaultDacl != NULL)
|
||||
LsapFreeHeap(TokenInfo1->DefaultDacl.DefaultDacl);
|
||||
|
||||
LsapFreeHeap(TokenInfo1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("TokenInformationType %d is not supported!\n", TokenInformationType);
|
||||
}
|
||||
}
|
||||
|
||||
if (AuthenticatingAuthority != NULL)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/* Free the account name */
|
||||
if (AccountName != NULL)
|
||||
{
|
||||
if (AccountName->Buffer != NULL)
|
||||
LsapFreeHeap(AccountName->Buffer);
|
||||
|
||||
LsapFreeHeap(AccountName);
|
||||
}
|
||||
|
||||
/* Free the authentication authority */
|
||||
if (AuthenticatingAuthority != NULL)
|
||||
{
|
||||
if (AuthenticatingAuthority != NULL)
|
||||
LsapFreeHeap(AuthenticatingAuthority->Buffer);
|
||||
|
||||
LsapFreeHeap(AuthenticatingAuthority);
|
||||
}
|
||||
|
||||
/* Free the machine name */
|
||||
if (MachineName != NULL)
|
||||
{
|
||||
if (MachineName->Buffer != NULL)
|
||||
LsapFreeHeap(MachineName->Buffer);
|
||||
|
||||
LsapFreeHeap(MachineName);
|
||||
}
|
||||
|
||||
return Status;
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <ndk/psfuncs.h>
|
||||
#include <ndk/rtlfuncs.h>
|
||||
#include <ndk/setypes.h>
|
||||
#include <ndk/sefuncs.h>
|
||||
#include <ndk/umfuncs.h>
|
||||
|
||||
#include <ntsam.h>
|
||||
|
||||
+367
-367
@@ -11,222 +11,222 @@ WINE_DEFAULT_DEBUG_CHANNEL(msgina);
|
||||
|
||||
typedef struct _DISPLAYSTATUSMSG
|
||||
{
|
||||
PGINA_CONTEXT Context;
|
||||
HDESK hDesktop;
|
||||
DWORD dwOptions;
|
||||
PWSTR pTitle;
|
||||
PWSTR pMessage;
|
||||
HANDLE StartupEvent;
|
||||
PGINA_CONTEXT Context;
|
||||
HDESK hDesktop;
|
||||
DWORD dwOptions;
|
||||
PWSTR pTitle;
|
||||
PWSTR pMessage;
|
||||
HANDLE StartupEvent;
|
||||
} DISPLAYSTATUSMSG, *PDISPLAYSTATUSMSG;
|
||||
|
||||
static BOOL
|
||||
GUIInitialize(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
TRACE("GUIInitialize(%p)\n", pgContext);
|
||||
return TRUE;
|
||||
TRACE("GUIInitialize(%p)\n", pgContext);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
StatusMessageWindowProc(
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(wParam);
|
||||
UNREFERENCED_PARAMETER(wParam);
|
||||
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
PDISPLAYSTATUSMSG msg = (PDISPLAYSTATUSMSG)lParam;
|
||||
if (!msg)
|
||||
return FALSE;
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
PDISPLAYSTATUSMSG msg = (PDISPLAYSTATUSMSG)lParam;
|
||||
if (!msg)
|
||||
return FALSE;
|
||||
|
||||
msg->Context->hStatusWindow = hwndDlg;
|
||||
msg->Context->hStatusWindow = hwndDlg;
|
||||
|
||||
if (msg->pTitle)
|
||||
SetWindowTextW(hwndDlg, msg->pTitle);
|
||||
SetDlgItemTextW(hwndDlg, IDC_STATUSLABEL, msg->pMessage);
|
||||
SetEvent(msg->StartupEvent);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
if (msg->pTitle)
|
||||
SetWindowTextW(hwndDlg, msg->pTitle);
|
||||
SetDlgItemTextW(hwndDlg, IDC_STATUSLABEL, msg->pMessage);
|
||||
SetEvent(msg->StartupEvent);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static DWORD WINAPI
|
||||
StartupWindowThread(LPVOID lpParam)
|
||||
{
|
||||
HDESK hDesk;
|
||||
PDISPLAYSTATUSMSG msg = (PDISPLAYSTATUSMSG)lpParam;
|
||||
HDESK hDesk;
|
||||
PDISPLAYSTATUSMSG msg = (PDISPLAYSTATUSMSG)lpParam;
|
||||
|
||||
/* When SetThreadDesktop is called the system closes the desktop handle when needed
|
||||
so we have to create a new handle because this handle may still be in use by winlogon */
|
||||
if (!DuplicateHandle ( GetCurrentProcess(),
|
||||
msg->hDesktop,
|
||||
GetCurrentProcess(),
|
||||
(HANDLE*)&hDesk,
|
||||
0,
|
||||
FALSE,
|
||||
DUPLICATE_SAME_ACCESS))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, lpParam);
|
||||
return FALSE;
|
||||
}
|
||||
/* When SetThreadDesktop is called the system closes the desktop handle when needed
|
||||
so we have to create a new handle because this handle may still be in use by winlogon */
|
||||
if (!DuplicateHandle ( GetCurrentProcess(),
|
||||
msg->hDesktop,
|
||||
GetCurrentProcess(),
|
||||
(HANDLE*)&hDesk,
|
||||
0,
|
||||
FALSE,
|
||||
DUPLICATE_SAME_ACCESS))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, lpParam);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if(!SetThreadDesktop(hDesk))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, lpParam);
|
||||
return FALSE;
|
||||
}
|
||||
if(!SetThreadDesktop(hDesk))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, lpParam);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DialogBoxParam(
|
||||
hDllInstance,
|
||||
MAKEINTRESOURCE(IDD_STATUSWINDOW_DLG),
|
||||
GetDesktopWindow(),
|
||||
StatusMessageWindowProc,
|
||||
(LPARAM)lpParam);
|
||||
DialogBoxParam(
|
||||
hDllInstance,
|
||||
MAKEINTRESOURCE(IDD_STATUSWINDOW_DLG),
|
||||
GetDesktopWindow(),
|
||||
StatusMessageWindowProc,
|
||||
(LPARAM)lpParam);
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, lpParam);
|
||||
return TRUE;
|
||||
HeapFree(GetProcessHeap(), 0, lpParam);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL
|
||||
GUIDisplayStatusMessage(
|
||||
IN PGINA_CONTEXT pgContext,
|
||||
IN HDESK hDesktop,
|
||||
IN DWORD dwOptions,
|
||||
IN PWSTR pTitle,
|
||||
IN PWSTR pMessage)
|
||||
IN PGINA_CONTEXT pgContext,
|
||||
IN HDESK hDesktop,
|
||||
IN DWORD dwOptions,
|
||||
IN PWSTR pTitle,
|
||||
IN PWSTR pMessage)
|
||||
{
|
||||
PDISPLAYSTATUSMSG msg;
|
||||
HANDLE Thread;
|
||||
DWORD ThreadId;
|
||||
PDISPLAYSTATUSMSG msg;
|
||||
HANDLE Thread;
|
||||
DWORD ThreadId;
|
||||
|
||||
TRACE("GUIDisplayStatusMessage(%ws)\n", pMessage);
|
||||
TRACE("GUIDisplayStatusMessage(%ws)\n", pMessage);
|
||||
|
||||
if (!pgContext->hStatusWindow)
|
||||
{
|
||||
msg = (PDISPLAYSTATUSMSG)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DISPLAYSTATUSMSG));
|
||||
if(!msg)
|
||||
return FALSE;
|
||||
if (!pgContext->hStatusWindow)
|
||||
{
|
||||
msg = (PDISPLAYSTATUSMSG)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DISPLAYSTATUSMSG));
|
||||
if(!msg)
|
||||
return FALSE;
|
||||
|
||||
msg->Context = pgContext;
|
||||
msg->dwOptions = dwOptions;
|
||||
msg->pTitle = pTitle;
|
||||
msg->pMessage = pMessage;
|
||||
msg->hDesktop = hDesktop;
|
||||
msg->Context = pgContext;
|
||||
msg->dwOptions = dwOptions;
|
||||
msg->pTitle = pTitle;
|
||||
msg->pMessage = pMessage;
|
||||
msg->hDesktop = hDesktop;
|
||||
|
||||
msg->StartupEvent = CreateEventW(
|
||||
NULL,
|
||||
TRUE,
|
||||
FALSE,
|
||||
NULL);
|
||||
msg->StartupEvent = CreateEventW(
|
||||
NULL,
|
||||
TRUE,
|
||||
FALSE,
|
||||
NULL);
|
||||
|
||||
if (!msg->StartupEvent)
|
||||
return FALSE;
|
||||
if (!msg->StartupEvent)
|
||||
return FALSE;
|
||||
|
||||
Thread = CreateThread(
|
||||
NULL,
|
||||
0,
|
||||
StartupWindowThread,
|
||||
(PVOID)msg,
|
||||
0,
|
||||
&ThreadId);
|
||||
if (Thread)
|
||||
{
|
||||
CloseHandle(Thread);
|
||||
WaitForSingleObject(msg->StartupEvent, INFINITE);
|
||||
CloseHandle(msg->StartupEvent);
|
||||
return TRUE;
|
||||
}
|
||||
Thread = CreateThread(
|
||||
NULL,
|
||||
0,
|
||||
StartupWindowThread,
|
||||
(PVOID)msg,
|
||||
0,
|
||||
&ThreadId);
|
||||
if (Thread)
|
||||
{
|
||||
CloseHandle(Thread);
|
||||
WaitForSingleObject(msg->StartupEvent, INFINITE);
|
||||
CloseHandle(msg->StartupEvent);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (pTitle)
|
||||
SetWindowTextW(pgContext->hStatusWindow, pTitle);
|
||||
if (pTitle)
|
||||
SetWindowTextW(pgContext->hStatusWindow, pTitle);
|
||||
|
||||
SetDlgItemTextW(pgContext->hStatusWindow, IDC_STATUSLABEL, pMessage);
|
||||
SetDlgItemTextW(pgContext->hStatusWindow, IDC_STATUSLABEL, pMessage);
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL
|
||||
GUIRemoveStatusMessage(
|
||||
IN PGINA_CONTEXT pgContext)
|
||||
IN PGINA_CONTEXT pgContext)
|
||||
{
|
||||
if (pgContext->hStatusWindow)
|
||||
{
|
||||
EndDialog(pgContext->hStatusWindow, 0);
|
||||
pgContext->hStatusWindow = NULL;
|
||||
}
|
||||
if (pgContext->hStatusWindow)
|
||||
{
|
||||
EndDialog(pgContext->hStatusWindow, 0);
|
||||
pgContext->hStatusWindow = NULL;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
EmptyWindowProc(
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(hwndDlg);
|
||||
UNREFERENCED_PARAMETER(uMsg);
|
||||
UNREFERENCED_PARAMETER(wParam);
|
||||
UNREFERENCED_PARAMETER(lParam);
|
||||
UNREFERENCED_PARAMETER(hwndDlg);
|
||||
UNREFERENCED_PARAMETER(uMsg);
|
||||
UNREFERENCED_PARAMETER(wParam);
|
||||
UNREFERENCED_PARAMETER(lParam);
|
||||
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static VOID
|
||||
GUIDisplaySASNotice(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
INT result;
|
||||
INT result;
|
||||
|
||||
TRACE("GUIDisplaySASNotice()\n");
|
||||
TRACE("GUIDisplaySASNotice()\n");
|
||||
|
||||
/* Display the notice window */
|
||||
result = DialogBoxParam(
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCE(IDD_NOTICE_DLG),
|
||||
GetDesktopWindow(),
|
||||
EmptyWindowProc,
|
||||
(LPARAM)NULL);
|
||||
if (result == -1)
|
||||
{
|
||||
/* Failed to display the window. Do as if the user
|
||||
* already has pressed CTRL+ALT+DELETE */
|
||||
pgContext->pWlxFuncs->WlxSasNotify(pgContext->hWlx, WLX_SAS_TYPE_CTRL_ALT_DEL);
|
||||
}
|
||||
/* Display the notice window */
|
||||
result = DialogBoxParam(
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCE(IDD_NOTICE_DLG),
|
||||
GetDesktopWindow(),
|
||||
EmptyWindowProc,
|
||||
(LPARAM)NULL);
|
||||
if (result == -1)
|
||||
{
|
||||
/* Failed to display the window. Do as if the user
|
||||
* already has pressed CTRL+ALT+DELETE */
|
||||
pgContext->pWlxFuncs->WlxSasNotify(pgContext->hWlx, WLX_SAS_TYPE_CTRL_ALT_DEL);
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the text contained in a textbox. Allocates memory in pText
|
||||
* to contain the text. Returns TRUE in case of success */
|
||||
static BOOL
|
||||
GetTextboxText(
|
||||
IN HWND hwndDlg,
|
||||
IN INT TextboxId,
|
||||
OUT LPWSTR *pText)
|
||||
IN HWND hwndDlg,
|
||||
IN INT TextboxId,
|
||||
OUT LPWSTR *pText)
|
||||
{
|
||||
LPWSTR Text;
|
||||
int Count;
|
||||
LPWSTR Text;
|
||||
int Count;
|
||||
|
||||
Count = GetWindowTextLength(GetDlgItem(hwndDlg, TextboxId));
|
||||
Text = HeapAlloc(GetProcessHeap(), 0, (Count + 1) * sizeof(WCHAR));
|
||||
if (!Text)
|
||||
return FALSE;
|
||||
if (Count != GetWindowTextW(GetDlgItem(hwndDlg, TextboxId), Text, Count + 1))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, Text);
|
||||
return FALSE;
|
||||
}
|
||||
*pText = Text;
|
||||
return TRUE;
|
||||
Count = GetWindowTextLength(GetDlgItem(hwndDlg, TextboxId));
|
||||
Text = HeapAlloc(GetProcessHeap(), 0, (Count + 1) * sizeof(WCHAR));
|
||||
if (!Text)
|
||||
return FALSE;
|
||||
if (Count != GetWindowTextW(GetDlgItem(hwndDlg, TextboxId), Text, Count + 1))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, Text);
|
||||
return FALSE;
|
||||
}
|
||||
*pText = Text;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static VOID
|
||||
@@ -260,209 +260,209 @@ OnInitSecurityDlg(HWND hwnd,
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
LoggedOnWindowProc(
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
OnInitSecurityDlg(hwndDlg, (PGINA_CONTEXT)lParam);
|
||||
SetFocus(GetDlgItem(hwndDlg, IDNO));
|
||||
return TRUE;
|
||||
}
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
OnInitSecurityDlg(hwndDlg, (PGINA_CONTEXT)lParam);
|
||||
SetFocus(GetDlgItem(hwndDlg, IDNO));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDC_LOCK:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOCK_WKSTA);
|
||||
return TRUE;
|
||||
case IDC_LOGOFF:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOGOFF);
|
||||
return TRUE;
|
||||
case IDC_SHUTDOWN:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
|
||||
return TRUE;
|
||||
case IDC_TASKMGR:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_TASKLIST);
|
||||
return TRUE;
|
||||
case IDCANCEL:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_CLOSE:
|
||||
{
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDC_LOCK:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOCK_WKSTA);
|
||||
return TRUE;
|
||||
case IDC_LOGOFF:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOGOFF);
|
||||
return TRUE;
|
||||
case IDC_SHUTDOWN:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
|
||||
return TRUE;
|
||||
case IDC_TASKMGR:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_TASKLIST);
|
||||
return TRUE;
|
||||
case IDCANCEL:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_CLOSE:
|
||||
{
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static INT
|
||||
GUILoggedOnSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext,
|
||||
IN DWORD dwSasType)
|
||||
IN OUT PGINA_CONTEXT pgContext,
|
||||
IN DWORD dwSasType)
|
||||
{
|
||||
INT result;
|
||||
INT result;
|
||||
|
||||
TRACE("GUILoggedOnSAS()\n");
|
||||
TRACE("GUILoggedOnSAS()\n");
|
||||
|
||||
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
||||
{
|
||||
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT ; the dialog will
|
||||
* close itself thanks to the use of WlxDialogBoxParam */
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
||||
{
|
||||
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT ; the dialog will
|
||||
* close itself thanks to the use of WlxDialogBoxParam */
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
result = pgContext->pWlxFuncs->WlxSwitchDesktopToWinlogon(
|
||||
pgContext->hWlx);
|
||||
result = pgContext->pWlxFuncs->WlxSwitchDesktopToWinlogon(
|
||||
pgContext->hWlx);
|
||||
|
||||
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||
pgContext->hWlx,
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCEW(IDD_LOGGEDON_DLG),
|
||||
GetDesktopWindow(),
|
||||
LoggedOnWindowProc,
|
||||
(LPARAM)pgContext);
|
||||
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||
pgContext->hWlx,
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCEW(IDD_LOGGEDON_DLG),
|
||||
GetDesktopWindow(),
|
||||
LoggedOnWindowProc,
|
||||
(LPARAM)pgContext);
|
||||
|
||||
if (result < WLX_SAS_ACTION_LOGON ||
|
||||
result > WLX_SAS_ACTION_SWITCH_CONSOLE)
|
||||
{
|
||||
result = WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
if (result < WLX_SAS_ACTION_LOGON ||
|
||||
result > WLX_SAS_ACTION_SWITCH_CONSOLE)
|
||||
{
|
||||
result = WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
if (result == WLX_SAS_ACTION_NONE)
|
||||
{
|
||||
result = pgContext->pWlxFuncs->WlxSwitchDesktopToUser(
|
||||
pgContext->hWlx);
|
||||
}
|
||||
if (result == WLX_SAS_ACTION_NONE)
|
||||
{
|
||||
result = pgContext->pWlxFuncs->WlxSwitchDesktopToUser(
|
||||
pgContext->hWlx);
|
||||
}
|
||||
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
LoggedOutWindowProc(
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
{
|
||||
PGINA_CONTEXT pgContext;
|
||||
PGINA_CONTEXT pgContext;
|
||||
|
||||
pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
|
||||
pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
|
||||
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
/* FIXME: take care of DontDisplayLastUserName, NoDomainUI, ShutdownWithoutLogon */
|
||||
pgContext = (PGINA_CONTEXT)lParam;
|
||||
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
|
||||
SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
/* FIXME: take care of DontDisplayLastUserName, NoDomainUI, ShutdownWithoutLogon */
|
||||
pgContext = (PGINA_CONTEXT)lParam;
|
||||
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
|
||||
SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
|
||||
|
||||
pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
||||
return TRUE;
|
||||
}
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc;
|
||||
if (pgContext->hBitmap)
|
||||
{
|
||||
hdc = BeginPaint(hwndDlg, &ps);
|
||||
DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
|
||||
EndPaint(hwndDlg, &ps);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
case WM_DESTROY:
|
||||
{
|
||||
DeleteObject(pgContext->hBitmap);
|
||||
return TRUE;
|
||||
}
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDOK:
|
||||
{
|
||||
LPWSTR UserName = NULL, Password = NULL;
|
||||
INT result = WLX_SAS_ACTION_NONE;
|
||||
pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
||||
return TRUE;
|
||||
}
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc;
|
||||
if (pgContext->hBitmap)
|
||||
{
|
||||
hdc = BeginPaint(hwndDlg, &ps);
|
||||
DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
|
||||
EndPaint(hwndDlg, &ps);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
case WM_DESTROY:
|
||||
{
|
||||
DeleteObject(pgContext->hBitmap);
|
||||
return TRUE;
|
||||
}
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDOK:
|
||||
{
|
||||
LPWSTR UserName = NULL, Password = NULL;
|
||||
INT result = WLX_SAS_ACTION_NONE;
|
||||
|
||||
if (GetTextboxText(hwndDlg, IDC_USERNAME, &UserName) && *UserName == '\0')
|
||||
break;
|
||||
if (GetTextboxText(hwndDlg, IDC_PASSWORD, &Password) &&
|
||||
DoLoginTasks(pgContext, UserName, NULL, Password))
|
||||
{
|
||||
result = WLX_SAS_ACTION_LOGON;
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, UserName);
|
||||
HeapFree(GetProcessHeap(), 0, Password);
|
||||
EndDialog(hwndDlg, result);
|
||||
return TRUE;
|
||||
}
|
||||
case IDCANCEL:
|
||||
{
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||
return TRUE;
|
||||
}
|
||||
case IDC_SHUTDOWN:
|
||||
{
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (GetTextboxText(hwndDlg, IDC_USERNAME, &UserName) && *UserName == '\0')
|
||||
break;
|
||||
if (GetTextboxText(hwndDlg, IDC_PASSWORD, &Password) &&
|
||||
DoLoginTasks(pgContext, UserName, NULL, Password))
|
||||
{
|
||||
result = WLX_SAS_ACTION_LOGON;
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, UserName);
|
||||
HeapFree(GetProcessHeap(), 0, Password);
|
||||
EndDialog(hwndDlg, result);
|
||||
return TRUE;
|
||||
}
|
||||
case IDCANCEL:
|
||||
{
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||
return TRUE;
|
||||
}
|
||||
case IDC_SHUTDOWN:
|
||||
{
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static INT
|
||||
GUILoggedOutSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
int result;
|
||||
int result;
|
||||
|
||||
TRACE("GUILoggedOutSAS()\n");
|
||||
TRACE("GUILoggedOutSAS()\n");
|
||||
|
||||
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||
pgContext->hWlx,
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCEW(IDD_LOGGEDOUT_DLG),
|
||||
GetDesktopWindow(),
|
||||
LoggedOutWindowProc,
|
||||
(LPARAM)pgContext);
|
||||
if (result >= WLX_SAS_ACTION_LOGON &&
|
||||
result <= WLX_SAS_ACTION_SWITCH_CONSOLE)
|
||||
{
|
||||
WARN("WlxLoggedOutSAS() returns 0x%x\n", result);
|
||||
return result;
|
||||
}
|
||||
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||
pgContext->hWlx,
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCEW(IDD_LOGGEDOUT_DLG),
|
||||
GetDesktopWindow(),
|
||||
LoggedOutWindowProc,
|
||||
(LPARAM)pgContext);
|
||||
if (result >= WLX_SAS_ACTION_LOGON &&
|
||||
result <= WLX_SAS_ACTION_SWITCH_CONSOLE)
|
||||
{
|
||||
WARN("WlxLoggedOutSAS() returns 0x%x\n", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
WARN("WlxDialogBoxParam() failed (0x%x)\n", result);
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
WARN("WlxDialogBoxParam() failed (0x%x)\n", result);
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
static INT
|
||||
GUILockedSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
TRACE("GUILockedSAS()\n");
|
||||
TRACE("GUILockedSAS()\n");
|
||||
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
|
||||
UNIMPLEMENTED;
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
UNIMPLEMENTED;
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
}
|
||||
|
||||
|
||||
@@ -485,71 +485,71 @@ OnInitLockedDlg(HWND hwnd,
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
LockedWindowProc(
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
{
|
||||
PGINA_CONTEXT pgContext;
|
||||
PGINA_CONTEXT pgContext;
|
||||
|
||||
pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
|
||||
pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
|
||||
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
pgContext = (PGINA_CONTEXT)lParam;
|
||||
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
pgContext = (PGINA_CONTEXT)lParam;
|
||||
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
|
||||
|
||||
pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
||||
OnInitLockedDlg(hwndDlg, pgContext);
|
||||
return TRUE;
|
||||
}
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc;
|
||||
if (pgContext->hBitmap)
|
||||
{
|
||||
hdc = BeginPaint(hwndDlg, &ps);
|
||||
DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
|
||||
EndPaint(hwndDlg, &ps);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
case WM_DESTROY:
|
||||
{
|
||||
DeleteObject(pgContext->hBitmap);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
||||
OnInitLockedDlg(hwndDlg, pgContext);
|
||||
return TRUE;
|
||||
}
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc;
|
||||
if (pgContext->hBitmap)
|
||||
{
|
||||
hdc = BeginPaint(hwndDlg, &ps);
|
||||
DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
|
||||
EndPaint(hwndDlg, &ps);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
case WM_DESTROY:
|
||||
{
|
||||
DeleteObject(pgContext->hBitmap);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
static VOID
|
||||
GUIDisplayLockedNotice(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
TRACE("GUIdisplayLockedNotice()\n");
|
||||
TRACE("GUIdisplayLockedNotice()\n");
|
||||
|
||||
pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||
pgContext->hWlx,
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCEW(IDD_LOCKED_DLG),
|
||||
GetDesktopWindow(),
|
||||
LockedWindowProc,
|
||||
(LPARAM)pgContext);
|
||||
pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||
pgContext->hWlx,
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCEW(IDD_LOCKED_DLG),
|
||||
GetDesktopWindow(),
|
||||
LockedWindowProc,
|
||||
(LPARAM)pgContext);
|
||||
}
|
||||
|
||||
GINA_UI GinaGraphicalUI = {
|
||||
GUIInitialize,
|
||||
GUIDisplayStatusMessage,
|
||||
GUIRemoveStatusMessage,
|
||||
GUIDisplaySASNotice,
|
||||
GUILoggedOnSAS,
|
||||
GUILoggedOutSAS,
|
||||
GUILockedSAS,
|
||||
GUIDisplayLockedNotice,
|
||||
GUIInitialize,
|
||||
GUIDisplayStatusMessage,
|
||||
GUIRemoveStatusMessage,
|
||||
GUIDisplaySASNotice,
|
||||
GUILoggedOnSAS,
|
||||
GUILoggedOutSAS,
|
||||
GUILockedSAS,
|
||||
GUIDisplayLockedNotice,
|
||||
};
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/*
|
||||
* FILE: dll/win32/msgina/lang/cs-CZ.rc
|
||||
/* FILE: dll/win32/msgina/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* UPDATED: 2008-06-24
|
||||
* UPDATED: 2013-02-17
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
@@ -45,9 +44,9 @@ CAPTION "Bezpečnost"
|
||||
FONT 8,"MS Shell Dlg",400,0,1
|
||||
BEGIN
|
||||
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54
|
||||
GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52
|
||||
LTEXT "<Message>",IDC_LOGONMSG,15,73,245,18
|
||||
LTEXT "<Logon date>",IDC_LOGONDATE,15,94,245,8
|
||||
GROUPBOX "Přihlašovací údaje",IDC_STATIC,7,61,261,52
|
||||
LTEXT "<Zpráva>",IDC_LOGONMSG,15,73,245,18
|
||||
LTEXT "<Datum přihlášení>",IDC_LOGONDATE,15,94,245,8
|
||||
CTEXT "Co chcete udělat?",IDC_STATIC,10,119,255,8
|
||||
PUSHBUTTON "Uzamknout počítač",IDC_LOCK,10,135,70,14
|
||||
PUSHBUTTON "Odhlásit",IDC_LOGOFF,90,135,70,14
|
||||
@@ -58,31 +57,31 @@ END
|
||||
|
||||
IDD_LOCKED_DLG DIALOGEX 0,0,275,121
|
||||
STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
|
||||
CAPTION "Computer Locked"
|
||||
CAPTION "Počítač je uzamčen"
|
||||
FONT 8,"MS Shell Dlg",400,0,1
|
||||
BEGIN
|
||||
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54
|
||||
ICON IDI_LOCKICON,-1,7,59,20,20
|
||||
LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8
|
||||
LTEXT "Message",IDC_LOCKMSG,37,75,231,26
|
||||
LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8
|
||||
LTEXT "Tento počítač je momentálně používán a byl uzamčen.",IDC_STATIC,37,61,231,8
|
||||
LTEXT "Zpráva",IDC_LOCKMSG,37,75,231,26
|
||||
LTEXT "Stisknutím kláves Ctrl-Alt-Del odemknete počítač.",IDC_STATIC,37,106,231,8
|
||||
END
|
||||
|
||||
IDD_UNLOCK_DLG DIALOGEX 0,0,275,179
|
||||
STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP
|
||||
CAPTION "Unlock Computer"
|
||||
CAPTION "Odemknout počítač"
|
||||
FONT 8,"MS Shell Dlg",400,0,1
|
||||
BEGIN
|
||||
CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54
|
||||
ICON IDI_LOCKICON,-1,7,59,20,20
|
||||
LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8
|
||||
LTEXT "Message",IDC_LOCKMSG,36,75,232,26
|
||||
LTEXT "Username:",IDC_STATIC,36,107,40,8
|
||||
LTEXT "Tento počítač je momentálně používán a byl uzamčen.",IDC_STATIC,36,61,232,8
|
||||
LTEXT "Zpráva",IDC_LOCKMSG,36,75,232,26
|
||||
LTEXT "Uživatelské jméno:",IDC_STATIC,36,107,40,8
|
||||
EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL
|
||||
LTEXT "Password:",IDC_STATIC,36,125,42,8
|
||||
LTEXT "Heslo:",IDC_STATIC,36,125,42,8
|
||||
EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD
|
||||
PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON
|
||||
PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14
|
||||
PUSHBUTTON "Storno",IDCANCEL,144,154,50,14
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
@@ -93,6 +92,7 @@ BEGIN
|
||||
IDS_ASKFORUSER "Uživatelské jméno: "
|
||||
IDS_ASKFORPASSWORD "Heslo: "
|
||||
IDS_FORCELOGOFF "Současný uživatel bude odhlášen a všechna jeho neuložená data ztracena. Pokračovat?"
|
||||
IDS_LOCKMSG "Only %s or an Administrator can unlock this computer."
|
||||
IDS_LOGONDATE "Logon date: %s %s"
|
||||
IDS_LOCKMSG "Pouze %s nebo Administrátor může odemknout tento počítač."
|
||||
IDS_LOGONMSG "Jste přihlášeni jako %s."
|
||||
IDS_LOGONDATE "Datum přihlášení: %s %s"
|
||||
END
|
||||
|
||||
+487
-487
File diff suppressed because it is too large
Load Diff
+29
-29
@@ -23,25 +23,25 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
HANDLE hWlx;
|
||||
LPWSTR station;
|
||||
PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
|
||||
HANDLE hDllInstance;
|
||||
HWND hStatusWindow;
|
||||
DWORD AutoLogonState;
|
||||
HANDLE hWlx;
|
||||
LPWSTR station;
|
||||
PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
|
||||
HANDLE hDllInstance;
|
||||
HWND hStatusWindow;
|
||||
DWORD AutoLogonState;
|
||||
|
||||
/* Informations to be filled during logon */
|
||||
WCHAR UserName[256];
|
||||
WCHAR Domain[256];
|
||||
SYSTEMTIME LogonTime;
|
||||
HANDLE UserToken;
|
||||
PLUID pAuthenticationId;
|
||||
PDWORD pdwOptions;
|
||||
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo;
|
||||
PVOID *pProfile;
|
||||
/* Informations to be filled during logon */
|
||||
WCHAR UserName[256];
|
||||
WCHAR Domain[256];
|
||||
SYSTEMTIME LogonTime;
|
||||
HANDLE UserToken;
|
||||
PLUID pAuthenticationId;
|
||||
PDWORD pdwOptions;
|
||||
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo;
|
||||
PVOID *pProfile;
|
||||
|
||||
/* Current logo to display */
|
||||
HBITMAP hBitmap;
|
||||
/* Current logo to display */
|
||||
HBITMAP hBitmap;
|
||||
} GINA_CONTEXT, *PGINA_CONTEXT;
|
||||
|
||||
extern HINSTANCE hDllInstance;
|
||||
@@ -57,23 +57,23 @@ typedef VOID (*PFGINA_DISPLAYLOCKEDNOTICE)(PGINA_CONTEXT);
|
||||
|
||||
typedef struct _GINA_UI
|
||||
{
|
||||
PFGINA_INITIALIZE Initialize;
|
||||
PFGINA_DISPLAYSTATUSMESSAGE DisplayStatusMessage;
|
||||
PFGINA_REMOVESTATUSMESSAGE RemoveStatusMessage;
|
||||
PFGINA_DISPLAYSASNOTICE DisplaySASNotice;
|
||||
PFGINA_LOGGEDONSAS LoggedOnSAS;
|
||||
PFGINA_LOGGEDOUTSAS LoggedOutSAS;
|
||||
PFGINA_LOCKEDSAS LockedSAS;
|
||||
PFGINA_DISPLAYLOCKEDNOTICE DisplayLockedNotice;
|
||||
PFGINA_INITIALIZE Initialize;
|
||||
PFGINA_DISPLAYSTATUSMESSAGE DisplayStatusMessage;
|
||||
PFGINA_REMOVESTATUSMESSAGE RemoveStatusMessage;
|
||||
PFGINA_DISPLAYSASNOTICE DisplaySASNotice;
|
||||
PFGINA_LOGGEDONSAS LoggedOnSAS;
|
||||
PFGINA_LOGGEDOUTSAS LoggedOutSAS;
|
||||
PFGINA_LOCKEDSAS LockedSAS;
|
||||
PFGINA_DISPLAYLOCKEDNOTICE DisplayLockedNotice;
|
||||
} GINA_UI, *PGINA_UI;
|
||||
|
||||
/* msgina.c */
|
||||
|
||||
BOOL
|
||||
DoLoginTasks(
|
||||
IN OUT PGINA_CONTEXT pgContext,
|
||||
IN PWSTR UserName,
|
||||
IN PWSTR Domain,
|
||||
IN PWSTR Password);
|
||||
IN OUT PGINA_CONTEXT pgContext,
|
||||
IN PWSTR UserName,
|
||||
IN PWSTR Domain,
|
||||
IN PWSTR Password);
|
||||
|
||||
/* EOF */
|
||||
|
||||
+50
-50
@@ -22,20 +22,20 @@ ShellShutdownDialog(
|
||||
DWORD Unknown,
|
||||
BOOL bHideLogoff)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(hParent);
|
||||
UNREFERENCED_PARAMETER(Unknown);
|
||||
UNREFERENCED_PARAMETER(bHideLogoff);
|
||||
UNREFERENCED_PARAMETER(hParent);
|
||||
UNREFERENCED_PARAMETER(Unknown);
|
||||
UNREFERENCED_PARAMETER(bHideLogoff);
|
||||
|
||||
/* Return values:
|
||||
* 0x00: Cancelled/Help
|
||||
* 0x01: Log off user
|
||||
* 0x02: Shutdown
|
||||
* 0x04: Reboot
|
||||
* 0x10: Standby
|
||||
* 0x40: Hibernate
|
||||
*/
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
/* Return values:
|
||||
* 0x00: Cancelled/Help
|
||||
* 0x01: Log off user
|
||||
* 0x02: Shutdown
|
||||
* 0x04: Reboot
|
||||
* 0x10: Standby
|
||||
* 0x40: Hibernate
|
||||
*/
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,12 +44,12 @@ ShellShutdownDialog(
|
||||
*/
|
||||
BOOL WINAPI
|
||||
WlxIsLockOk(
|
||||
PVOID pWlxContext)
|
||||
PVOID pWlxContext)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
|
||||
UNIMPLEMENTED;
|
||||
return TRUE;
|
||||
UNIMPLEMENTED;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -58,11 +58,11 @@ WlxIsLockOk(
|
||||
*/
|
||||
VOID WINAPI
|
||||
WlxLogoff(
|
||||
PVOID pWlxContext)
|
||||
PVOID pWlxContext)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
|
||||
UNIMPLEMENTED;
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,13 +71,13 @@ WlxLogoff(
|
||||
*/
|
||||
VOID WINAPI
|
||||
WlxShutdown(
|
||||
PVOID pWlxContext,
|
||||
DWORD ShutdownType)
|
||||
PVOID pWlxContext,
|
||||
DWORD ShutdownType)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(ShutdownType);
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(ShutdownType);
|
||||
|
||||
UNIMPLEMENTED;
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
@@ -86,18 +86,18 @@ WlxShutdown(
|
||||
*/
|
||||
BOOL WINAPI
|
||||
WlxGetStatusMessage(
|
||||
PVOID pWlxContext,
|
||||
DWORD *pdwOptions,
|
||||
PWSTR pMessage,
|
||||
DWORD dwBufferSize)
|
||||
PVOID pWlxContext,
|
||||
DWORD *pdwOptions,
|
||||
PWSTR pMessage,
|
||||
DWORD dwBufferSize)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(pdwOptions);
|
||||
UNREFERENCED_PARAMETER(pMessage);
|
||||
UNREFERENCED_PARAMETER(dwBufferSize);
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(pdwOptions);
|
||||
UNREFERENCED_PARAMETER(pMessage);
|
||||
UNREFERENCED_PARAMETER(dwBufferSize);
|
||||
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -106,14 +106,14 @@ WlxGetStatusMessage(
|
||||
*/
|
||||
BOOL WINAPI
|
||||
WlxNetworkProviderLoad(
|
||||
PVOID pWlxContext,
|
||||
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo)
|
||||
PVOID pWlxContext,
|
||||
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(pNprNotifyInfo);
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(pNprNotifyInfo);
|
||||
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -122,11 +122,11 @@ WlxNetworkProviderLoad(
|
||||
*/
|
||||
VOID WINAPI
|
||||
WlxDisconnectNotify(
|
||||
PVOID pWlxContext)
|
||||
PVOID pWlxContext)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
|
||||
UNIMPLEMENTED;
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
|
||||
@@ -135,13 +135,13 @@ WlxDisconnectNotify(
|
||||
*/
|
||||
BOOL WINAPI
|
||||
WlxGetConsoleSwitchCredentials(
|
||||
PVOID pWlxContext,
|
||||
PVOID pCredInfo)
|
||||
PVOID pWlxContext,
|
||||
PVOID pCredInfo)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(pCredInfo);
|
||||
UNREFERENCED_PARAMETER(pWlxContext);
|
||||
UNREFERENCED_PARAMETER(pCredInfo);
|
||||
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
+178
-178
@@ -11,255 +11,255 @@ WINE_DEFAULT_DEBUG_CHANNEL(msgina);
|
||||
|
||||
static BOOL
|
||||
TUIInitialize(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
TRACE("TUIInitialize(%p)\n", pgContext);
|
||||
TRACE("TUIInitialize(%p)\n", pgContext);
|
||||
|
||||
return AllocConsole();
|
||||
return AllocConsole();
|
||||
}
|
||||
|
||||
static BOOL
|
||||
TUIDisplayStatusMessage(
|
||||
IN PGINA_CONTEXT pgContext,
|
||||
IN HDESK hDesktop,
|
||||
IN DWORD dwOptions,
|
||||
IN PWSTR pTitle,
|
||||
IN PWSTR pMessage)
|
||||
IN PGINA_CONTEXT pgContext,
|
||||
IN HDESK hDesktop,
|
||||
IN DWORD dwOptions,
|
||||
IN PWSTR pTitle,
|
||||
IN PWSTR pMessage)
|
||||
{
|
||||
static LPCWSTR newLine = L"\n";
|
||||
DWORD result;
|
||||
static LPCWSTR newLine = L"\n";
|
||||
DWORD result;
|
||||
|
||||
TRACE("TUIDisplayStatusMessage(%ws)\n", pMessage);
|
||||
TRACE("TUIDisplayStatusMessage(%ws)\n", pMessage);
|
||||
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
UNREFERENCED_PARAMETER(hDesktop);
|
||||
UNREFERENCED_PARAMETER(dwOptions);
|
||||
UNREFERENCED_PARAMETER(pTitle);
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
UNREFERENCED_PARAMETER(hDesktop);
|
||||
UNREFERENCED_PARAMETER(dwOptions);
|
||||
UNREFERENCED_PARAMETER(pTitle);
|
||||
|
||||
return
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
pMessage,
|
||||
wcslen(pMessage),
|
||||
&result,
|
||||
NULL) &&
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
newLine,
|
||||
wcslen(newLine),
|
||||
&result,
|
||||
NULL);
|
||||
return
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
pMessage,
|
||||
wcslen(pMessage),
|
||||
&result,
|
||||
NULL) &&
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
newLine,
|
||||
wcslen(newLine),
|
||||
&result,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static BOOL
|
||||
TUIRemoveStatusMessage(
|
||||
IN PGINA_CONTEXT pgContext)
|
||||
IN PGINA_CONTEXT pgContext)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
|
||||
/* Nothing to do */
|
||||
return TRUE;
|
||||
/* Nothing to do */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL
|
||||
DisplayResourceText(
|
||||
IN UINT uIdResourceText,
|
||||
IN BOOL AddNewLine)
|
||||
IN UINT uIdResourceText,
|
||||
IN BOOL AddNewLine)
|
||||
{
|
||||
WCHAR Prompt[256];
|
||||
static LPCWSTR newLine = L"\n";
|
||||
DWORD count;
|
||||
WCHAR Prompt[256];
|
||||
static LPCWSTR newLine = L"\n";
|
||||
DWORD count;
|
||||
|
||||
if (0 == LoadStringW(hDllInstance, uIdResourceText, Prompt, 256))
|
||||
return FALSE;
|
||||
if (!WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
Prompt, wcslen(Prompt),
|
||||
&count, NULL))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (AddNewLine)
|
||||
{
|
||||
if (!WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
newLine, wcslen(newLine),
|
||||
&count, NULL))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
if (0 == LoadStringW(hDllInstance, uIdResourceText, Prompt, 256))
|
||||
return FALSE;
|
||||
if (!WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
Prompt, wcslen(Prompt),
|
||||
&count, NULL))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (AddNewLine)
|
||||
{
|
||||
if (!WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
newLine, wcslen(newLine),
|
||||
&count, NULL))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static VOID
|
||||
TUIDisplaySASNotice(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
TRACE("TUIDisplaySASNotice()\n");
|
||||
TRACE("TUIDisplaySASNotice()\n");
|
||||
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
|
||||
DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE);
|
||||
DisplayResourceText(IDS_PRESSCTRLALTDELETE, TRUE);
|
||||
DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE);
|
||||
DisplayResourceText(IDS_PRESSCTRLALTDELETE, TRUE);
|
||||
}
|
||||
|
||||
static INT
|
||||
TUILoggedOnSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext,
|
||||
IN DWORD dwSasType)
|
||||
IN OUT PGINA_CONTEXT pgContext,
|
||||
IN DWORD dwSasType)
|
||||
{
|
||||
TRACE("TUILoggedOnSAS()\n");
|
||||
TRACE("TUILoggedOnSAS()\n");
|
||||
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
|
||||
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
||||
{
|
||||
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT */
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
||||
{
|
||||
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT */
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
FIXME("FIXME: TUILoggedOnSAS(): Let's suppose the user wants to log off...\n");
|
||||
return WLX_SAS_ACTION_LOGOFF;
|
||||
FIXME("FIXME: TUILoggedOnSAS(): Let's suppose the user wants to log off...\n");
|
||||
return WLX_SAS_ACTION_LOGOFF;
|
||||
}
|
||||
|
||||
static BOOL
|
||||
ReadString(
|
||||
IN UINT uIdResourcePrompt,
|
||||
IN OUT PWSTR Buffer,
|
||||
IN DWORD BufferLength,
|
||||
IN BOOL ShowString)
|
||||
IN UINT uIdResourcePrompt,
|
||||
IN OUT PWSTR Buffer,
|
||||
IN DWORD BufferLength,
|
||||
IN BOOL ShowString)
|
||||
{
|
||||
DWORD count, i;
|
||||
WCHAR charToDisplay[] = { 0, UNICODE_NULL };
|
||||
DWORD count, i;
|
||||
WCHAR charToDisplay[] = { 0, UNICODE_NULL };
|
||||
|
||||
if (!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), 0))
|
||||
return FALSE;
|
||||
if (!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), 0))
|
||||
return FALSE;
|
||||
|
||||
if (!FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)))
|
||||
return FALSE;
|
||||
if (!FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)))
|
||||
return FALSE;
|
||||
|
||||
if (!DisplayResourceText(uIdResourcePrompt, FALSE))
|
||||
return FALSE;
|
||||
if (!DisplayResourceText(uIdResourcePrompt, FALSE))
|
||||
return FALSE;
|
||||
|
||||
i = 0;
|
||||
for (;;)
|
||||
{
|
||||
WCHAR readChar;
|
||||
if (!ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), &readChar, 1, &count, NULL))
|
||||
return FALSE;
|
||||
if (readChar == '\r' || readChar == '\n')
|
||||
{
|
||||
/* End of string */
|
||||
charToDisplay[0] = L'\n';
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
charToDisplay,
|
||||
wcslen(charToDisplay),
|
||||
&count,
|
||||
NULL);
|
||||
break;
|
||||
}
|
||||
if (ShowString)
|
||||
{
|
||||
/* Display the char */
|
||||
charToDisplay[0] = readChar;
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
charToDisplay,
|
||||
wcslen(charToDisplay),
|
||||
&count,
|
||||
NULL);
|
||||
}
|
||||
Buffer[i++] = readChar;
|
||||
/* FIXME: buffer overflow if the user writes too many chars! */
|
||||
UNREFERENCED_PARAMETER(BufferLength);
|
||||
/* FIXME: handle backspace */
|
||||
}
|
||||
Buffer[i] = UNICODE_NULL;
|
||||
i = 0;
|
||||
for (;;)
|
||||
{
|
||||
WCHAR readChar;
|
||||
if (!ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), &readChar, 1, &count, NULL))
|
||||
return FALSE;
|
||||
if (readChar == '\r' || readChar == '\n')
|
||||
{
|
||||
/* End of string */
|
||||
charToDisplay[0] = L'\n';
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
charToDisplay,
|
||||
wcslen(charToDisplay),
|
||||
&count,
|
||||
NULL);
|
||||
break;
|
||||
}
|
||||
if (ShowString)
|
||||
{
|
||||
/* Display the char */
|
||||
charToDisplay[0] = readChar;
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
charToDisplay,
|
||||
wcslen(charToDisplay),
|
||||
&count,
|
||||
NULL);
|
||||
}
|
||||
Buffer[i++] = readChar;
|
||||
/* FIXME: buffer overflow if the user writes too many chars! */
|
||||
UNREFERENCED_PARAMETER(BufferLength);
|
||||
/* FIXME: handle backspace */
|
||||
}
|
||||
Buffer[i] = UNICODE_NULL;
|
||||
|
||||
if (!ShowString)
|
||||
{
|
||||
/* Still display the \n */
|
||||
static LPCWSTR newLine = L"\n";
|
||||
DWORD result;
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
newLine,
|
||||
wcslen(newLine),
|
||||
&result,
|
||||
NULL);
|
||||
}
|
||||
return TRUE;
|
||||
if (!ShowString)
|
||||
{
|
||||
/* Still display the \n */
|
||||
static LPCWSTR newLine = L"\n";
|
||||
DWORD result;
|
||||
WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
newLine,
|
||||
wcslen(newLine),
|
||||
&result,
|
||||
NULL);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static INT
|
||||
TUILoggedOutSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
WCHAR UserName[256];
|
||||
WCHAR Password[256];
|
||||
WCHAR UserName[256];
|
||||
WCHAR Password[256];
|
||||
|
||||
TRACE("TUILoggedOutSAS()\n");
|
||||
TRACE("TUILoggedOutSAS()\n");
|
||||
|
||||
/* Ask the user for credentials */
|
||||
if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
/* Ask the user for credentials */
|
||||
if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
|
||||
if (DoLoginTasks(pgContext, UserName, NULL, Password))
|
||||
return WLX_SAS_ACTION_LOGON;
|
||||
else
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
if (DoLoginTasks(pgContext, UserName, NULL, Password))
|
||||
return WLX_SAS_ACTION_LOGON;
|
||||
else
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
static INT
|
||||
TUILockedSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
HANDLE hToken;
|
||||
WCHAR UserName[256];
|
||||
WCHAR Password[256];
|
||||
HANDLE hToken;
|
||||
WCHAR UserName[256];
|
||||
WCHAR Password[256];
|
||||
|
||||
TRACE("TUILockedSAS()\n");
|
||||
TRACE("TUILockedSAS()\n");
|
||||
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
UNREFERENCED_PARAMETER(pgContext);
|
||||
|
||||
if (!DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE))
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
if (!DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE))
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
|
||||
/* Ask the user for credentials */
|
||||
if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
/* Ask the user for credentials */
|
||||
if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
|
||||
if (!LogonUserW(UserName, NULL, Password,
|
||||
LOGON32_LOGON_UNLOCK,
|
||||
LOGON32_PROVIDER_DEFAULT,
|
||||
&hToken))
|
||||
{
|
||||
TRACE("LogonUserW() failed\n");
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
CloseHandle(hToken);
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
if (!LogonUserW(UserName, NULL, Password,
|
||||
LOGON32_LOGON_UNLOCK,
|
||||
LOGON32_PROVIDER_DEFAULT,
|
||||
&hToken))
|
||||
{
|
||||
TRACE("LogonUserW() failed\n");
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
CloseHandle(hToken);
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
}
|
||||
|
||||
static VOID
|
||||
TUIDisplayLockedNotice(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
}
|
||||
|
||||
GINA_UI GinaTextUI = {
|
||||
TUIInitialize,
|
||||
TUIDisplayStatusMessage,
|
||||
TUIRemoveStatusMessage,
|
||||
TUIDisplaySASNotice,
|
||||
TUILoggedOnSAS,
|
||||
TUILoggedOutSAS,
|
||||
TUILockedSAS,
|
||||
TUIDisplayLockedNotice,
|
||||
TUIInitialize,
|
||||
TUIDisplayStatusMessage,
|
||||
TUIRemoveStatusMessage,
|
||||
TUIDisplaySASNotice,
|
||||
TUILoggedOnSAS,
|
||||
TUILoggedOutSAS,
|
||||
TUILockedSAS,
|
||||
TUIDisplayLockedNotice,
|
||||
};
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
//#include "winnls.h"
|
||||
#include <shlwapi.h>
|
||||
#include <wingdi.h>
|
||||
#include <wincon.h>
|
||||
#include <wine/debug.h>
|
||||
//#include "msi.h"
|
||||
//#include "msiquery.h"
|
||||
|
||||
+551
-7
@@ -81,7 +81,7 @@ BuildInteractiveProfileBuffer(IN PLSA_CLIENT_REQUEST ClientRequest,
|
||||
PVOID ClientBaseAddress = NULL;
|
||||
LPWSTR Ptr;
|
||||
ULONG BufferLength;
|
||||
NTSTATUS Status;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
*ProfileBuffer = NULL;
|
||||
*ProfileBufferLength = 0;
|
||||
@@ -118,12 +118,24 @@ BuildInteractiveProfileBuffer(IN PLSA_CLIENT_REQUEST ClientRequest,
|
||||
LocalBuffer->MessageType = MsV1_0InteractiveProfile;
|
||||
LocalBuffer->LogonCount = UserInfo->All.LogonCount;
|
||||
LocalBuffer->BadPasswordCount = UserInfo->All.BadPasswordCount;
|
||||
// LARGE_INTEGER LogonTime;
|
||||
// LARGE_INTEGER LogoffTime;
|
||||
// LARGE_INTEGER KickOffTime;
|
||||
// LARGE_INTEGER PasswordLastSet;
|
||||
// LARGE_INTEGER PasswordCanChange;
|
||||
// LARGE_INTEGER PasswordMustChange;
|
||||
|
||||
LocalBuffer->LogonTime.LowPart = UserInfo->All.LastLogon.LowPart;
|
||||
LocalBuffer->LogonTime.HighPart = UserInfo->All.LastLogon.HighPart;
|
||||
|
||||
// LocalBuffer->LogoffTime.LowPart =
|
||||
// LocalBuffer->LogoffTime.HighPart =
|
||||
|
||||
// LocalBuffer->KickOffTime.LowPart =
|
||||
// LocalBuffer->KickOffTime.HighPart =
|
||||
|
||||
LocalBuffer->PasswordLastSet.LowPart = UserInfo->All.PasswordLastSet.LowPart;
|
||||
LocalBuffer->PasswordLastSet.HighPart = UserInfo->All.PasswordLastSet.HighPart;
|
||||
|
||||
LocalBuffer->PasswordCanChange.LowPart = UserInfo->All.PasswordCanChange.LowPart;
|
||||
LocalBuffer->PasswordCanChange.HighPart = UserInfo->All.PasswordCanChange.HighPart;
|
||||
|
||||
LocalBuffer->PasswordMustChange.LowPart = UserInfo->All.PasswordMustChange.LowPart;
|
||||
LocalBuffer->PasswordMustChange.HighPart = UserInfo->All.PasswordMustChange.HighPart;
|
||||
|
||||
LocalBuffer->LogonScript.Length = UserInfo->All.ScriptPath.Length;
|
||||
LocalBuffer->LogonScript.MaximumLength = UserInfo->All.ScriptPath.Length + sizeof(WCHAR);
|
||||
@@ -208,6 +220,511 @@ done:
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
PSID
|
||||
AppendRidToSid(PSID SrcSid,
|
||||
ULONG Rid)
|
||||
{
|
||||
PSID DstSid = NULL;
|
||||
UCHAR RidCount;
|
||||
ULONG Size;
|
||||
ULONG i;
|
||||
|
||||
RidCount = *RtlSubAuthorityCountSid(SrcSid);
|
||||
if (RidCount >= 8)
|
||||
return NULL;
|
||||
|
||||
Size = RtlLengthRequiredSid(RidCount + 1);
|
||||
|
||||
DstSid = DispatchTable.AllocateLsaHeap(Size);
|
||||
if (DstSid == NULL)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < RidCount; i++)
|
||||
*RtlSubAuthoritySid(DstSid, i) = *RtlSubAuthoritySid(SrcSid, i);
|
||||
|
||||
*RtlSubAuthoritySid(DstSid, RidCount) = Rid;
|
||||
|
||||
return DstSid;
|
||||
}
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
BuildTokenUser(OUT PTOKEN_USER User,
|
||||
IN PSID AccountDomainSid,
|
||||
IN ULONG RelativeId)
|
||||
{
|
||||
User->User.Sid = AppendRidToSid(AccountDomainSid,
|
||||
RelativeId);
|
||||
User->User.Attributes = 0;
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
BuildTokenGroups(IN PSID AccountDomainSid,
|
||||
IN PLUID LogonId,
|
||||
OUT PTOKEN_GROUPS *Groups,
|
||||
OUT PSID *PrimaryGroupSid,
|
||||
OUT PSID *OwnerSid)
|
||||
{
|
||||
SID_IDENTIFIER_AUTHORITY WorldAuthority = {SECURITY_WORLD_SID_AUTHORITY};
|
||||
SID_IDENTIFIER_AUTHORITY LocalAuthority = {SECURITY_LOCAL_SID_AUTHORITY};
|
||||
SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
|
||||
PTOKEN_GROUPS TokenGroups;
|
||||
#define MAX_GROUPS 8
|
||||
DWORD GroupCount = 0;
|
||||
PSID Sid;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
TokenGroups = DispatchTable.AllocateLsaHeap(sizeof(TOKEN_GROUPS) +
|
||||
MAX_GROUPS * sizeof(SID_AND_ATTRIBUTES));
|
||||
if (TokenGroups == NULL)
|
||||
{
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
Sid = AppendRidToSid(AccountDomainSid, DOMAIN_GROUP_RID_USERS);
|
||||
if (Sid == NULL)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/* Member of the domain */
|
||||
TokenGroups->Groups[GroupCount].Sid = Sid;
|
||||
TokenGroups->Groups[GroupCount].Attributes =
|
||||
SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_MANDATORY;
|
||||
*PrimaryGroupSid = Sid;
|
||||
GroupCount++;
|
||||
|
||||
/* Member of 'Everyone' */
|
||||
RtlAllocateAndInitializeSid(&WorldAuthority,
|
||||
1,
|
||||
SECURITY_WORLD_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
&Sid);
|
||||
TokenGroups->Groups[GroupCount].Sid = Sid;
|
||||
TokenGroups->Groups[GroupCount].Attributes =
|
||||
SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_MANDATORY;
|
||||
GroupCount++;
|
||||
|
||||
#if 1
|
||||
/* Member of 'Administrators' */
|
||||
RtlAllocateAndInitializeSid(&SystemAuthority,
|
||||
2,
|
||||
SECURITY_BUILTIN_DOMAIN_RID,
|
||||
DOMAIN_ALIAS_RID_ADMINS,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
&Sid);
|
||||
TokenGroups->Groups[GroupCount].Sid = Sid;
|
||||
TokenGroups->Groups[GroupCount].Attributes =
|
||||
SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_MANDATORY;
|
||||
GroupCount++;
|
||||
#else
|
||||
TRACE("Not adding user to Administrators group\n");
|
||||
#endif
|
||||
|
||||
/* Member of 'Users' */
|
||||
RtlAllocateAndInitializeSid(&SystemAuthority,
|
||||
2,
|
||||
SECURITY_BUILTIN_DOMAIN_RID,
|
||||
DOMAIN_ALIAS_RID_USERS,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
&Sid);
|
||||
TokenGroups->Groups[GroupCount].Sid = Sid;
|
||||
TokenGroups->Groups[GroupCount].Attributes =
|
||||
SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_MANDATORY;
|
||||
GroupCount++;
|
||||
|
||||
/* Logon SID */
|
||||
RtlAllocateAndInitializeSid(&SystemAuthority,
|
||||
SECURITY_LOGON_IDS_RID_COUNT,
|
||||
SECURITY_LOGON_IDS_RID,
|
||||
LogonId->HighPart,
|
||||
LogonId->LowPart,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
&Sid);
|
||||
TokenGroups->Groups[GroupCount].Sid = Sid;
|
||||
TokenGroups->Groups[GroupCount].Attributes =
|
||||
SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_MANDATORY | SE_GROUP_LOGON_ID;
|
||||
GroupCount++;
|
||||
*OwnerSid = Sid;
|
||||
|
||||
/* Member of 'Local users */
|
||||
RtlAllocateAndInitializeSid(&LocalAuthority,
|
||||
1,
|
||||
SECURITY_LOCAL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
&Sid);
|
||||
TokenGroups->Groups[GroupCount].Sid = Sid;
|
||||
TokenGroups->Groups[GroupCount].Attributes =
|
||||
SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_MANDATORY;
|
||||
GroupCount++;
|
||||
|
||||
/* Member of 'Interactive users' */
|
||||
RtlAllocateAndInitializeSid(&SystemAuthority,
|
||||
1,
|
||||
SECURITY_INTERACTIVE_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
&Sid);
|
||||
TokenGroups->Groups[GroupCount].Sid = Sid;
|
||||
TokenGroups->Groups[GroupCount].Attributes =
|
||||
SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_MANDATORY;
|
||||
GroupCount++;
|
||||
|
||||
/* Member of 'Authenticated users' */
|
||||
RtlAllocateAndInitializeSid(&SystemAuthority,
|
||||
1,
|
||||
SECURITY_AUTHENTICATED_USER_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
&Sid);
|
||||
TokenGroups->Groups[GroupCount].Sid = Sid;
|
||||
TokenGroups->Groups[GroupCount].Attributes =
|
||||
SE_GROUP_ENABLED | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_MANDATORY;
|
||||
GroupCount++;
|
||||
|
||||
TokenGroups->GroupCount = GroupCount;
|
||||
ASSERT(TokenGroups->GroupCount <= MAX_GROUPS);
|
||||
|
||||
*Groups = TokenGroups;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
BuildTokenPrimaryGroup(PTOKEN_PRIMARY_GROUP PrimaryGroup,
|
||||
PSID PrimaryGroupSid)
|
||||
{
|
||||
ULONG RidCount;
|
||||
ULONG Size;
|
||||
|
||||
RidCount = *RtlSubAuthorityCountSid(PrimaryGroupSid);
|
||||
Size = RtlLengthRequiredSid(RidCount);
|
||||
|
||||
PrimaryGroup->PrimaryGroup = DispatchTable.AllocateLsaHeap(Size);
|
||||
if (PrimaryGroup->PrimaryGroup == NULL)
|
||||
{
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
RtlCopyMemory(PrimaryGroup->PrimaryGroup,
|
||||
PrimaryGroupSid,
|
||||
Size);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
BuildTokenPrivileges(PTOKEN_PRIVILEGES *TokenPrivileges)
|
||||
{
|
||||
/* FIXME shouldn't use hard-coded list of privileges */
|
||||
static struct
|
||||
{
|
||||
LPCWSTR PrivName;
|
||||
DWORD Attributes;
|
||||
}
|
||||
DefaultPrivs[] =
|
||||
{
|
||||
{ L"SeMachineAccountPrivilege", 0 },
|
||||
{ L"SeSecurityPrivilege", 0 },
|
||||
{ L"SeTakeOwnershipPrivilege", 0 },
|
||||
{ L"SeLoadDriverPrivilege", 0 },
|
||||
{ L"SeSystemProfilePrivilege", 0 },
|
||||
{ L"SeSystemtimePrivilege", 0 },
|
||||
{ L"SeProfileSingleProcessPrivilege", 0 },
|
||||
{ L"SeIncreaseBasePriorityPrivilege", 0 },
|
||||
{ L"SeCreatePagefilePrivilege", 0 },
|
||||
{ L"SeBackupPrivilege", 0 },
|
||||
{ L"SeRestorePrivilege", 0 },
|
||||
{ L"SeShutdownPrivilege", 0 },
|
||||
{ L"SeDebugPrivilege", 0 },
|
||||
{ L"SeSystemEnvironmentPrivilege", 0 },
|
||||
{ L"SeChangeNotifyPrivilege", SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT },
|
||||
{ L"SeRemoteShutdownPrivilege", 0 },
|
||||
{ L"SeUndockPrivilege", 0 },
|
||||
{ L"SeEnableDelegationPrivilege", 0 },
|
||||
{ L"SeImpersonatePrivilege", SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT },
|
||||
{ L"SeCreateGlobalPrivilege", SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT }
|
||||
};
|
||||
PTOKEN_PRIVILEGES Privileges = NULL;
|
||||
ULONG i;
|
||||
RPC_UNICODE_STRING PrivilegeName;
|
||||
LSAPR_HANDLE PolicyHandle = NULL;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
Status = LsaIOpenPolicyTrusted(&PolicyHandle);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Allocate and initialize token privileges */
|
||||
Privileges = DispatchTable.AllocateLsaHeap(sizeof(TOKEN_PRIVILEGES) +
|
||||
sizeof(DefaultPrivs) / sizeof(DefaultPrivs[0]) *
|
||||
sizeof(LUID_AND_ATTRIBUTES));
|
||||
if (Privileges == NULL)
|
||||
{
|
||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto done;
|
||||
}
|
||||
|
||||
Privileges->PrivilegeCount = 0;
|
||||
for (i = 0; i < sizeof(DefaultPrivs) / sizeof(DefaultPrivs[0]); i++)
|
||||
{
|
||||
PrivilegeName.Length = wcslen(DefaultPrivs[i].PrivName) * sizeof(WCHAR);
|
||||
PrivilegeName.MaximumLength = PrivilegeName.Length + sizeof(WCHAR);
|
||||
PrivilegeName.Buffer = (LPWSTR)DefaultPrivs[i].PrivName;
|
||||
|
||||
Status = LsarLookupPrivilegeValue(PolicyHandle,
|
||||
&PrivilegeName,
|
||||
&Privileges->Privileges[Privileges->PrivilegeCount].Luid);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
WARN("Can't set privilege %S\n", DefaultPrivs[i].PrivName);
|
||||
}
|
||||
else
|
||||
{
|
||||
Privileges->Privileges[Privileges->PrivilegeCount].Attributes = DefaultPrivs[i].Attributes;
|
||||
Privileges->PrivilegeCount++;
|
||||
}
|
||||
}
|
||||
|
||||
*TokenPrivileges = Privileges;
|
||||
|
||||
done:
|
||||
if (PolicyHandle != NULL)
|
||||
LsarClose(PolicyHandle);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
BuildTokenOwner(PTOKEN_OWNER Owner,
|
||||
PSID OwnerSid)
|
||||
{
|
||||
ULONG RidCount;
|
||||
ULONG Size;
|
||||
|
||||
RidCount = *RtlSubAuthorityCountSid(OwnerSid);
|
||||
Size = RtlLengthRequiredSid(RidCount);
|
||||
|
||||
Owner->Owner = DispatchTable.AllocateLsaHeap(Size);
|
||||
if (Owner->Owner == NULL)
|
||||
{
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
RtlCopyMemory(Owner->Owner,
|
||||
OwnerSid,
|
||||
Size);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
BuildTokenDefaultDacl(PTOKEN_DEFAULT_DACL DefaultDacl,
|
||||
PSID OwnerSid)
|
||||
{
|
||||
SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
|
||||
PSID LocalSystemSid = NULL;
|
||||
PACL Dacl = NULL;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
RtlAllocateAndInitializeSid(&SystemAuthority,
|
||||
1,
|
||||
SECURITY_LOCAL_SYSTEM_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
SECURITY_NULL_RID,
|
||||
&LocalSystemSid);
|
||||
|
||||
Dacl = DispatchTable.AllocateLsaHeap(1024);
|
||||
if (Dacl == NULL)
|
||||
{
|
||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto done;
|
||||
}
|
||||
|
||||
Status = RtlCreateAcl(Dacl, 1024, ACL_REVISION);
|
||||
if (!NT_SUCCESS(Status))
|
||||
goto done;
|
||||
|
||||
RtlAddAccessAllowedAce(Dacl,
|
||||
ACL_REVISION,
|
||||
GENERIC_ALL,
|
||||
OwnerSid);
|
||||
|
||||
/* SID: S-1-5-18 */
|
||||
RtlAddAccessAllowedAce(Dacl,
|
||||
ACL_REVISION,
|
||||
GENERIC_ALL,
|
||||
LocalSystemSid);
|
||||
|
||||
DefaultDacl->DefaultDacl = Dacl;
|
||||
|
||||
done:
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
if (Dacl != NULL)
|
||||
DispatchTable.FreeLsaHeap(Dacl);
|
||||
}
|
||||
|
||||
if (LocalSystemSid != NULL)
|
||||
RtlFreeSid(LocalSystemSid);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
NTSTATUS
|
||||
BuildTokenInformationBuffer(PLSA_TOKEN_INFORMATION_V1 *TokenInformation,
|
||||
PRPC_SID AccountDomainSid,
|
||||
ULONG RelativeId,
|
||||
PLUID LogonId)
|
||||
{
|
||||
PLSA_TOKEN_INFORMATION_V1 Buffer = NULL;
|
||||
PSID OwnerSid = NULL;
|
||||
PSID PrimaryGroupSid = NULL;
|
||||
ULONG i;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
Buffer = DispatchTable.AllocateLsaHeap(sizeof(LSA_TOKEN_INFORMATION_V1));
|
||||
if (Buffer == NULL)
|
||||
{
|
||||
TRACE("Failed to allocate the local buffer!\n");
|
||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* FIXME: */
|
||||
Buffer->ExpirationTime.QuadPart = -1;
|
||||
|
||||
Status = BuildTokenUser(&Buffer->User,
|
||||
(PSID)AccountDomainSid,
|
||||
RelativeId);
|
||||
if (!NT_SUCCESS(Status))
|
||||
goto done;
|
||||
|
||||
Status = BuildTokenGroups((PSID)AccountDomainSid,
|
||||
LogonId,
|
||||
&Buffer->Groups,
|
||||
&PrimaryGroupSid,
|
||||
&OwnerSid);
|
||||
if (!NT_SUCCESS(Status))
|
||||
goto done;
|
||||
|
||||
Status = BuildTokenPrimaryGroup(&Buffer->PrimaryGroup,
|
||||
PrimaryGroupSid);
|
||||
if (!NT_SUCCESS(Status))
|
||||
goto done;
|
||||
|
||||
Status = BuildTokenPrivileges(&Buffer->Privileges);
|
||||
if (!NT_SUCCESS(Status))
|
||||
goto done;
|
||||
|
||||
Status = BuildTokenOwner(&Buffer->Owner,
|
||||
OwnerSid);
|
||||
if (!NT_SUCCESS(Status))
|
||||
goto done;
|
||||
|
||||
Status = BuildTokenDefaultDacl(&Buffer->DefaultDacl,
|
||||
OwnerSid);
|
||||
if (!NT_SUCCESS(Status))
|
||||
goto done;
|
||||
|
||||
*TokenInformation = Buffer;
|
||||
|
||||
done:
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
if (Buffer != NULL)
|
||||
{
|
||||
if (Buffer->User.User.Sid != NULL)
|
||||
DispatchTable.FreeLsaHeap(Buffer->User.User.Sid);
|
||||
|
||||
if (Buffer->Groups != NULL)
|
||||
{
|
||||
for (i = 0; i < Buffer->Groups->GroupCount; i++)
|
||||
{
|
||||
if (Buffer->Groups->Groups[i].Sid != NULL)
|
||||
DispatchTable.FreeLsaHeap(Buffer->Groups->Groups[i].Sid);
|
||||
}
|
||||
|
||||
DispatchTable.FreeLsaHeap(Buffer->Groups);
|
||||
}
|
||||
|
||||
if (Buffer->PrimaryGroup.PrimaryGroup != NULL)
|
||||
DispatchTable.FreeLsaHeap(Buffer->PrimaryGroup.PrimaryGroup);
|
||||
|
||||
if (Buffer->Privileges != NULL)
|
||||
DispatchTable.FreeLsaHeap(Buffer->Privileges);
|
||||
|
||||
if (Buffer->Owner.Owner != NULL)
|
||||
DispatchTable.FreeLsaHeap(Buffer->Owner.Owner);
|
||||
|
||||
if (Buffer->DefaultDacl.DefaultDacl != NULL)
|
||||
DispatchTable.FreeLsaHeap(Buffer->DefaultDacl.DefaultDacl);
|
||||
|
||||
DispatchTable.FreeLsaHeap(Buffer);
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
@@ -504,7 +1021,34 @@ LsaApLogonUser(IN PLSA_CLIENT_REQUEST ClientRequest,
|
||||
/* Return the token information type */
|
||||
*TokenInformationType = LsaTokenInformationV1;
|
||||
|
||||
/* Build and fill the token information buffer */
|
||||
Status = BuildTokenInformationBuffer((PLSA_TOKEN_INFORMATION_V1*)TokenInformation,
|
||||
AccountDomainSid,
|
||||
RelativeIds.Element[0],
|
||||
LogonId);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
TRACE("BuildTokenInformationBuffer failed (Status %08lx)\n", Status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
*SubStatus = STATUS_SUCCESS;
|
||||
|
||||
done:
|
||||
/* Return the account name */
|
||||
*AccountName = DispatchTable.AllocateLsaHeap(sizeof(UNICODE_STRING));
|
||||
if (*AccountName != NULL)
|
||||
{
|
||||
(*AccountName)->Buffer = DispatchTable.AllocateLsaHeap(LogonInfo->UserName.Length +
|
||||
sizeof(UNICODE_NULL));
|
||||
if ((*AccountName)->Buffer != NULL)
|
||||
{
|
||||
(*AccountName)->MaximumLength = LogonInfo->UserName.Length +
|
||||
sizeof(UNICODE_NULL);
|
||||
RtlCopyUnicodeString(*AccountName, &LogonInfo->UserName);
|
||||
}
|
||||
}
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
if (*ProfileBuffer != NULL)
|
||||
|
||||
@@ -281,11 +281,16 @@ NTSTATUS
|
||||
WINAPI
|
||||
LsarClose(IN OUT LSAPR_HANDLE *ObjectHandle);
|
||||
|
||||
NTSTATUS
|
||||
WINAPI
|
||||
LsarLookupPrivilegeValue(IN LSAPR_HANDLE PolicyHandle,
|
||||
IN PRPC_UNICODE_STRING Name,
|
||||
OUT PLUID Value);
|
||||
|
||||
NTSTATUS
|
||||
WINAPI
|
||||
LsarQueryInformationPolicy(IN LSAPR_HANDLE PolicyHandle,
|
||||
IN POLICY_INFORMATION_CLASS InformationClass,
|
||||
OUT PLSAPR_POLICY_INFORMATION *PolicyInformation);
|
||||
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <winuser.h>
|
||||
#include <winnls.h>
|
||||
#include <windowsx.h>
|
||||
#include <wincon.h>
|
||||
#include <newdev.h>
|
||||
#include <regstr.h>
|
||||
#include <cfgmgr32.h>
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <winsvc.h>
|
||||
#include <winver.h>
|
||||
#include <wingdi.h>
|
||||
#include <wincon.h>
|
||||
#include <objbase.h>
|
||||
#include <lzexpand.h>
|
||||
#include <cfgmgr32.h>
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <wingdi.h>
|
||||
#include <winreg.h>
|
||||
#include <winuser.h>
|
||||
#include <wincon.h>
|
||||
#include <shellapi.h>
|
||||
#include <commdlg.h>
|
||||
#include <ddeml.h>
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
//#include "winuser.h"
|
||||
#include <winver.h>
|
||||
#include <winnetwk.h>
|
||||
#include <wincon.h>
|
||||
#include <mmsystem.h>
|
||||
//#include "objbase.h"
|
||||
//#include "exdisp.h"
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <winnls.h>
|
||||
#include <winuser.h>
|
||||
#include <windowsx.h>
|
||||
#include <wincon.h>
|
||||
#define NTOS_MODE_USER
|
||||
#include <ndk/cmfuncs.h>
|
||||
#include <ndk/rtlfuncs.h>
|
||||
|
||||
@@ -1374,57 +1374,13 @@ SetAutoDaylightInfo(HWND hwnd)
|
||||
static BOOL
|
||||
SetSystemLocalTime(HWND hwnd, PSETUPDATA SetupData)
|
||||
{
|
||||
HANDLE hToken;
|
||||
DWORD PrevSize;
|
||||
TOKEN_PRIVILEGES priv, previouspriv;
|
||||
BOOL Ret = FALSE;
|
||||
|
||||
/*
|
||||
* enable the SeSystemtimePrivilege privilege
|
||||
* Call SetLocalTime twice to ensure correct results
|
||||
*/
|
||||
|
||||
if(OpenProcessToken(GetCurrentProcess(),
|
||||
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
|
||||
&hToken))
|
||||
{
|
||||
priv.PrivilegeCount = 1;
|
||||
priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||
|
||||
if(LookupPrivilegeValue(NULL,
|
||||
SE_SYSTEMTIME_NAME,
|
||||
&priv.Privileges[0].Luid))
|
||||
{
|
||||
if(AdjustTokenPrivileges(hToken,
|
||||
FALSE,
|
||||
&priv,
|
||||
sizeof(previouspriv),
|
||||
&previouspriv,
|
||||
&PrevSize) &&
|
||||
GetLastError() == ERROR_SUCCESS)
|
||||
{
|
||||
/*
|
||||
* We successfully enabled it, we're permitted to change the system time
|
||||
* Call SetLocalTime twice to ensure correct results
|
||||
*/
|
||||
Ret = SetLocalTime(&SetupData->SystemTime) &&
|
||||
SetLocalTime(&SetupData->SystemTime);
|
||||
|
||||
/*
|
||||
* for the sake of security, restore the previous status again
|
||||
*/
|
||||
if(previouspriv.PrivilegeCount > 0)
|
||||
{
|
||||
AdjustTokenPrivileges(hToken,
|
||||
FALSE,
|
||||
&previouspriv,
|
||||
0,
|
||||
NULL,
|
||||
0);
|
||||
}
|
||||
}
|
||||
}
|
||||
CloseHandle(hToken);
|
||||
}
|
||||
Ret = SetLocalTime(&SetupData->SystemTime) &&
|
||||
SetLocalTime(&SetupData->SystemTime);
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
@@ -38,6 +38,10 @@ BeepDPC(IN PKDPC Dpc,
|
||||
{
|
||||
PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
|
||||
|
||||
UNREFERENCED_PARAMETER(Dpc);
|
||||
UNREFERENCED_PARAMETER(SystemArgument1);
|
||||
UNREFERENCED_PARAMETER(SystemArgument2);
|
||||
|
||||
/* Stop the beep */
|
||||
HalMakeBeep(0);
|
||||
|
||||
@@ -368,6 +372,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject,
|
||||
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\Beep");
|
||||
NTSTATUS Status;
|
||||
|
||||
UNREFERENCED_PARAMETER(RegistryPath);
|
||||
|
||||
/* Create the device */
|
||||
Status = IoCreateDevice(DriverObject,
|
||||
sizeof(DEVICE_EXTENSION),
|
||||
|
||||
@@ -458,7 +458,7 @@ HidClass_ReadCompleteIrp(
|
||||
// copy result status
|
||||
//
|
||||
IrpContext->OriginalIrp->IoStatus.Status = Irp->IoStatus.Status;
|
||||
Irp->IoStatus.Information = Irp->IoStatus.Information;
|
||||
IrpContext->OriginalIrp->IoStatus.Information = Irp->IoStatus.Information;
|
||||
|
||||
//
|
||||
// free input report buffer
|
||||
@@ -864,7 +864,7 @@ HidClass_DeviceControl(
|
||||
// invalid request
|
||||
//
|
||||
DPRINT1("[HIDCLASS] DeviceControl Irp for FDO arrived\n");
|
||||
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
|
||||
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER_1;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
return STATUS_INVALID_PARAMETER_1;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
NTSTATUS WarmSocketForBind( PAFD_FCB FCB, ULONG ShareType ) {
|
||||
NTSTATUS Status;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called (AF %d)\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Called (AF %u)\n",
|
||||
FCB->LocalAddress->Address[0].AddressType));
|
||||
|
||||
if( !FCB->TdiDeviceName.Length || !FCB->TdiDeviceName.Buffer ) {
|
||||
@@ -78,6 +78,8 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
PAFD_BIND_DATA BindReq;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called\n"));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
@@ -18,6 +18,8 @@ AfdGetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (FCB->ConnectOptionsSize == 0)
|
||||
@@ -47,6 +49,8 @@ AfdSetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PVOID ConnectOptions = LockRequest(Irp, IrpSp, FALSE, NULL);
|
||||
UINT ConnectOptionsSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!ConnectOptions)
|
||||
@@ -83,6 +87,8 @@ AfdSetConnectOptionsSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PUINT ConnectOptionsSize = LockRequest(Irp, IrpSp, FALSE, NULL);
|
||||
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!ConnectOptionsSize)
|
||||
@@ -118,6 +124,8 @@ AfdGetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (FCB->ConnectDataSize == 0)
|
||||
@@ -147,6 +155,8 @@ AfdSetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PVOID ConnectData = LockRequest(Irp, IrpSp, FALSE, NULL);
|
||||
UINT ConnectDataSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!ConnectData)
|
||||
@@ -182,6 +192,8 @@ AfdSetConnectDataSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PUINT ConnectDataSize = LockRequest(Irp, IrpSp, FALSE, NULL);
|
||||
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!ConnectDataSize)
|
||||
@@ -287,6 +299,7 @@ MakeSocketIntoConnection(PAFD_FCB FCB) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
static IO_COMPLETION_ROUTINE StreamSocketConnectComplete;
|
||||
static
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
@@ -297,7 +310,7 @@ StreamSocketConnectComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PLIST_ENTRY NextIrpEntry;
|
||||
PIRP NextIrp;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called: FCB %x, FO %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Called: FCB %p, FO %p\n",
|
||||
Context, FCB->FileObject));
|
||||
|
||||
/* I was wrong about this before as we can have pending writes to a not
|
||||
@@ -338,7 +351,7 @@ StreamSocketConnectComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_CONNECT] ) ) {
|
||||
NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_CONNECT]);
|
||||
NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry);
|
||||
AFD_DbgPrint(MID_TRACE,("Completing connect %x\n", NextIrp));
|
||||
AFD_DbgPrint(MID_TRACE,("Completing connect %p\n", NextIrp));
|
||||
NextIrp->IoStatus.Status = Status;
|
||||
NextIrp->IoStatus.Information = NT_SUCCESS(Status) ? ((ULONG_PTR)FCB->Connection.Handle) : 0;
|
||||
if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
|
||||
@@ -374,7 +387,7 @@ StreamSocketConnectComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]);
|
||||
NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP,
|
||||
Tail.Overlay.ListEntry);
|
||||
AFD_DbgPrint(MID_TRACE,("Launching send request %x\n", NextIrp));
|
||||
AFD_DbgPrint(MID_TRACE,("Launching send request %p\n", NextIrp));
|
||||
Status = AfdConnectedSocketWriteData
|
||||
( DeviceObject,
|
||||
NextIrp,
|
||||
@@ -403,7 +416,9 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
PAFD_CONNECT_INFO ConnectReq;
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
if( !(ConnectReq = LockRequest( Irp, IrpSp, FALSE, NULL )) )
|
||||
@@ -494,7 +509,7 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
|
||||
FCB->State = SOCKET_STATE_CONNECTING;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Queueing IRP %x\n", Irp));
|
||||
AFD_DbgPrint(MID_TRACE,("Queueing IRP %p\n", Irp));
|
||||
Status = QueueUserModeIrp( FCB, Irp, FUNCTION_CONNECT );
|
||||
if (Status == STATUS_PENDING)
|
||||
{
|
||||
@@ -517,7 +532,7 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
break;
|
||||
|
||||
default:
|
||||
AFD_DbgPrint(MIN_TRACE,("Inappropriate socket state %d for connect\n",
|
||||
AFD_DbgPrint(MIN_TRACE,("Inappropriate socket state %u for connect\n",
|
||||
FCB->State));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ AfdGetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
UINT ContextSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
if( FCB->ContextSize < ContextSize ) ContextSize = FCB->ContextSize;
|
||||
@@ -40,6 +42,8 @@ AfdGetContextSize( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
if (IrpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG))
|
||||
@@ -62,6 +66,8 @@ AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
PVOID Context = LockRequest(Irp, IrpSp, FALSE, NULL);
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
if (!Context)
|
||||
|
||||
@@ -18,7 +18,9 @@ AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
PLIST_ENTRY CurrentEntry;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called %x %x\n", InfoReq,
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called %p %x\n", InfoReq,
|
||||
InfoReq ? InfoReq->InformationClass : 0));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
@@ -34,13 +36,13 @@ AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
|
||||
case AFD_INFO_SEND_WINDOW_SIZE:
|
||||
InfoReq->Information.Ulong = FCB->Send.Size;
|
||||
AFD_DbgPrint(MID_TRACE,("Send window size %d\n", FCB->Send.Size));
|
||||
AFD_DbgPrint(MID_TRACE,("Send window size %u\n", FCB->Send.Size));
|
||||
break;
|
||||
|
||||
case AFD_INFO_GROUP_ID_TYPE:
|
||||
InfoReq->Information.LargeInteger.u.HighPart = FCB->GroupType;
|
||||
InfoReq->Information.LargeInteger.u.LowPart = FCB->GroupID;
|
||||
AFD_DbgPrint(MID_TRACE, ("Group ID: %d Group Type: %d\n", FCB->GroupID, FCB->GroupType));
|
||||
AFD_DbgPrint(MID_TRACE, ("Group ID: %u Group Type: %u\n", FCB->GroupID, FCB->GroupType));
|
||||
break;
|
||||
|
||||
case AFD_INFO_BLOCKING_MODE:
|
||||
@@ -104,6 +106,8 @@ AfdSetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
PCHAR NewBuffer;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!InfoReq)
|
||||
@@ -112,7 +116,7 @@ AfdSetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
_SEH2_TRY {
|
||||
switch (InfoReq->InformationClass) {
|
||||
case AFD_INFO_BLOCKING_MODE:
|
||||
AFD_DbgPrint(MID_TRACE,("Blocking mode set to %d\n", InfoReq->Information.Boolean));
|
||||
AFD_DbgPrint(MID_TRACE,("Blocking mode set to %u\n", InfoReq->Information.Boolean));
|
||||
FCB->NonBlocking = InfoReq->Information.Boolean;
|
||||
break;
|
||||
case AFD_INFO_INLINING_MODE:
|
||||
@@ -171,7 +175,7 @@ AfdSetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
}
|
||||
break;
|
||||
default:
|
||||
AFD_DbgPrint(MIN_TRACE,("Unknown request %d\n", InfoReq->InformationClass));
|
||||
AFD_DbgPrint(MIN_TRACE,("Unknown request %u\n", InfoReq->InformationClass));
|
||||
break;
|
||||
}
|
||||
} _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {
|
||||
@@ -192,6 +196,8 @@ AfdGetSockName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
PMDL Mdl = NULL;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
if( FCB->AddressFile.Object == NULL && FCB->Connection.Object == NULL ) {
|
||||
@@ -232,6 +238,7 @@ AfdGetPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
|
||||
@@ -16,11 +16,13 @@ static NTSTATUS SatisfyAccept( PAFD_DEVICE_EXTENSION DeviceExt,
|
||||
PAFD_FCB FCB = NewFileObject->FsContext;
|
||||
NTSTATUS Status;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceExt);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) )
|
||||
return LostSocket( Irp );
|
||||
|
||||
/* Transfer the connection to the new socket, launch the opening read */
|
||||
AFD_DbgPrint(MID_TRACE,("Completing a real accept (FCB %x)\n", FCB));
|
||||
AFD_DbgPrint(MID_TRACE,("Completing a real accept (FCB %p)\n", FCB));
|
||||
|
||||
FCB->Connection = Qelt->Object;
|
||||
|
||||
@@ -49,8 +51,8 @@ static NTSTATUS SatisfyPreAccept( PIRP Irp, PAFD_TDI_OBJECT_QELT Qelt ) {
|
||||
|
||||
ListenReceive->SequenceNumber = Qelt->Seq;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Giving SEQ %d to userland\n", Qelt->Seq));
|
||||
AFD_DbgPrint(MID_TRACE,("Socket Address (K) %x (U) %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Giving SEQ %u to userland\n", Qelt->Seq));
|
||||
AFD_DbgPrint(MID_TRACE,("Socket Address (K) %p (U) %p\n",
|
||||
&ListenReceive->Address,
|
||||
Qelt->ConnInfo->RemoteAddress));
|
||||
|
||||
@@ -61,9 +63,9 @@ static NTSTATUS SatisfyPreAccept( PIRP Irp, PAFD_TDI_OBJECT_QELT Qelt ) {
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("IPAddr->TAAddressCount %d\n",
|
||||
IPAddr->TAAddressCount));
|
||||
AFD_DbgPrint(MID_TRACE,("IPAddr->Address[0].AddressType %d\n",
|
||||
AFD_DbgPrint(MID_TRACE,("IPAddr->Address[0].AddressType %u\n",
|
||||
IPAddr->Address[0].AddressType));
|
||||
AFD_DbgPrint(MID_TRACE,("IPAddr->Address[0].AddressLength %d\n",
|
||||
AFD_DbgPrint(MID_TRACE,("IPAddr->Address[0].AddressLength %u\n",
|
||||
IPAddr->Address[0].AddressLength));
|
||||
AFD_DbgPrint(MID_TRACE,("IPAddr->Address[0].Address[0].sin_port %x\n",
|
||||
IPAddr->Address[0].Address[0].sin_port));
|
||||
@@ -79,6 +81,7 @@ static NTSTATUS SatisfyPreAccept( PIRP Irp, PAFD_TDI_OBJECT_QELT Qelt ) {
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static IO_COMPLETION_ROUTINE ListenComplete;
|
||||
static NTSTATUS NTAPI ListenComplete( PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp,
|
||||
PVOID Context ) {
|
||||
@@ -88,6 +91,8 @@ static NTSTATUS NTAPI ListenComplete( PDEVICE_OBJECT DeviceObject,
|
||||
PLIST_ENTRY NextIrpEntry;
|
||||
PIRP NextIrp;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) )
|
||||
return STATUS_FILE_CLOSED;
|
||||
|
||||
@@ -141,7 +146,7 @@ static NTSTATUS NTAPI ListenComplete( PDEVICE_OBJECT DeviceObject,
|
||||
|
||||
Qelt->Object = FCB->Connection;
|
||||
Qelt->Seq = FCB->ConnSeq++;
|
||||
AFD_DbgPrint(MID_TRACE,("Address Type: %d (RA %x)\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Address Type: %u (RA %p)\n",
|
||||
AddressType,
|
||||
FCB->ListenIrp.
|
||||
ConnectionReturnInfo->RemoteAddress));
|
||||
@@ -213,7 +218,9 @@ NTSTATUS AfdListenSocket( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
PAFD_LISTEN_DATA ListenReq;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
@@ -229,7 +236,7 @@ NTSTATUS AfdListenSocket( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
|
||||
FCB->DelayedAccept = ListenReq->UseDelayedAcceptance;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("ADDRESSFILE: %x\n", FCB->AddressFile.Handle));
|
||||
AFD_DbgPrint(MID_TRACE,("ADDRESSFILE: %p\n", FCB->AddressFile.Handle));
|
||||
|
||||
Status = WarmSocketForConnection( FCB );
|
||||
|
||||
@@ -277,6 +284,8 @@ NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
NTSTATUS Status;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called\n"));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
@@ -335,7 +344,7 @@ NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_TDI_OBJECT_QELT PendingConnObj =
|
||||
CONTAINING_RECORD( PendingConn, AFD_TDI_OBJECT_QELT, ListEntry );
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Comparing Seq %d to Q %d\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Comparing Seq %u to Q %u\n",
|
||||
AcceptData->SequenceNumber,
|
||||
PendingConnObj->Seq));
|
||||
|
||||
|
||||
@@ -14,6 +14,8 @@ PVOID GetLockedData(PIRP Irp, PIO_STACK_LOCATION IrpSp)
|
||||
ASSERT(Irp->MdlAddress);
|
||||
ASSERT(Irp->Tail.Overlay.DriverContext[0]);
|
||||
|
||||
UNREFERENCED_PARAMETER(IrpSp);
|
||||
|
||||
return Irp->Tail.Overlay.DriverContext[0];
|
||||
}
|
||||
|
||||
@@ -173,6 +175,8 @@ VOID UnlockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp )
|
||||
ASSERT(Irp->MdlAddress);
|
||||
ASSERT(Irp->Tail.Overlay.DriverContext[0]);
|
||||
|
||||
UNREFERENCED_PARAMETER(IrpSp);
|
||||
|
||||
/* Check if we need to copy stuff back */
|
||||
if (Irp->Tail.Overlay.DriverContext[1] != NULL)
|
||||
{
|
||||
@@ -203,7 +207,7 @@ PAFD_WSABUF LockBuffers( PAFD_WSABUF Buf, UINT Count,
|
||||
BOOLEAN LockFailed = FALSE;
|
||||
PAFD_MAPBUF MapBuf;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called(%08x)\n", NewBuf));
|
||||
AFD_DbgPrint(MID_TRACE,("Called(%p)\n", NewBuf));
|
||||
|
||||
if( NewBuf ) {
|
||||
RtlZeroMemory(NewBuf, Size);
|
||||
@@ -223,14 +227,14 @@ PAFD_WSABUF LockBuffers( PAFD_WSABUF Buf, UINT Count,
|
||||
}
|
||||
} _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {
|
||||
AFD_DbgPrint(MIN_TRACE,("Access violation copying buffer info "
|
||||
"from userland (%x %x)\n",
|
||||
"from userland (%p %p)\n",
|
||||
Buf, AddressLen));
|
||||
ExFreePool( NewBuf );
|
||||
_SEH2_YIELD(return NULL);
|
||||
} _SEH2_END;
|
||||
|
||||
for( i = 0; i < Count; i++ ) {
|
||||
AFD_DbgPrint(MID_TRACE,("Locking buffer %d (%x:%d)\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Locking buffer %u (%p:%u)\n",
|
||||
i, NewBuf[i].buf, NewBuf[i].len));
|
||||
|
||||
if( NewBuf[i].buf && NewBuf[i].len ) {
|
||||
@@ -244,7 +248,7 @@ PAFD_WSABUF LockBuffers( PAFD_WSABUF Buf, UINT Count,
|
||||
continue;
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("NewMdl @ %x\n", MapBuf[i].Mdl));
|
||||
AFD_DbgPrint(MID_TRACE,("NewMdl @ %p\n", MapBuf[i].Mdl));
|
||||
|
||||
if( MapBuf[i].Mdl ) {
|
||||
AFD_DbgPrint(MID_TRACE,("Probe and lock pages\n"));
|
||||
@@ -270,7 +274,7 @@ PAFD_WSABUF LockBuffers( PAFD_WSABUF Buf, UINT Count,
|
||||
}
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Leaving %x\n", NewBuf));
|
||||
AFD_DbgPrint(MID_TRACE,("Leaving %p\n", NewBuf));
|
||||
|
||||
return NewBuf;
|
||||
}
|
||||
|
||||
@@ -46,6 +46,8 @@ AfdGetDisconnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (FCB->DisconnectOptionsSize == 0)
|
||||
@@ -75,6 +77,8 @@ AfdSetDisconnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PVOID DisconnectOptions = LockRequest(Irp, IrpSp, FALSE, NULL);
|
||||
UINT DisconnectOptionsSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!DisconnectOptions)
|
||||
@@ -111,6 +115,8 @@ AfdSetDisconnectOptionsSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PUINT DisconnectOptionsSize = LockRequest(Irp, IrpSp, FALSE, NULL);
|
||||
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!DisconnectOptionsSize)
|
||||
@@ -145,6 +151,8 @@ AfdGetDisconnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (FCB->DisconnectDataSize == 0)
|
||||
@@ -175,6 +183,8 @@ AfdSetDisconnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PVOID DisconnectData = LockRequest(Irp, IrpSp, FALSE, NULL);
|
||||
UINT DisconnectDataSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!DisconnectData)
|
||||
@@ -211,6 +221,8 @@ AfdSetDisconnectDataSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PUINT DisconnectDataSize = LockRequest(Irp, IrpSp, FALSE, NULL);
|
||||
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!DisconnectDataSize)
|
||||
@@ -247,6 +259,8 @@ AfdGetTdiHandles(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PULONG HandleFlags = LockRequest(Irp, IrpSp, TRUE, NULL);
|
||||
PAFD_TDI_HANDLE_DATA HandleData = Irp->UserBuffer;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!HandleFlags)
|
||||
@@ -299,7 +313,7 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
|
||||
//EaLength = sizeof(FILE_FULL_EA_INFORMATION) + EaInfo->EaNameLength + EaInfo->EaValueLength;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("EaInfo: %x, EaInfoValue: %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("EaInfo: %p, EaInfoValue: %p\n",
|
||||
EaInfo, EaInfoValue));
|
||||
}
|
||||
|
||||
@@ -312,7 +326,7 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Initializing the new FCB @ %x (FileObject %x Flags %x)\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Initializing the new FCB @ %p (FileObject %p Flags %x)\n",
|
||||
FCB, FileObject, ConnectInfo ? ConnectInfo->EndpointFlags : 0));
|
||||
|
||||
RtlZeroMemory( FCB, sizeof( *FCB ) );
|
||||
@@ -335,7 +349,7 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
InitializeListHead( &FCB->DatagramList );
|
||||
InitializeListHead( &FCB->PendingConnections );
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("%x: Checking command channel\n", FCB));
|
||||
AFD_DbgPrint(MID_TRACE,("%p: Checking command channel\n", FCB));
|
||||
|
||||
if( ConnectInfo ) {
|
||||
FCB->TdiDeviceName.Length = ConnectInfo->SizeOfTransportName;
|
||||
@@ -395,6 +409,8 @@ AfdCleanupSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
UINT Function;
|
||||
PIRP CurrentIrp;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket(Irp);
|
||||
|
||||
for (Function = 0; Function < MAX_FUNCTIONS; Function++)
|
||||
@@ -445,7 +461,7 @@ AfdCloseSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
/* Cancel our pending requests */
|
||||
for( i = 0; i < IN_FLIGHT_REQUESTS; i++ ) {
|
||||
if( InFlightRequest[i]->InFlightRequest ) {
|
||||
AFD_DbgPrint(MID_TRACE,("Cancelling in flight irp %d (%x)\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Cancelling in flight irp %u (%p)\n",
|
||||
i, InFlightRequest[i]->InFlightRequest));
|
||||
IoCancelIrp(InFlightRequest[i]->InFlightRequest);
|
||||
}
|
||||
@@ -526,7 +542,7 @@ AfdCloseSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
{
|
||||
if (ZwClose(FCB->AddressFile.Handle) == STATUS_INVALID_HANDLE)
|
||||
{
|
||||
DbgPrint("INVALID ADDRESS FILE HANDLE VALUE: %x %x\n", FCB->AddressFile.Handle, FCB->AddressFile.Object);
|
||||
DbgPrint("INVALID ADDRESS FILE HANDLE VALUE: %p %p\n", FCB->AddressFile.Handle, FCB->AddressFile.Object);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -534,7 +550,7 @@ AfdCloseSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
{
|
||||
if (ZwClose(FCB->Connection.Handle) == STATUS_INVALID_HANDLE)
|
||||
{
|
||||
DbgPrint("INVALID CONNECTION HANDLE VALUE: %x %x\n", FCB->Connection.Handle, FCB->Connection.Object);
|
||||
DbgPrint("INVALID CONNECTION HANDLE VALUE: %p %p\n", FCB->Connection.Handle, FCB->Connection.Object);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -552,6 +568,7 @@ AfdCloseSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static IO_COMPLETION_ROUTINE DisconnectComplete;
|
||||
static
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
@@ -563,6 +580,8 @@ DisconnectComplete(PDEVICE_OBJECT DeviceObject,
|
||||
PIRP CurrentIrp;
|
||||
PLIST_ENTRY CurrentEntry;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB))
|
||||
return STATUS_FILE_CLOSED;
|
||||
|
||||
@@ -679,6 +698,8 @@ AfdDisconnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PLIST_ENTRY CurrentEntry;
|
||||
PIRP CurrentIrp;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
|
||||
|
||||
if (!(DisReq = LockRequest(Irp, IrpSp, FALSE, NULL)))
|
||||
@@ -809,6 +830,7 @@ AfdDisconnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
return UnlockAndMaybeComplete( FCB, Status, Irp, 0 );
|
||||
}
|
||||
|
||||
static DRIVER_DISPATCH AfdDispatch;
|
||||
static NTSTATUS NTAPI
|
||||
AfdDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||
{
|
||||
@@ -818,9 +840,9 @@ AfdDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
|
||||
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||
#endif
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("AfdDispatch: %d\n", IrpSp->MajorFunction));
|
||||
AFD_DbgPrint(MID_TRACE,("AfdDispatch: %u\n", IrpSp->MajorFunction));
|
||||
if( IrpSp->MajorFunction != IRP_MJ_CREATE) {
|
||||
AFD_DbgPrint(MID_TRACE,("FO %x, IrpSp->FO %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("FO %p, IrpSp->FO %p\n",
|
||||
FileObject, IrpSp->FileObject));
|
||||
ASSERT(FileObject == IrpSp->FileObject);
|
||||
}
|
||||
@@ -1082,7 +1104,8 @@ CleanupPendingIrp(PAFD_FCB FCB, PIRP Irp, PIO_STACK_LOCATION IrpSp, PAFD_ACTIVE_
|
||||
}
|
||||
}
|
||||
|
||||
VOID NTAPI
|
||||
VOID
|
||||
NTAPI
|
||||
AfdCancelHandler(PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp)
|
||||
{
|
||||
@@ -1199,12 +1222,14 @@ AfdCancelHandler(PDEVICE_OBJECT DeviceObject,
|
||||
|
||||
SocketStateUnlock(FCB);
|
||||
|
||||
DbgPrint("WARNING!!! IRP cancellation race could lead to a process hang! (Function: %d)\n", Function);
|
||||
DbgPrint("WARNING!!! IRP cancellation race could lead to a process hang! (Function: %u)\n", Function);
|
||||
}
|
||||
|
||||
static DRIVER_UNLOAD AfdUnload;
|
||||
static VOID NTAPI
|
||||
AfdUnload(PDRIVER_OBJECT DriverObject)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(DriverObject);
|
||||
}
|
||||
|
||||
NTSTATUS NTAPI
|
||||
@@ -1215,6 +1240,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
|
||||
PAFD_DEVICE_EXTENSION DeviceExt;
|
||||
NTSTATUS Status;
|
||||
|
||||
UNREFERENCED_PARAMETER(RegistryPath);
|
||||
/* register driver routines */
|
||||
DriverObject->MajorFunction[IRP_MJ_CLOSE] = AfdDispatch;
|
||||
DriverObject->MajorFunction[IRP_MJ_CREATE] = AfdDispatch;
|
||||
@@ -1242,7 +1268,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
|
||||
KeInitializeSpinLock( &DeviceExt->Lock );
|
||||
InitializeListHead( &DeviceExt->Polls );
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Device created: object %x ext %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Device created: object %p ext %p\n",
|
||||
DeviceObject, DeviceExt));
|
||||
|
||||
return Status;
|
||||
|
||||
@@ -101,15 +101,14 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB,
|
||||
*TotalBytesCopied = 0;
|
||||
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called, BytesAvailable = %d\n",
|
||||
BytesAvailable));
|
||||
AFD_DbgPrint(MID_TRACE,("Called, BytesAvailable = %u\n", BytesAvailable));
|
||||
|
||||
if( CantReadMore(FCB) ) return STATUS_SUCCESS;
|
||||
if( !BytesAvailable ) return STATUS_PENDING;
|
||||
|
||||
Map = (PAFD_MAPBUF)(RecvReq->BufferArray + RecvReq->BufferCount);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Buffer Count: %d @ %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Buffer Count: %u @ %p\n",
|
||||
RecvReq->BufferCount,
|
||||
RecvReq->BufferArray));
|
||||
for( i = 0;
|
||||
@@ -123,7 +122,7 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB,
|
||||
if( Map[i].Mdl ) {
|
||||
Map[i].BufferAddress = MmMapLockedPages( Map[i].Mdl, KernelMode );
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Buffer %d: %x:%d\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Buffer %u: %p:%u\n",
|
||||
i,
|
||||
Map[i].BufferAddress,
|
||||
BytesToCopy));
|
||||
@@ -157,9 +156,9 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
|
||||
UINT TotalBytesCopied = 0, RetBytesCopied = 0;
|
||||
NTSTATUS Status = STATUS_SUCCESS, RetStatus = STATUS_PENDING;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("%x %x\n", FCB, Irp));
|
||||
AFD_DbgPrint(MID_TRACE,("%p %p\n", FCB, Irp));
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("FCB %x Receive data waiting %d\n",
|
||||
AFD_DbgPrint(MID_TRACE,("FCB %p Receive data waiting %u\n",
|
||||
FCB, FCB->Recv.Content));
|
||||
|
||||
if( CantReadMore( FCB ) ) {
|
||||
@@ -172,7 +171,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
|
||||
NextIrpSp = IoGetCurrentIrpStackLocation( NextIrp );
|
||||
RecvReq = GetLockedData(NextIrp, NextIrpSp);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Completing recv %x (%d)\n", NextIrp,
|
||||
AFD_DbgPrint(MID_TRACE,("Completing recv %p (%u)\n", NextIrp,
|
||||
TotalBytesCopied));
|
||||
UnlockBuffers( RecvReq->BufferArray,
|
||||
RecvReq->BufferCount, FALSE );
|
||||
@@ -198,7 +197,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
|
||||
/* Kick the user that receive would be possible now */
|
||||
/* XXX Not implemented yet */
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("FCB %x Receive data waiting %d\n",
|
||||
AFD_DbgPrint(MID_TRACE,("FCB %p Receive data waiting %u\n",
|
||||
FCB, FCB->Recv.Content));
|
||||
/*OskitDumpBuffer( FCB->Recv.Window, FCB->Recv.Content );*/
|
||||
|
||||
@@ -209,18 +208,18 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
|
||||
NextIrpSp = IoGetCurrentIrpStackLocation( NextIrp );
|
||||
RecvReq = GetLockedData(NextIrp, NextIrpSp);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("RecvReq @ %x\n", RecvReq));
|
||||
AFD_DbgPrint(MID_TRACE,("RecvReq @ %p\n", RecvReq));
|
||||
|
||||
Status = TryToSatisfyRecvRequestFromBuffer
|
||||
( FCB, RecvReq, &TotalBytesCopied );
|
||||
|
||||
if( Status == STATUS_PENDING ) {
|
||||
AFD_DbgPrint(MID_TRACE,("Ran out of data for %x\n", NextIrp));
|
||||
AFD_DbgPrint(MID_TRACE,("Ran out of data for %p\n", NextIrp));
|
||||
InsertHeadList(&FCB->PendingIrpList[FUNCTION_RECV],
|
||||
&NextIrp->Tail.Overlay.ListEntry);
|
||||
break;
|
||||
} else {
|
||||
AFD_DbgPrint(MID_TRACE,("Completing recv %x (%d)\n", NextIrp,
|
||||
AFD_DbgPrint(MID_TRACE,("Completing recv %p (%u)\n", NextIrp,
|
||||
TotalBytesCopied));
|
||||
UnlockBuffers( RecvReq->BufferArray,
|
||||
RecvReq->BufferCount, FALSE );
|
||||
@@ -263,7 +262,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) {
|
||||
PollReeval(FCB->DeviceExt, FCB->FileObject);
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("RetStatus for irp %x is %x\n", Irp, RetStatus));
|
||||
AFD_DbgPrint(MID_TRACE,("RetStatus for irp %p is %x\n", Irp, RetStatus));
|
||||
|
||||
/* Sometimes we're called with a NULL Irp */
|
||||
if( Irp ) {
|
||||
@@ -284,6 +283,8 @@ NTSTATUS NTAPI ReceiveComplete
|
||||
PAFD_RECV_INFO RecvReq;
|
||||
PIO_STACK_LOCATION NextIrpSp;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called\n"));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) )
|
||||
@@ -341,7 +342,7 @@ SatisfyPacketRecvRequest( PAFD_FCB FCB, PIRP Irp,
|
||||
|
||||
BytesToCopy = MIN( RecvReq->BufferArray[0].len, BytesAvailable );
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("BytesToCopy: %d len %d\n", BytesToCopy,
|
||||
AFD_DbgPrint(MID_TRACE,("BytesToCopy: %u len %u\n", BytesToCopy,
|
||||
RecvReq->BufferArray[0].len));
|
||||
|
||||
if( Map[0].Mdl ) {
|
||||
@@ -362,7 +363,7 @@ SatisfyPacketRecvRequest( PAFD_FCB FCB, PIRP Irp,
|
||||
sizeof(USHORT),
|
||||
RecvReq->BufferArray[1].len);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Copying %d bytes of address\n", AddrLen));
|
||||
AFD_DbgPrint(MID_TRACE,("Copying %u bytes of address\n", AddrLen));
|
||||
|
||||
Map[1].BufferAddress = MmMapLockedPages( Map[1].Mdl, KernelMode );
|
||||
|
||||
@@ -385,7 +386,7 @@ SatisfyPacketRecvRequest( PAFD_FCB FCB, PIRP Irp,
|
||||
|
||||
Map[0].BufferAddress = MmMapLockedPages( Map[0].Mdl, KernelMode );
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Buffer %d: %x:%d\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Buffer %d: %p:%u\n",
|
||||
0,
|
||||
Map[0].BufferAddress,
|
||||
BytesToCopy));
|
||||
@@ -436,7 +437,10 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PLIST_ENTRY ListEntry;
|
||||
KPROCESSOR_MODE LockMode;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
UNREFERENCED_PARAMETER(Short);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
@@ -558,7 +562,9 @@ PacketSocketRecvComplete(
|
||||
UINT DGSize = Irp->IoStatus.Information + sizeof( AFD_STORED_DATAGRAM );
|
||||
PLIST_ENTRY NextIrpEntry, DatagramRecvEntry;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) )
|
||||
return STATUS_FILE_CLOSED;
|
||||
@@ -611,7 +617,7 @@ PacketSocketRecvComplete(
|
||||
DatagramRecv->Len = Irp->IoStatus.Information;
|
||||
RtlCopyMemory( DatagramRecv->Buffer, FCB->Recv.Window,
|
||||
DatagramRecv->Len );
|
||||
AFD_DbgPrint(MID_TRACE,("Received (A %x)\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Received (A %p)\n",
|
||||
FCB->AddressFrom->RemoteAddress));
|
||||
DatagramRecv->Address =
|
||||
TaCopyTransportAddress( FCB->AddressFrom->RemoteAddress );
|
||||
@@ -642,7 +648,7 @@ PacketSocketRecvComplete(
|
||||
NextIrpSp = IoGetCurrentIrpStackLocation( NextIrp );
|
||||
RecvReq = GetLockedData(NextIrp, NextIrpSp);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("RecvReq: %x, DatagramRecv: %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("RecvReq: %p, DatagramRecv: %p\n",
|
||||
RecvReq, DatagramRecv));
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Satisfying\n"));
|
||||
@@ -705,7 +711,9 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_STORED_DATAGRAM DatagramRecv;
|
||||
KPROCESSOR_MODE LockMode;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
|
||||
@@ -91,7 +91,8 @@ VOID SignalSocket(
|
||||
AFD_DbgPrint(MID_TRACE,("Done\n"));
|
||||
}
|
||||
|
||||
static VOID SelectTimeout( PKDPC Dpc,
|
||||
static KDEFERRED_ROUTINE SelectTimeout;
|
||||
static VOID NTAPI SelectTimeout( PKDPC Dpc,
|
||||
PVOID DeferredContext,
|
||||
PVOID SystemArgument1,
|
||||
PVOID SystemArgument2 ) {
|
||||
@@ -101,6 +102,10 @@ static VOID SelectTimeout( PKDPC Dpc,
|
||||
KIRQL OldIrql;
|
||||
PAFD_DEVICE_EXTENSION DeviceExt;
|
||||
|
||||
UNREFERENCED_PARAMETER(Dpc);
|
||||
UNREFERENCED_PARAMETER(SystemArgument1);
|
||||
UNREFERENCED_PARAMETER(SystemArgument2);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called\n"));
|
||||
|
||||
Irp = Poll->Irp;
|
||||
@@ -127,7 +132,7 @@ VOID KillSelectsForFCB( PAFD_DEVICE_EXTENSION DeviceExt,
|
||||
PAFD_HANDLE HandleArray;
|
||||
UINT i;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Killing selects that refer to %x\n", FileObject));
|
||||
AFD_DbgPrint(MID_TRACE,("Killing selects that refer to %p\n", FileObject));
|
||||
|
||||
KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
|
||||
|
||||
@@ -140,7 +145,7 @@ VOID KillSelectsForFCB( PAFD_DEVICE_EXTENSION DeviceExt,
|
||||
HandleArray = AFD_HANDLES(PollReq);
|
||||
|
||||
for( i = 0; i < PollReq->HandleCount; i++ ) {
|
||||
AFD_DbgPrint(MAX_TRACE,("Req: %x, This %x\n",
|
||||
AFD_DbgPrint(MAX_TRACE,("Req: %u, This %p\n",
|
||||
HandleArray[i].Handle, FileObject));
|
||||
if( (PVOID)HandleArray[i].Handle == FileObject &&
|
||||
(!OnlyExclusive || (OnlyExclusive && Poll->Exclusive)) ) {
|
||||
@@ -167,7 +172,9 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
UINT i, Signalled = 0;
|
||||
ULONG Exclusive = PollReq->Exclusive;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called (HandleCount %d Timeout %d)\n",
|
||||
UNREFERENCED_PARAMETER(IrpSp);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called (HandleCount %u Timeout %d)\n",
|
||||
PollReq->HandleCount,
|
||||
(INT)(PollReq->Timeout.QuadPart)));
|
||||
|
||||
@@ -206,7 +213,7 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PollReq->Handles[i].Status =
|
||||
PollReq->Handles[i].Events & FCB->PollState;
|
||||
if( PollReq->Handles[i].Status ) {
|
||||
AFD_DbgPrint(MID_TRACE,("Signalling %x with %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Signalling %p with %x\n",
|
||||
FCB, FCB->PollState));
|
||||
Signalled++;
|
||||
}
|
||||
@@ -229,9 +236,7 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
|
||||
KeInitializeTimerEx( &Poll->Timer, NotificationTimer );
|
||||
|
||||
KeInitializeDpc( (PRKDPC)&Poll->TimeoutDpc,
|
||||
(PKDEFERRED_ROUTINE)SelectTimeout,
|
||||
Poll );
|
||||
KeInitializeDpc( (PRKDPC)&Poll->TimeoutDpc, SelectTimeout, Poll );
|
||||
|
||||
InsertTailList( &DeviceExt->Polls, &Poll->ListEntry );
|
||||
|
||||
@@ -262,6 +267,8 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
(PAFD_EVENT_SELECT_INFO)LockRequest( Irp, IrpSp, FALSE, NULL );
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) {
|
||||
return LostSocket( Irp );
|
||||
}
|
||||
@@ -270,7 +277,7 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
|
||||
0 );
|
||||
}
|
||||
AFD_DbgPrint(MID_TRACE,("Called (Event %x Triggers %x)\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Called (Event %p Triggers %u)\n",
|
||||
EventSelectInfo->EventObject,
|
||||
EventSelectInfo->Events));
|
||||
|
||||
@@ -302,7 +309,7 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
if((FCB->EventSelect) &&
|
||||
(FCB->PollState & (FCB->EventSelectTriggers & ~FCB->EventSelectDisabled)))
|
||||
{
|
||||
AFD_DbgPrint(MID_TRACE,("Setting event %x\n", FCB->EventSelect));
|
||||
AFD_DbgPrint(MID_TRACE,("Setting event %p\n", FCB->EventSelect));
|
||||
|
||||
/* Set the application's event */
|
||||
KeSetEvent( FCB->EventSelect, IO_NETWORK_INCREMENT, FALSE );
|
||||
@@ -324,7 +331,9 @@ AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PKEVENT UserEvent;
|
||||
NTSTATUS Status;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called (FCB %x)\n", FCB));
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called (FCB %p)\n", FCB));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) {
|
||||
return LostSocket( Irp );
|
||||
@@ -379,7 +388,7 @@ static BOOLEAN UpdatePollWithFCB( PAFD_ACTIVE_POLL Poll, PFILE_OBJECT FileObject
|
||||
|
||||
PollReq->Handles[i].Status = PollReq->Handles[i].Events & FCB->PollState;
|
||||
if( PollReq->Handles[i].Status ) {
|
||||
AFD_DbgPrint(MID_TRACE,("Signalling %x with %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Signalling %p with %x\n",
|
||||
FCB, FCB->PollState));
|
||||
Signalled++;
|
||||
}
|
||||
@@ -395,7 +404,7 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) {
|
||||
KIRQL OldIrql;
|
||||
PAFD_POLL_INFO PollReq;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called: DeviceExt %x FileObject %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Called: DeviceExt %p FileObject %p\n",
|
||||
DeviceExt, FileObject));
|
||||
|
||||
KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
|
||||
@@ -414,7 +423,7 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) {
|
||||
while( ThePollEnt != &DeviceExt->Polls ) {
|
||||
Poll = CONTAINING_RECORD( ThePollEnt, AFD_ACTIVE_POLL, ListEntry );
|
||||
PollReq = Poll->Irp->AssociatedIrp.SystemBuffer;
|
||||
AFD_DbgPrint(MID_TRACE,("Checking poll %x\n", Poll));
|
||||
AFD_DbgPrint(MID_TRACE,("Checking poll %p\n", Poll));
|
||||
|
||||
if( UpdatePollWithFCB( Poll, FileObject ) ) {
|
||||
ThePollEnt = ThePollEnt->Flink;
|
||||
@@ -429,7 +438,7 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) {
|
||||
if((FCB->EventSelect) &&
|
||||
(FCB->PollState & (FCB->EventSelectTriggers & ~FCB->EventSelectDisabled)))
|
||||
{
|
||||
AFD_DbgPrint(MID_TRACE,("Setting event %x\n", FCB->EventSelect));
|
||||
AFD_DbgPrint(MID_TRACE,("Setting event %p\n", FCB->EventSelect));
|
||||
|
||||
/* Set the application's event */
|
||||
KeSetEvent( FCB->EventSelect, IO_NETWORK_INCREMENT, FALSE );
|
||||
|
||||
@@ -64,7 +64,7 @@ static NTSTATUS TdiCall(
|
||||
|
||||
AFD_DbgPrint(MID_TRACE, ("Called\n"));
|
||||
|
||||
AFD_DbgPrint(MID_TRACE, ("Irp->UserEvent = %x\n", Irp->UserEvent));
|
||||
AFD_DbgPrint(MID_TRACE, ("Irp->UserEvent = %p\n", Irp->UserEvent));
|
||||
|
||||
Status = IoCallDriver(DeviceObject, Irp);
|
||||
AFD_DbgPrint(MID_TRACE, ("IoCallDriver: %08x\n", Status));
|
||||
@@ -109,7 +109,7 @@ static NTSTATUS TdiOpenDevice(
|
||||
NTSTATUS Status;
|
||||
ULONG ShareAccess;
|
||||
|
||||
AFD_DbgPrint(MAX_TRACE, ("Called. DeviceName (%wZ, %d)\n", DeviceName, ShareType));
|
||||
AFD_DbgPrint(MAX_TRACE, ("Called. DeviceName (%wZ, %u)\n", DeviceName, ShareType));
|
||||
|
||||
/* Determine the share access */
|
||||
if (ShareType != AFD_SHARE_REUSE)
|
||||
@@ -152,7 +152,7 @@ static NTSTATUS TdiOpenDevice(
|
||||
AFD_DbgPrint(MIN_TRACE, ("ObReferenceObjectByHandle() failed with status (0x%X).\n", Status));
|
||||
ZwClose(*Handle);
|
||||
} else {
|
||||
AFD_DbgPrint(MAX_TRACE, ("Got handle (0x%X) Object (0x%X)\n",
|
||||
AFD_DbgPrint(MAX_TRACE, ("Got handle (%p) Object (%p)\n",
|
||||
*Handle, *Object));
|
||||
}
|
||||
} else {
|
||||
@@ -189,7 +189,7 @@ NTSTATUS TdiOpenAddressFile(
|
||||
ULONG EaLength;
|
||||
PTRANSPORT_ADDRESS Address;
|
||||
|
||||
AFD_DbgPrint(MAX_TRACE, ("Called. DeviceName (%wZ) Name (0x%X)\n",
|
||||
AFD_DbgPrint(MAX_TRACE, ("Called. DeviceName (%wZ) Name (%p)\n",
|
||||
DeviceName, Name));
|
||||
|
||||
/* EaName must be 0-terminated, even though TDI_TRANSPORT_ADDRESS_LENGTH does *not* include the 0 */
|
||||
@@ -399,7 +399,7 @@ NTSTATUS TdiAssociateAddressFile(
|
||||
KEVENT Event;
|
||||
PIRP Irp;
|
||||
|
||||
AFD_DbgPrint(MAX_TRACE, ("Called. AddressHandle (0x%X) ConnectionObject (0x%X)\n",
|
||||
AFD_DbgPrint(MAX_TRACE, ("Called. AddressHandle (%p) ConnectionObject (%p)\n",
|
||||
AddressHandle, ConnectionObject));
|
||||
|
||||
if (!ConnectionObject) {
|
||||
@@ -448,7 +448,7 @@ NTSTATUS TdiDisassociateAddressFile(
|
||||
KEVENT Event;
|
||||
PIRP Irp;
|
||||
|
||||
AFD_DbgPrint(MAX_TRACE, ("Called. ConnectionObject (0x%X)\n", ConnectionObject));
|
||||
AFD_DbgPrint(MAX_TRACE, ("Called. ConnectionObject (%p)\n", ConnectionObject));
|
||||
|
||||
if (!ConnectionObject) {
|
||||
AFD_DbgPrint(MIN_TRACE, ("Bad connection object.\n"));
|
||||
@@ -803,7 +803,7 @@ NTSTATUS TdiQueryAddress(
|
||||
/* Locate an IP entity */
|
||||
EntityCount = BufferSize / sizeof(TDIEntityID);
|
||||
|
||||
AFD_DbgPrint(MAX_TRACE, ("EntityCount = %d\n", EntityCount));
|
||||
AFD_DbgPrint(MAX_TRACE, ("EntityCount = %u\n", EntityCount));
|
||||
|
||||
for (i = 0; i < EntityCount; i++) {
|
||||
if (Entities[i].tei_entity == CL_NL_ENTITY) {
|
||||
@@ -923,7 +923,7 @@ NTSTATUS TdiSend(
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE, ("Allocating irp for %x:%d\n", Buffer,BufferLength));
|
||||
AFD_DbgPrint(MID_TRACE, ("Allocating irp for %p:%u\n", Buffer,BufferLength));
|
||||
|
||||
Mdl = IoAllocateMdl(Buffer, /* Virtual address */
|
||||
BufferLength, /* Length of buffer */
|
||||
@@ -947,7 +947,7 @@ NTSTATUS TdiSend(
|
||||
_SEH2_YIELD(return STATUS_INSUFFICIENT_RESOURCES);
|
||||
} _SEH2_END;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl));
|
||||
AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %p\n", Mdl));
|
||||
|
||||
TdiBuildSend(*Irp, /* I/O Request Packet */
|
||||
DeviceObject, /* Device object */
|
||||
@@ -1002,7 +1002,7 @@ NTSTATUS TdiReceive(
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE, ("Allocating irp for %x:%d\n", Buffer,BufferLength));
|
||||
AFD_DbgPrint(MID_TRACE, ("Allocating irp for %p:%u\n", Buffer,BufferLength));
|
||||
|
||||
Mdl = IoAllocateMdl(Buffer, /* Virtual address */
|
||||
BufferLength, /* Length of buffer */
|
||||
@@ -1028,7 +1028,7 @@ NTSTATUS TdiReceive(
|
||||
_SEH2_YIELD(return STATUS_INSUFFICIENT_RESOURCES);
|
||||
} _SEH2_END;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl));
|
||||
AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %p\n", Mdl));
|
||||
|
||||
TdiBuildReceive(*Irp, /* I/O Request Packet */
|
||||
DeviceObject, /* Device object */
|
||||
@@ -1097,7 +1097,7 @@ NTSTATUS TdiReceiveDatagram(
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE, ("Allocating irp for %x:%d\n", Buffer,BufferLength));
|
||||
AFD_DbgPrint(MID_TRACE, ("Allocating irp for %p:%u\n", Buffer,BufferLength));
|
||||
|
||||
Mdl = IoAllocateMdl(Buffer, /* Virtual address */
|
||||
BufferLength, /* Length of buffer */
|
||||
@@ -1121,7 +1121,7 @@ NTSTATUS TdiReceiveDatagram(
|
||||
_SEH2_YIELD(return STATUS_INSUFFICIENT_RESOURCES);
|
||||
} _SEH2_END;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl));
|
||||
AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %p\n", Mdl));
|
||||
|
||||
TdiBuildReceiveDatagram(*Irp, /* I/O Request Packet */
|
||||
DeviceObject, /* Device object */
|
||||
@@ -1173,7 +1173,7 @@ NTSTATUS TdiSendDatagram(
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called(TransportObject %x)\n", TransportObject));
|
||||
AFD_DbgPrint(MID_TRACE,("Called(TransportObject %p)\n", TransportObject));
|
||||
|
||||
DeviceObject = IoGetRelatedDeviceObject(TransportObject);
|
||||
if (!DeviceObject) {
|
||||
@@ -1192,7 +1192,7 @@ NTSTATUS TdiSendDatagram(
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE, ("Allocating irp for %x:%d\n", Buffer,BufferLength));
|
||||
AFD_DbgPrint(MID_TRACE, ("Allocating irp for %p:%u\n", Buffer,BufferLength));
|
||||
|
||||
Mdl = IoAllocateMdl(Buffer, /* Virtual address */
|
||||
BufferLength, /* Length of buffer */
|
||||
@@ -1217,7 +1217,7 @@ NTSTATUS TdiSendDatagram(
|
||||
_SEH2_YIELD(return STATUS_INSUFFICIENT_RESOURCES);
|
||||
} _SEH2_END;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl));
|
||||
AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %p\n", Mdl));
|
||||
|
||||
TdiBuildSendDatagram(*Irp, /* I/O Request Packet */
|
||||
DeviceObject, /* Device object */
|
||||
@@ -1252,7 +1252,7 @@ NTSTATUS TdiDisconnect(
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called(TransportObject %x)\n", TransportObject));
|
||||
AFD_DbgPrint(MID_TRACE,("Called(TransportObject %p)\n", TransportObject));
|
||||
|
||||
DeviceObject = IoGetRelatedDeviceObject(TransportObject);
|
||||
if (!DeviceObject) {
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
#include "afd.h"
|
||||
|
||||
static IO_COMPLETION_ROUTINE SendComplete;
|
||||
static NTSTATUS NTAPI SendComplete
|
||||
( PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp,
|
||||
@@ -24,6 +25,8 @@ static NTSTATUS NTAPI SendComplete
|
||||
UINT SendLength, BytesCopied;
|
||||
BOOLEAN HaltSendQueue;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
/*
|
||||
* The Irp parameter passed in is the IRP of the stream between AFD and
|
||||
* TDI driver. It's not very usefull to us. We need the IRPs of the stream
|
||||
@@ -33,7 +36,7 @@ static NTSTATUS NTAPI SendComplete
|
||||
* processed).
|
||||
*/
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called, status %x, %d bytes used\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Called, status %x, %u bytes used\n",
|
||||
Irp->IoStatus.Status,
|
||||
Irp->IoStatus.Information));
|
||||
|
||||
@@ -159,7 +162,7 @@ static NTSTATUS NTAPI SendComplete
|
||||
SendReq = GetLockedData(NextIrp, NextIrpSp);
|
||||
Map = (PAFD_MAPBUF)(SendReq->BufferArray + SendReq->BufferCount);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("SendReq @ %x\n", SendReq));
|
||||
AFD_DbgPrint(MID_TRACE,("SendReq @ %p\n", SendReq));
|
||||
|
||||
SpaceAvail = FCB->Send.Size - FCB->Send.BytesUsed;
|
||||
TotalBytesCopied = 0;
|
||||
@@ -254,6 +257,7 @@ static NTSTATUS NTAPI SendComplete
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static IO_COMPLETION_ROUTINE PacketSocketSendComplete;
|
||||
static NTSTATUS NTAPI PacketSocketSendComplete
|
||||
( PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp,
|
||||
@@ -263,7 +267,9 @@ static NTSTATUS NTAPI PacketSocketSendComplete
|
||||
PIRP NextIrp;
|
||||
PAFD_SEND_INFO SendReq;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called, status %x, %d bytes used\n",
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called, status %x, %u bytes used\n",
|
||||
Irp->IoStatus.Status,
|
||||
Irp->IoStatus.Information));
|
||||
|
||||
@@ -329,7 +335,10 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
UINT TotalBytesCopied = 0, i, SpaceAvail = 0, BytesCopied, SendLength;
|
||||
KPROCESSOR_MODE LockMode;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
UNREFERENCED_PARAMETER(Short);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
@@ -431,7 +440,7 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
Irp, 0 );
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Socket state %d\n", FCB->State));
|
||||
AFD_DbgPrint(MID_TRACE,("Socket state %u\n", FCB->State));
|
||||
|
||||
if( FCB->State != SOCKET_STATE_CONNECTED ) {
|
||||
if (!(SendReq->AfdFlags & AFD_OVERLAPPED) &&
|
||||
@@ -445,12 +454,12 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
}
|
||||
}
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("FCB->Send.BytesUsed = %d\n",
|
||||
AFD_DbgPrint(MID_TRACE,("FCB->Send.BytesUsed = %u\n",
|
||||
FCB->Send.BytesUsed));
|
||||
|
||||
SpaceAvail = FCB->Send.Size - FCB->Send.BytesUsed;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("We can accept %d bytes\n",
|
||||
AFD_DbgPrint(MID_TRACE,("We can accept %u bytes\n",
|
||||
SpaceAvail));
|
||||
|
||||
/* Count the total transfer size */
|
||||
@@ -493,7 +502,7 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
{
|
||||
BytesCopied = MIN(SendReq->BufferArray[i].len, SpaceAvail);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Copying Buffer %d, %x:%d to %x\n",
|
||||
AFD_DbgPrint(MID_TRACE,("Copying Buffer %u, %p:%u to %p\n",
|
||||
i,
|
||||
SendReq->BufferArray[i].buf,
|
||||
BytesCopied,
|
||||
@@ -559,7 +568,9 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PAFD_SEND_INFO_UDP SendReq;
|
||||
KPROCESSOR_MODE LockMode;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
||||
|
||||
@@ -611,7 +622,7 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
Irp, 0 );
|
||||
|
||||
AFD_DbgPrint
|
||||
(MID_TRACE,("RemoteAddress #%d Type %d\n",
|
||||
(MID_TRACE,("RemoteAddress #%d Type %u\n",
|
||||
((PTRANSPORT_ADDRESS)SendReq->TdiConnection.RemoteAddress)->
|
||||
TAAddressCount,
|
||||
((PTRANSPORT_ADDRESS)SendReq->TdiConnection.RemoteAddress)->
|
||||
|
||||
@@ -319,26 +319,18 @@ NTSTATUS QueueUserModeIrp(PAFD_FCB FCB, PIRP Irp, UINT Function);
|
||||
|
||||
VOID OskitDumpBuffer( PCHAR Buffer, UINT Len );
|
||||
VOID DestroySocket( PAFD_FCB FCB );
|
||||
VOID NTAPI AfdCancelHandler(PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp);
|
||||
DRIVER_CANCEL AfdCancelHandler;
|
||||
VOID RetryDisconnectCompletion(PAFD_FCB FCB);
|
||||
BOOLEAN CheckUnlockExtraBuffers(PAFD_FCB FCB, PIO_STACK_LOCATION IrpSp);
|
||||
|
||||
/* read.c */
|
||||
|
||||
NTSTATUS NTAPI ReceiveComplete
|
||||
( PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp,
|
||||
PVOID Context );
|
||||
IO_COMPLETION_ROUTINE ReceiveComplete;
|
||||
|
||||
NTSTATUS NTAPI PacketSocketRecvComplete
|
||||
( PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp,
|
||||
PVOID Context );
|
||||
IO_COMPLETION_ROUTINE PacketSocketRecvComplete;
|
||||
|
||||
NTSTATUS NTAPI
|
||||
AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PIO_STACK_LOCATION IrpSp, BOOLEAN Short);
|
||||
AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN Short);
|
||||
NTSTATUS NTAPI
|
||||
AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PIO_STACK_LOCATION IrpSp );
|
||||
|
||||
@@ -197,4 +197,9 @@ VOID
|
||||
MiniDoAddressingReset(
|
||||
PLOGICAL_ADAPTER Adapter);
|
||||
|
||||
VOID
|
||||
MiniWorkItemComplete(
|
||||
PLOGICAL_ADAPTER Adapter,
|
||||
NDIS_WORK_ITEM_TYPE WorkItemType);
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -127,7 +127,7 @@ MiniGetFirstWorkItem(
|
||||
|
||||
while (CurrentEntry)
|
||||
{
|
||||
if (CurrentEntry->WorkItemType == Type)
|
||||
if (CurrentEntry->WorkItemType == Type || Type == NdisMaxWorkItems)
|
||||
return CurrentEntry;
|
||||
|
||||
CurrentEntry = (PNDIS_MINIPORT_WORK_ITEM)CurrentEntry->Link.Next;
|
||||
@@ -146,18 +146,20 @@ MiniIsBusy(
|
||||
|
||||
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
||||
|
||||
if (Type == NdisWorkItemRequest &&
|
||||
(Adapter->NdisMiniportBlock.PendingRequest || MiniGetFirstWorkItem(Adapter, NdisWorkItemRequest)))
|
||||
if (MiniGetFirstWorkItem(Adapter, Type))
|
||||
{
|
||||
Busy = TRUE;
|
||||
}
|
||||
else if (Type == NdisWorkItemRequest && Adapter->NdisMiniportBlock.PendingRequest)
|
||||
{
|
||||
Busy = TRUE;
|
||||
}
|
||||
else if (Type == NdisWorkItemSend &&
|
||||
(Adapter->NdisMiniportBlock.FirstPendingPacket || MiniGetFirstWorkItem(Adapter, NdisWorkItemSend)))
|
||||
else if (Type == NdisWorkItemSend && Adapter->NdisMiniportBlock.FirstPendingPacket)
|
||||
{
|
||||
Busy = TRUE;
|
||||
}
|
||||
else if (Type == NdisWorkItemResetRequested &&
|
||||
(Adapter->NdisMiniportBlock.ResetStatus == NDIS_STATUS_PENDING || MiniGetFirstWorkItem(Adapter, NdisWorkItemResetRequested)))
|
||||
else if (Type == NdisWorkItemResetRequested &&
|
||||
Adapter->NdisMiniportBlock.ResetStatus == NDIS_STATUS_PENDING)
|
||||
{
|
||||
Busy = TRUE;
|
||||
}
|
||||
@@ -501,8 +503,9 @@ MiniRequestComplete(
|
||||
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
||||
Adapter->NdisMiniportBlock.PendingRequest = NULL;
|
||||
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
||||
|
||||
KeLowerIrql(OldIrql);
|
||||
|
||||
MiniWorkItemComplete(Adapter, NdisWorkItemRequest);
|
||||
}
|
||||
|
||||
VOID NTAPI
|
||||
@@ -553,6 +556,8 @@ MiniSendComplete(
|
||||
Status);
|
||||
|
||||
KeLowerIrql(OldIrql);
|
||||
|
||||
MiniWorkItemComplete(Adapter, NdisWorkItemSend);
|
||||
}
|
||||
|
||||
|
||||
@@ -560,9 +565,8 @@ VOID NTAPI
|
||||
MiniSendResourcesAvailable(
|
||||
IN NDIS_HANDLE MiniportAdapterHandle)
|
||||
{
|
||||
/*
|
||||
UNIMPLEMENTED
|
||||
*/
|
||||
/* Run the work if anything is waiting */
|
||||
MiniWorkItemComplete((PLOGICAL_ADAPTER)MiniportAdapterHandle, NdisWorkItemSend);
|
||||
}
|
||||
|
||||
|
||||
@@ -896,6 +900,8 @@ MiniReset(
|
||||
|
||||
NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_END, NULL, 0);
|
||||
NdisMIndicateStatusComplete(Adapter);
|
||||
|
||||
MiniWorkItemComplete(Adapter, NdisWorkItemResetRequested);
|
||||
}
|
||||
|
||||
return Status;
|
||||
@@ -916,6 +922,23 @@ MiniportHangDpc(
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
MiniWorkItemComplete(
|
||||
PLOGICAL_ADAPTER Adapter,
|
||||
NDIS_WORK_ITEM_TYPE WorkItemType)
|
||||
{
|
||||
PIO_WORKITEM IoWorkItem;
|
||||
|
||||
/* Check if there's anything queued to run after this work item */
|
||||
if (!MiniIsBusy(Adapter, WorkItemType))
|
||||
return;
|
||||
|
||||
/* There is, so fire the worker */
|
||||
IoWorkItem = IoAllocateWorkItem(Adapter->NdisMiniportBlock.DeviceObject);
|
||||
if (IoWorkItem)
|
||||
IoQueueWorkItem(IoWorkItem, MiniportWorker, DelayedWorkQueue, IoWorkItem);
|
||||
}
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
MiniQueueWorkItem(
|
||||
@@ -934,7 +957,6 @@ MiniQueueWorkItem(
|
||||
*/
|
||||
{
|
||||
PNDIS_MINIPORT_WORK_ITEM MiniportWorkItem;
|
||||
PIO_WORKITEM IoWorkItem;
|
||||
KIRQL OldIrql;
|
||||
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||
@@ -982,10 +1004,6 @@ MiniQueueWorkItem(
|
||||
}
|
||||
}
|
||||
|
||||
IoWorkItem = IoAllocateWorkItem(Adapter->NdisMiniportBlock.DeviceObject);
|
||||
if (IoWorkItem)
|
||||
IoQueueWorkItem(IoWorkItem, MiniportWorker, DelayedWorkQueue, IoWorkItem);
|
||||
|
||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
||||
}
|
||||
|
||||
@@ -1114,6 +1132,11 @@ MiniDoRequest(
|
||||
}
|
||||
|
||||
KeLowerIrql(OldIrql);
|
||||
|
||||
if (Status != NDIS_STATUS_PENDING) {
|
||||
MiniWorkItemComplete(Adapter, NdisWorkItemRequest);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
@@ -424,6 +424,10 @@ proSendPacketToMiniport(PLOGICAL_ADAPTER Adapter, PNDIS_PACKET Packet)
|
||||
NdisStatus = NDIS_STATUS_PENDING;
|
||||
}
|
||||
}
|
||||
|
||||
if (NdisStatus != NDIS_STATUS_PENDING) {
|
||||
MiniWorkItemComplete(Adapter, NdisWorkItemSend);
|
||||
}
|
||||
|
||||
return NdisStatus;
|
||||
} else {
|
||||
@@ -447,6 +451,10 @@ proSendPacketToMiniport(PLOGICAL_ADAPTER Adapter, PNDIS_PACKET Packet)
|
||||
NdisStatus = NDIS_STATUS_PENDING;
|
||||
}
|
||||
}
|
||||
|
||||
if (NdisStatus != NDIS_STATUS_PENDING) {
|
||||
MiniWorkItemComplete(Adapter, NdisWorkItemSend);
|
||||
}
|
||||
|
||||
return NdisStatus;
|
||||
}
|
||||
|
||||
+95
-13
@@ -20,21 +20,103 @@ extern "C" {
|
||||
|
||||
#ifndef _CRT_MEMORY_DEFINED
|
||||
#define _CRT_MEMORY_DEFINED
|
||||
_CRTIMP void *__cdecl _memccpy(void *_Dst,const void *_Src,int _Val,size_t _MaxCount);
|
||||
_CONST_RETURN void *__cdecl memchr(const void *_Buf ,int _Val,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
|
||||
_CRTIMP int __cdecl _memicmp_l(const void *_Buf1,const void *_Buf2,size_t _Size,_locale_t _Locale);
|
||||
int __cdecl memcmp(const void *_Buf1,const void *_Buf2,size_t _Size);
|
||||
void *__cdecl memcpy(void *_Dst,const void *_Src,size_t _Size);
|
||||
void *__cdecl memset(void *_Dst,int _Val,size_t _Size);
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
_CRTIMP void *__cdecl memccpy(void *_Dst,const void *_Src,int _Val,size_t _Size);
|
||||
_CRTIMP int __cdecl memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
|
||||
#endif
|
||||
#endif
|
||||
_CRTIMP
|
||||
void*
|
||||
__cdecl
|
||||
_memccpy(
|
||||
_Out_writes_bytes_opt_(_MaxCount) void *_Dst,
|
||||
_In_ const void *_Src,
|
||||
_In_ int _Val,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CONST_RETURN
|
||||
void*
|
||||
__cdecl
|
||||
memchr(
|
||||
_In_reads_bytes_opt_(_MaxCount) const void *_Buf,
|
||||
_In_ int _Val,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_memicmp(
|
||||
_In_reads_bytes_opt_(_Size) const void *_Buf1,
|
||||
_In_reads_bytes_opt_(_Size) const void *_Buf2,
|
||||
_In_ size_t _Size);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_memicmp_l(
|
||||
_In_reads_bytes_opt_(_Size) const void *_Buf1,
|
||||
_In_reads_bytes_opt_(_Size) const void *_Buf2,
|
||||
_In_ size_t _Size,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
int
|
||||
__cdecl
|
||||
memcmp(
|
||||
_In_reads_bytes_opt_(_Size) const void *_Buf1,
|
||||
_In_reads_bytes_opt_(_Size) const void *_Buf2,
|
||||
_In_ size_t _Size);
|
||||
|
||||
_Post_equal_to_(_Dst)
|
||||
_At_buffer_((unsigned char*)_Dst,
|
||||
_Iter_,
|
||||
_MaxCount,
|
||||
_Post_satisfies_(((unsigned char*)_Dst)[_Iter_] == ((unsigned char*)_Src)[_Iter_]))
|
||||
_CRT_INSECURE_DEPRECATE_MEMORY(memcpy_s)
|
||||
void*
|
||||
__cdecl
|
||||
memcpy(
|
||||
_Out_writes_bytes_all_(_MaxCount) void *_Dst,
|
||||
_In_reads_bytes_(_MaxCount) const void *_Src,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Post_equal_to_(_Dst)
|
||||
_At_buffer_((unsigned char*)_Dst,
|
||||
_Iter_,
|
||||
_Size,
|
||||
_Post_satisfies_(((unsigned char*)_Dst)[_Iter_] == _Val))
|
||||
void*
|
||||
__cdecl
|
||||
memset(
|
||||
_Out_writes_bytes_all_(_Size) void *_Dst,
|
||||
_In_ int _Val,
|
||||
_In_ size_t _Size);
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
|
||||
_CRTIMP
|
||||
void*
|
||||
__cdecl
|
||||
memccpy(
|
||||
_Out_writes_bytes_opt_(_Size) void *_Dst,
|
||||
_In_reads_bytes_opt_(_Size) const void *_Src,
|
||||
_In_ int _Val,
|
||||
_In_ size_t _Size);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
memicmp(
|
||||
_In_reads_bytes_opt_(_Size) const void *_Buf1,
|
||||
_In_reads_bytes_opt_(_Size) const void *_Buf2,
|
||||
_In_ size_t _Size);
|
||||
|
||||
#endif /* NO_OLDNAMES */
|
||||
|
||||
#endif /* _CRT_MEMORY_DEFINED */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* _INC_MEMORY */
|
||||
|
||||
+68
-12
@@ -38,7 +38,7 @@ extern "C" {
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#ifndef NO_OLDNAMES
|
||||
struct utimbuf {
|
||||
time_t actime;
|
||||
time_t modtime;
|
||||
@@ -49,19 +49,75 @@ extern "C" {
|
||||
__time32_t modtime;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* !_UTIMBUF_DEFINED */
|
||||
|
||||
_CRTIMP int __cdecl _utime(const char *_Filename,struct _utimbuf *_Time);
|
||||
_CRTIMP int __cdecl _utime32(const char *_Filename,struct __utimbuf32 *_Time);
|
||||
_CRTIMP int __cdecl _futime(int _FileDes,struct _utimbuf *_Time);
|
||||
_CRTIMP int __cdecl _futime32(int _FileDes,struct __utimbuf32 *_Time);
|
||||
_CRTIMP int __cdecl _wutime(const wchar_t *_Filename,struct _utimbuf *_Time);
|
||||
_CRTIMP int __cdecl _wutime32(const wchar_t *_Filename,struct __utimbuf32 *_Time);
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_utime(
|
||||
_In_z_ const char *_Filename,
|
||||
_In_opt_ struct _utimbuf *_Time);
|
||||
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_utime32(
|
||||
_In_z_ const char *_Filename,
|
||||
_In_opt_ struct __utimbuf32 *_Time);
|
||||
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_futime(
|
||||
_In_ int _FileDes,
|
||||
_In_opt_ struct _utimbuf *_Time);
|
||||
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_futime32(
|
||||
_In_ int _FileDes,
|
||||
_In_opt_ struct __utimbuf32 *_Time);
|
||||
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_wutime(
|
||||
_In_z_ const wchar_t *_Filename,
|
||||
_In_opt_ struct _utimbuf *_Time);
|
||||
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_wutime32(
|
||||
_In_z_ const wchar_t *_Filename,
|
||||
_In_opt_ struct __utimbuf32 *_Time);
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP int __cdecl _utime64(const char *_Filename,struct __utimbuf64 *_Time);
|
||||
_CRTIMP int __cdecl _futime64(int _FileDes,struct __utimbuf64 *_Time);
|
||||
_CRTIMP int __cdecl _wutime64(const wchar_t *_Filename,struct __utimbuf64 *_Time);
|
||||
#endif
|
||||
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_utime64(
|
||||
_In_z_ const char *_Filename,
|
||||
_In_opt_ struct __utimbuf64 *_Time);
|
||||
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_futime64(
|
||||
_In_ int _FileDes,
|
||||
_In_opt_ struct __utimbuf64 *_Time);
|
||||
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_wutime64(
|
||||
_In_z_ const wchar_t *_Filename,
|
||||
_In_opt_ struct __utimbuf64 *_Time);
|
||||
|
||||
#endif /* _INTEGRAL_MAX_BITS >= 64 */
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
@@ -76,7 +132,7 @@ __CRT_INLINE int __cdecl _wutime32(const wchar_t *_Filename,struct __utimbuf32 *
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#ifndef NO_OLDNAMES
|
||||
__CRT_INLINE int __cdecl utime(const char *_Filename,struct utimbuf *_Utimbuf) {
|
||||
return _utime(_Filename,(struct _utimbuf *)_Utimbuf);
|
||||
}
|
||||
|
||||
+483
-59
@@ -855,65 +855,489 @@ extern "C" {
|
||||
|
||||
#else /* !_MB_MAP_DIRECT */
|
||||
|
||||
_CRTIMP _CONST_RETURN char *__cdecl _tcschr(const char *_Str,unsigned int _Val);
|
||||
_CRTIMP size_t __cdecl _tcscspn(const char *_Str,const char *_Control);
|
||||
_CRTIMP char *__cdecl _tcsncat(char *_Dst,const char *_Src,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsncat_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsncpy(char *_Dst,const char *_Src,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsncpy_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP _CONST_RETURN char *__cdecl _tcspbrk(const char *_Str,const char *_Control);
|
||||
_CRTIMP _CONST_RETURN char *__cdecl _tcsrchr(const char *_Str,unsigned int _Ch);
|
||||
_CRTIMP size_t __cdecl _tcsspn(const char *_Str,const char *_Control);
|
||||
_CRTIMP _CONST_RETURN char *__cdecl _tcsstr(const char *_Str,const char *_Substr);
|
||||
_CRTIMP char *__cdecl _tcstok(char *_Str,const char *_Delim);
|
||||
_CRTIMP char *__cdecl _tcstok_l(char *_Str,const char *_Delim,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsnset(char *_Str,unsigned int _Val,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsrev(char *_Str);
|
||||
_CRTIMP char *__cdecl _tcsset(char *_Str,unsigned int _Val);
|
||||
_CRTIMP char *__cdecl _tcsset_l(char *_Str,unsigned int _Val,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _tcscmp(const char *_Str1,const char *_Str);
|
||||
_CRTIMP int __cdecl _tcsicmp(const char *_Str1,const char *_Str2);
|
||||
_CRTIMP int __cdecl _tcsicmp_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _tcsnccmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _tcsncmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _tcsncicmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _tcsncicmp_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _tcsnicmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _tcsnicmp_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _tcscoll(const char *_Str1,const char *_Str2);
|
||||
_CRTIMP int __cdecl _tcscoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _tcsicoll(const char *_Str1,const char *_Str2);
|
||||
_CRTIMP int __cdecl _tcsicoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _tcsnccoll(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _tcsnccoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _tcsncoll(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _tcsncoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _tcsncicoll(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _tcsncicoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _tcsnicoll(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _tcsnicoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP size_t __cdecl _tcsclen(const char *_Str);
|
||||
_CRTIMP size_t __cdecl _tcscnlen(const char *_Str,size_t _MaxCount);
|
||||
_CRTIMP size_t __cdecl _tcsclen_l(const char *_Str,_locale_t _Locale);
|
||||
_CRTIMP size_t __cdecl _tcscnlen_l(const char *_Str,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsnccat(char *_Dst,const char *_Src,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsnccat_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsnccpy(char *_Dst,const char *_Src,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsnccpy_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsncset(char *_Str,unsigned int _Val,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsdec(const char *_Start,const char *_Pos);
|
||||
_CRTIMP char *__cdecl _tcsinc(const char *_Ptr);
|
||||
_CRTIMP size_t __cdecl _tcsnbcnt(const char *_Str,size_t _MaxCount);
|
||||
_CRTIMP size_t __cdecl _tcsnccnt(const char *_Str,size_t _MaxCount);
|
||||
_CRTIMP unsigned int __cdecl _tcsnextc (const char *_Str);
|
||||
_CRTIMP char *__cdecl _tcsninc(const char *_Ptr,size_t _Count);
|
||||
_CRTIMP char *__cdecl _tcsspnp(const char *_Str1,const char *_Str2);
|
||||
_CRTIMP char *__cdecl _tcslwr(char *_Str);
|
||||
_CRTIMP char *__cdecl _tcslwr_l(char *_Str,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsupr(char *_Str);
|
||||
_CRTIMP char *__cdecl _tcsupr_l(char *_Str,_locale_t _Locale);
|
||||
_CRTIMP size_t __cdecl _tclen(const char *_Str);
|
||||
_CRTIMP void __cdecl _tccpy(char *_DstCh,const char *_SrcCh);
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
_CONST_RETURN
|
||||
char*
|
||||
__cdecl
|
||||
_tcschr(
|
||||
_In_z_ const char *_Str,
|
||||
_In_ unsigned int _Val);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
size_t
|
||||
__cdecl
|
||||
_tcscspn(
|
||||
_In_z_ const char *_Str,
|
||||
_In_z_ const char *_Control);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsncat(
|
||||
_Inout_updates_z_(_MaxCount) char *_Dst,
|
||||
_In_z_ const char *_Src,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsncat_l(
|
||||
_Inout_updates_z_(_MaxCount) char *_Dst,
|
||||
_In_z_ const char *_Src,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsncpy(
|
||||
_Out_writes_(_MaxCount) _Post_maybez_ char *_Dst,
|
||||
_In_z_ const char *_Src,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsncpy_l(
|
||||
_Out_writes_(_MaxCount) _Post_maybez_ char *_Dst,
|
||||
_In_z_ const char *_Src,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
_CONST_RETURN
|
||||
char*
|
||||
__cdecl
|
||||
_tcspbrk(
|
||||
_In_z_ const char *_Str,
|
||||
_In_z_ const char *_Control);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
_CONST_RETURN
|
||||
char*
|
||||
__cdecl
|
||||
_tcsrchr(
|
||||
_In_z_ const char *_Str,
|
||||
_In_ unsigned int _Ch);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
size_t
|
||||
__cdecl
|
||||
_tcsspn(
|
||||
_In_z_ const char *_Str,
|
||||
_In_z_ const char *_Control);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
_CONST_RETURN
|
||||
char*
|
||||
__cdecl
|
||||
_tcsstr(
|
||||
_In_z_ const char *_Str,
|
||||
_In_z_ const char *_Substr);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcstok(
|
||||
_Inout_opt_ char *_Str,
|
||||
_In_z_ const char *_Delim);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcstok_l(
|
||||
_Inout_opt_ char *_Str,
|
||||
_In_z_ const char *_Delim,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsnset(
|
||||
_Inout_z_ char *_Str,
|
||||
_In_ unsigned int _Val,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsrev(
|
||||
_Inout_z_ char *_Str);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsset(
|
||||
_Inout_z_ char *_Str,
|
||||
_In_ unsigned int _Val);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsset_l(
|
||||
_Inout_z_ char *_Str,
|
||||
_In_ unsigned int _Val,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcscmp(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsicmp(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsicmp_l(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsnccmp(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsncmp(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsncicmp(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsncicmp_l(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsnicmp(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsnicmp_l(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcscoll(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcscoll_l(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsicoll(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsicoll_l(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsnccoll(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsnccoll_l(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsncoll(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsncoll_l(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsncicoll(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsncicoll_l(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsnicoll(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
int
|
||||
__cdecl
|
||||
_tcsnicoll_l(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
size_t
|
||||
__cdecl
|
||||
_tcsclen(
|
||||
_In_z_ const char *_Str);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
size_t
|
||||
__cdecl
|
||||
_tcscnlen(
|
||||
_In_z_ const char *_Str,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
size_t
|
||||
__cdecl
|
||||
_tcsclen_l(
|
||||
_In_z_ const char *_Str,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
size_t
|
||||
__cdecl
|
||||
_tcscnlen_l(
|
||||
_In_z_ const char *_Str,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsnccat(
|
||||
_Inout_ char *_Dst,
|
||||
_In_z_ const char *_Src,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsnccat_l(
|
||||
_Inout_ char *_Dst,
|
||||
_In_z_ const char *_Src,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsnccpy(
|
||||
_Out_writes_(_MaxCount) _Post_maybez_ char *_Dst,
|
||||
_In_z_ const char *_Src,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsnccpy_l(
|
||||
_Out_writes_(_MaxCount) _Post_maybez_ char *_Dst,
|
||||
_In_z_ const char *_Src,
|
||||
_In_ size_t _MaxCount,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsncset(
|
||||
_Inout_updates_z_(_MaxCount) char *_Str,
|
||||
_In_ unsigned int _Val,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsdec(
|
||||
_In_reads_z_(_Pos-_Start + 1) const char *_Start,
|
||||
_In_z_ const char *_Pos);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsinc(
|
||||
_In_z_ const char *_Ptr);
|
||||
|
||||
_CRTIMP
|
||||
size_t
|
||||
__cdecl
|
||||
_tcsnbcnt(
|
||||
_In_reads_(_MaxCount) _Pre_z_ const char *_Str,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_CRTIMP
|
||||
size_t
|
||||
__cdecl
|
||||
_tcsnccnt(
|
||||
_In_reads_(_MaxCount) _Pre_z_ const char *_Str,
|
||||
_In_ size_t _MaxCount);
|
||||
|
||||
_CRTIMP
|
||||
unsigned int
|
||||
__cdecl
|
||||
_tcsnextc(
|
||||
_In_z_ const char *_Str);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsninc(
|
||||
_In_reads_(_Count) _Pre_z_ const char *_Ptr,
|
||||
_In_ size_t _Count);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsspnp(
|
||||
_In_z_ const char *_Str1,
|
||||
_In_z_ const char *_Str2);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcslwr(
|
||||
_Inout_ char *_Str);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcslwr_l(
|
||||
_Inout_ char *_Str,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsupr(
|
||||
_Inout_ char *_Str);
|
||||
|
||||
_CRTIMP
|
||||
char*
|
||||
__cdecl
|
||||
_tcsupr_l(
|
||||
_Inout_ char *_Str,
|
||||
_In_opt_ _locale_t _Locale);
|
||||
|
||||
_Check_return_
|
||||
_CRTIMP
|
||||
size_t
|
||||
__cdecl
|
||||
_tclen(
|
||||
_In_z_ const char *_Str);
|
||||
|
||||
_CRTIMP
|
||||
void
|
||||
__cdecl
|
||||
_tccpy(
|
||||
_Pre_notnull_ _Post_z_ char *_DstCh,
|
||||
_In_z_ const char *_SrcCh);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#ifndef _CPP_TCHAR_INLINES_DEFINED
|
||||
|
||||
@@ -5836,6 +5836,33 @@ FsRtlIsTotalDeviceFailure(
|
||||
_In_ NTSTATUS Status);
|
||||
#endif
|
||||
|
||||
/* Output parameters of ZwQueryKey */
|
||||
|
||||
typedef struct _KEY_NAME_INFORMATION {
|
||||
ULONG NameLength;
|
||||
WCHAR Name[1];
|
||||
} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
|
||||
|
||||
typedef struct _KEY_CACHED_INFORMATION {
|
||||
LARGE_INTEGER LastWriteTime;
|
||||
ULONG TitleIndex;
|
||||
ULONG SubKeys;
|
||||
ULONG MaxNameLen;
|
||||
ULONG Values;
|
||||
ULONG MaxValueNameLen;
|
||||
ULONG MaxValueDataLen;
|
||||
ULONG NameLength;
|
||||
} KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION;
|
||||
|
||||
typedef struct _KEY_VIRTUALIZATION_INFORMATION {
|
||||
ULONG VirtualizationCandidate :1;
|
||||
ULONG VirtualizationEnabled :1;
|
||||
ULONG VirtualTarget :1;
|
||||
ULONG VirtualStore :1;
|
||||
ULONG VirtualSource :1;
|
||||
ULONG Reserved :27;
|
||||
} KEY_VIRTUALIZATION_INFORMATION, *PKEY_VIRTUALIZATION_INFORMATION;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -12603,7 +12603,7 @@ IoBuildDeviceIoControlRequest(
|
||||
_Out_opt_ PVOID OutputBuffer,
|
||||
_In_ ULONG OutputBufferLength,
|
||||
_In_ BOOLEAN InternalDeviceIoControl,
|
||||
_In_ PKEVENT Event,
|
||||
_In_opt_ PKEVENT Event,
|
||||
_Out_ PIO_STATUS_BLOCK IoStatusBlock);
|
||||
|
||||
_IRQL_requires_max_(DISPATCH_LEVEL)
|
||||
|
||||
@@ -119,6 +119,7 @@
|
||||
#define COR_E_HOSTPROTECTION EMAKEHR(0x1640)
|
||||
#define COR_E_ILLEGAL_REENTRANCY EMAKEHR(0x1641)
|
||||
|
||||
#define FUSION_E_PRIVATE_ASM_DISALLOWED EMAKEHR(0x1044)
|
||||
#define FUSION_E_INVALID_NAME EMAKEHR(0x1047)
|
||||
|
||||
#define CLDB_E_FILE_OLDVER EMAKEHR(0x1107)
|
||||
|
||||
@@ -28,7 +28,8 @@ typedef enum
|
||||
ASM_CACHE_ZAP = 0x1,
|
||||
ASM_CACHE_GAC = 0x2,
|
||||
ASM_CACHE_DOWNLOAD = 0x4,
|
||||
ASM_CACHE_ROOT = 0x8
|
||||
ASM_CACHE_ROOT = 0x8,
|
||||
ASM_CACHE_ROOT_EX = 0x80
|
||||
} ASM_CACHE_FLAGS;
|
||||
|
||||
typedef enum
|
||||
@@ -38,6 +39,7 @@ typedef enum
|
||||
peI386 = 0x00000002,
|
||||
peIA64 = 0x00000003,
|
||||
peAMD64 = 0x00000004,
|
||||
peARM = 0x00000005,
|
||||
peInvalid = 0xffffffff
|
||||
} PEKIND;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user