Sunc with trunk revision 58971.

svn path=/branches/kd++/; revision=58972
This commit is contained in:
Hermès Bélusca-Maïto
2013-05-09 12:36:15 +00:00
211 changed files with 8781 additions and 3961 deletions
@@ -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)
+41 -27
View File
@@ -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
View File
@@ -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
+64 -64
View File
@@ -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ü"
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
+11
View File
@@ -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
+3
View File
@@ -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>
+1
View File
@@ -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 */
+57
View File
@@ -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 */
+1 -1
View File
@@ -11,7 +11,7 @@
INT cmdHelp(INT argc, WCHAR **argv)
{
if (argc > 3)
if (argc != 3)
{
return 0;
}
+4 -3
View File
@@ -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 -1
View File
@@ -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
+1
View File
@@ -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>
+5 -5
View File
@@ -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
+4 -4
View File
@@ -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"
+1
View File
@@ -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>
+1
View File
@@ -37,6 +37,7 @@
#include <winreg.h>
#include <wingdi.h>
#include <winnls.h>
#include <wincon.h>
#include <ole2.h>
#include <shlwapi.h>
+1
View File
@@ -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>
+1 -4
View File
@@ -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
+2 -1
View File
@@ -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)
+1
View File
@@ -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>
+2 -2
View File
@@ -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
+1
View File
@@ -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>
+1
View File
@@ -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
View File
@@ -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 */
+1
View File
@@ -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>
+1
View File
@@ -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>
+1
View File
@@ -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>
+22 -15
View File
@@ -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,
+1
View File
@@ -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>
+1
View File
@@ -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"
+1
View File
@@ -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"
+1 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
+1 -1
View File
@@ -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
-51
View File
@@ -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;
}
+3 -1
View File
@@ -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;
+1
View File
@@ -31,6 +31,7 @@
#include <winbase.h>
#include <wingdi.h>
//#include "winuser.h"
#include <wincon.h>
//#include "ole2.h"
//#include "olectl.h"
+1 -1
View File
@@ -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..."
}
+1 -1
View File
@@ -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);
}
}
-2
View File
@@ -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);
+1 -1
View File
@@ -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
View File
@@ -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;
+1
View File
@@ -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
View File
@@ -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,
};
+18 -18
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+29 -29
View File
@@ -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
View File
@@ -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
View File
@@ -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,
};
+1
View File
@@ -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
View File
@@ -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)
+6 -1
View File
@@ -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 */
+1
View File
@@ -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>
+1
View File
@@ -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>
+1
View File
@@ -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>
+1
View File
@@ -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"
+1
View File
@@ -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>
+3 -47
View File
@@ -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;
}
+6
View File
@@ -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),
+2 -2
View File
@@ -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;
}
+3 -1
View File
@@ -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 );
+21 -6
View File
@@ -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;
}
+6
View File
@@ -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)
+12 -5
View File
@@ -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 );
+18 -9
View File
@@ -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));
+9 -5
View File
@@ -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;
}
+37 -11
View File
@@ -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;
+28 -20
View File
@@ -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 );
+24 -15
View File
@@ -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 );
+17 -17
View File
@@ -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) {
+21 -10
View File
@@ -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)->
+4 -12
View File
@@ -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 );
+5
View File
@@ -197,4 +197,9 @@ VOID
MiniDoAddressingReset(
PLOGICAL_ADAPTER Adapter);
VOID
MiniWorkItemComplete(
PLOGICAL_ADAPTER Adapter,
NDIS_WORK_ITEM_TYPE WorkItemType);
/* EOF */
+39 -16
View File
@@ -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;
}
+8
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+27
View File
@@ -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
View File
@@ -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)
+1
View File
@@ -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)
+3 -1
View File
@@ -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