STRINGTABLE DISCARDABLE
BEGIN
- IDS_HELP, "ファイルのアクセス制御リスト(ACL) を表 示または変更します。n\n\
+ IDS_HELP, "ファイルのアクセス制御リスト(ACL) を表示または変更します。\n\n\
CACLS ファイル名 [/T] [/E] [/C] [/G ユーザー名:アクセス権]\n\
[/R ユーザー名 [...]] [/P ユーザー名:アクセス権 [...]]\n\
[/D ユーザー名 [...]]\n\
#ifdef LANGUAGE_EN_US
#include "lang/en-US.rc"
#endif
+ #ifdef LANGUAGE_ES_ES
+ #include "lang/es-ES.rc"
+ #endif
+ #ifdef LANGUAGE_FR_FR
+ #include "lang/fr-FR.rc"
+ #endif
+ #ifdef LANGUAGE_IT_IT
+ #include "lang/it-IT.rc"
+ #endif
#ifdef LANGUAGE_PL_PL
#include "lang/pl-PL.rc"
#endif
#ifdef LANGUAGE_ZH_CN
#include "lang/zh-CN.rc"
#endif
- #ifdef LANGUAGE_FR_FR
- #include "lang/fr-FR.rc"
- #endif
- #ifdef LANGUAGE_ES_ES
- #include "lang/es-ES.rc"
- #endif
--- /dev/null
+ LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
+
+ STRINGTABLE DISCARDABLE
+ BEGIN
+
+ IDS_HELP, "Gestisce le impostazioni della riga di comando di editing, la cronologia e le macro.\n\
+ \n\
+ DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
+ [/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
+ \n\
+ /INSERT Attiva la modalità di inserimento.\n\
+ /OVERSTRIKE Disattiva la modalità di inserimento.\n\
+ /EXENAME=exename Consente di impostare il nome del programma per visualizzare/cambiare la cronologia\n\
+ e le macro. Il valore predefinito è cmd.exe.\n\
+ /HISTORY Consente di visualizzare la cronologia dei comandi.\n\
+ /LISTSIZE=size Imposta il numero di comandi al buffer storico.\n\
+ /REINSTALL Cancella la cronologia dei comandi.\n\
+ /MACROS Consente di visualizzare le definizioni delle macro.\n\
+ /MACROS:exename Visualizza le definizioni di macro per un programma specifico.\n\
+ /MACROS:ALL Visualizza le definizioni macro per tutti i programmi.\n\
+ /MACROFILE=file Carica le definizioni di macro da un file.\n\
+ macroname Specifica il nome di una macro per creare.\n\
+ text Consente di specificare il testo di sostituzione per la macro.\n"
+
+ IDS_INVALID_MACRO_DEF, "Definizion macro non valida: %s\n"
+
+ END
--- /dev/null
+ LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
+
+ IDD_MAIN_DIALOG DIALOGEX DISCARDABLE 0, 0, 478, 280
+ STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP |
+ WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU |
+ WS_THICKFRAME
+ CAPTION "Programma di diagnostica ReactX"
+ FONT 8, "MS Shell Dlg"
+ BEGIN
+ CONTROL "Tab1",IDC_TAB_CONTROL,"SysTabControl32",WS_TABSTOP,2,2,474,250
+ PUSHBUTTON "&Aiuto", IDC_BUTTON_HELP, 2, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
+ DEFPUSHBUTTON "&Prossima pagina", IDC_BUTTON_NEXT, 257, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
+ PUSHBUTTON "&Salva tutte le informazioni...", IDC_BUTTON_SAVE_INFO, 311, 261, 110, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
+ PUSHBUTTON "&uSCITA", IDC_BUTTON_EXIT, 425, 261, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
+ END
+
+ 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 "Questo strumento riporta informazioni dettagliate sui componenti ReactX e dei driver installati sul sistema.", -1, 10, 10, 443, 17
+ LTEXT "Se si sa quale zona è la causa del problema, fare clic sopra la scheda appropriata. In caso contrario, è possibile utilizzare il tasto Pagina successiva qui sotto per visitare ogni pagina in sequenza.", -1, 10, 30, 443, 25
+ GROUPBOX "Informazioni di sistema", -1, 10, 55, 443, 130, SS_RIGHT
+ LTEXT "Data/Ora:", -1, 70, 70, 80, 10, SS_RIGHT
+ LTEXT "Nome del computer:", -1, 70, 80, 80, 10, SS_RIGHT
+ LTEXT "Sistema operativo:", -1, 70, 90, 80, 10, SS_RIGHT
+ LTEXT "Lingua:", -1, 70, 100, 80, 10, SS_RIGHT
+ LTEXT "Produttore DI sistema:", -1, 70, 110, 80, 10, SS_RIGHT
+ LTEXT "Modello di Sistem :", -1, 70, 120, 80, 10, SS_RIGHT
+ LTEXT "BIOS:", -1, 70, 130, 80, 10, SS_RIGHT
+ LTEXT "Processore:", -1, 70, 140, 80, 10, SS_RIGHT
+ LTEXT "Memoria:", -1, 70, 150, 80, 10, SS_RIGHT
+ LTEXT "Page file:", -1, 70, 160, 80, 10, SS_RIGHT
+ LTEXT "ReactX-Version:", -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
+ LTEXT "", IDC_STATIC_OS, 155, 90, 195, 10, SS_LEFT
+ LTEXT "", IDC_STATIC_LANG, 155, 100, 195, 10, SS_LEFT
+ LTEXT "", IDC_STATIC_MANU, 155, 110, 195, 10, SS_LEFT
+ LTEXT "", IDC_STATIC_MODEL, 155, 120, 195, 10, SS_LEFT
+ LTEXT "", IDC_STATIC_BIOS, 155, 130, 195, 10, SS_LEFT
+ LTEXT "", IDC_STATIC_PROC, 155, 140, 195, 10, SS_LEFT
+ LTEXT "", IDC_STATIC_MEM, 155, 150, 195, 10, SS_LEFT
+ LTEXT "", IDC_STATIC_SWAP, 155, 160, 195, 10, SS_LEFT
+ LTEXT "", IDC_STATIC_VERSION, 155, 170, 195, 10, SS_LEFT
+ END
+
+ IDD_DISPLAY_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220
+ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+ FONT 8, "MS Shell Dlg"
+ BEGIN
+ GROUPBOX "Device", -1, 10, 10, 250, 100
+ RTEXT "Nome:", -1, 20, 25, 70, 10
+ RTEXT "Fabbricante:", -1, 20, 35, 70, 10
+ RTEXT "Chip Type:", -1, 20, 45, 70, 10
+ RTEXT "DAC Type:", -1, 20, 55, 70, 10
+ RTEXT "Totale memnoria (Approssimativo):", -1, 20, 65, 70, 10
+ RTEXT "Modalità di visualizzazione corrente:", -1, 20, 75, 70, 10
+ RTEXT "Monitor:", -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
+ LTEXT "", IDC_STATIC_ADAPTER_DAC, 95, 55, 150, 10
+ LTEXT "", IDC_STATIC_ADAPTER_MEM, 95, 65, 150, 10
+ LTEXT "", IDC_STATIC_ADAPTER_MODE, 95, 75, 150, 10
+ LTEXT "", IDC_STATIC_ADAPTER_MONITOR, 95, 85, 150, 10
+
+ GROUPBOX "Driver", -1, 270, 10, 190, 100
+ RTEXT "Driver Principale:", -1, 275, 25, 55, 10
+ RTEXT "Versione:", -1, 275, 35, 55, 10
+ RTEXT "Data:", -1, 275, 45, 55, 10
+ RTEXT "WHQL-Logo:", -1, 275, 55, 55, 10
+ RTEXT "Mini-VDD:", -1, 275, 65, 55, 10
+ RTEXT " vvdddVDD:", -1, 275, 75, 55, 10
+ RTEXT "DDI Version:", -1, 275, 85, 55, 10
+ LTEXT "", IDC_STATIC_ADAPTER_DRIVER, 335, 35, 100, 10
+ LTEXT "", IDC_STATIC_ADAPTER_VERSION, 335, 35, 100, 10
+ LTEXT "", IDC_STATIC_ADAPTER_DATE, 335, 45, 100, 10
+ LTEXT "", IDC_STATIC_ADAPTER_LOGO, 335, 55, 100, 10
+ LTEXT "", IDC_STATIC_ADAPTER_MINIVDD, 335, 65, 100, 10
+ LTEXT "", IDC_STATIC_ADAPTER_VDD, 335, 75, 100, 10
+ LTEXT "", IDC_STATIC_ADAPTER_DDI, 335, 85, 100, 10
+
+ GROUPBOX "ReactX-Features", -1, 10, 115, 450, 60
+ RTEXT "Accelerazione DirectDraw:", -1, 15, 130, 110, 12
+ RTEXT "Accelerazione Direct3D:", -1, 15, 145, 110, 12
+ RTEXT "AGP Texture Acceleration:", -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 "Abilita", IDC_BUTTON_DDRAW, 170, 124, 60, 14, WS_DISABLED
+ PUSHBUTTON "Abilita", IDC_BUTTON_D3D, 170, 140, 60, 14, WS_DISABLED
+ PUSHBUTTON "Abilita", IDC_BUTTON_AGP, 170, 156, 60, 14, WS_DISABLED
+ PUSHBUTTON "Test DirectDraw", IDC_BUTTON_TESTDD, 250, 124, 80, 14
+ PUSHBUTTON "Test Direct3D", IDC_BUTTON_TEST3D, 250, 140, 80, 14
+
+ GROUPBOX "Notes", -1, 10, 180, 450, 40
+ EDITTEXT IDC_TEXT_INFO, 20, 192, 432, 20, WS_DISABLED | WS_TABSTOP
+ END
+
+
+ IDD_SOUND_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220
+ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+ FONT 8, "MS Shell Dlg"
+ BEGIN
+ GROUPBOX "Device", -1, 10, 10, 250, 100
+ RTEXT "Nome:", -1, 20, 25, 70, 10
+ RTEXT "Device ID:", -1, 20, 35, 70, 10
+ RTEXT "Manufacturer ID:", -1, 20, 45, 70, 10
+ RTEXT "Product ID:", -1, 20, 55, 70, 10
+ RTEXT "Tipo:", -1, 20, 65, 70, 10
+ RTEXT "Default Device:", -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
+ LTEXT "", IDC_STATIC_DSOUND_PRODUCTID, 95, 55, 150, 10
+ LTEXT "", IDC_STATIC_DSOUND_TYPE, 95, 65, 150, 10
+ LTEXT "", IDC_STATIC_DSOUND_STANDARD, 95, 75, 150, 10
+ GROUPBOX "Driver", -1, 270, 10, 190, 100
+ RTEXT "Nome:", -1, 275, 25, 55, 10
+ RTEXT "Versione:", -1, 275, 35, 55, 10
+ RTEXT "Data:", -1, 275, 45, 55, 10
+ RTEXT "WHQL-Logo:", -1, 275, 55, 55, 10
+ RTEXT "Altri Files:", -1, 275, 65, 55, 10
+ RTEXT "Provider:", -1, 275, 75, 55, 10
+ LTEXT "", IDC_STATIC_DSOUND_DRIVER, 335, 25, 100, 10
+ LTEXT "", IDC_STATIC_DSOUND_VERSION, 335, 35, 100, 10
+ LTEXT "", IDC_STATIC_DSOUND_DATE, 335, 45, 100, 10
+ LTEXT "", IDC_STATIC_DSOUND_LOGO, 335, 55, 100, 10
+ LTEXT "", IDC_STATIC_DSOUND_FILES, 335, 65, 100, 10
+ LTEXT "", IDC_STATIC_ADAPTER_PROVIDER, 335, 75, 100, 10
+ GROUPBOX "ReactX-Features", -1, 10, 115, 450, 60
+ CONTROL "", IDC_SLIDER_DSOUND, "msctls_trackbar32", TBS_BOTTOM | TBS_AUTOTICKS | WS_TABSTOP, 120, 135, 80, 17
+ RTEXT "Hardware Sound\nAcceleration Level:", -1, 20, 135, 90, 20
+ PUSHBUTTON "Test DirectSound", IDC_BUTTON_TESTDSOUND, 270, 134, 80, 14
+ GROUPBOX "Note", -1, 10, 180, 450, 40
+ EDITTEXT IDC_TEXT_DSOUNDINFO, 20, 192, 432, 20, WS_DISABLED | WS_TABSTOP
+ END
+
+ IDD_MUSIC_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220
+ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+ FONT 8, "MS Shell Dlg"
+ BEGIN
+ END
+
+
+ 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 Devices", -1, 10, 10, 452, 80
+ CONTROL "", IDC_LIST_DEVICE, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 20, 22, 432, 60
+ GROUPBOX "Input Devices", -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
+ GROUPBOX "Informazioni", -1, 10, 170, 452, 50
+ EDITTEXT IDC_RICH_INFO, 20, 182, 432, 30, WS_DISABLED | WS_TABSTOP
+ END
+
+ 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 "Registered DirectPlay Service Provider", -1, 10, 10, 452, 80
+ CONTROL "", IDC_LIST_PROVIDER, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 20, 22, 432, 60
+ END
+
+ IDD_HELP_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220
+ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+ FONT 8, "MS Shell Dlg"
+ BEGIN
+ END
+
+ STRINGTABLE DISCARDABLE
+ BEGIN
+ IDS_MAIN_DIALOG "Tool di diagnostica ReactX"
+ IDS_SYSTEM_DIALOG "Sistema"
+ IDS_DISPLAY_DIALOG "Display"
+ IDS_SOUND_DIALOG "Suoni"
+ IDS_MUSIC_DIALOG "Musica"
+ IDS_INPUT_DIALOG "Input"
+ IDS_NETWORK_DIALOG "Network"
+ IDS_HELP_DIALOG "Aiuto"
+ IDS_FORMAT_MB "%I64uMB RAM"
+ IDS_FORMAT_SWAP "%I64u MB utilizzata, %I64u MB avviabile"
+ IDS_FORMAT_UNIPROC "%s (%u CPU)"
+ IDS_FORMAT_MPPROC "%s (%u CPUs)"
+ IDS_VERSION_UNKNOWN "Versione Sconosciuta"
+ IDS_DEVICE_STATUS_ATTACHED "Connesso"
+ IDS_DEVICE_STATUS_MISSING "Disconnesso"
+ IDS_DEVICE_STATUS_UNKNOWN "Sconosciuto"
+ IDS_DEVICE_NAME "Nome Device"
+ IDS_DEVICE_STATUS "Stato"
+ IDS_DEVICE_CONTROLLER "Controller ID"
+ IDS_DEVICE_MANUFACTURER "Manufacturer ID"
+ IDS_DEVICE_PRODUCT "Product ID"
+ IDS_DEVICE_FORCEFEEDBACK "Forza Feedback-Driver"
+ IDS_NOT_APPLICABLE "Non applicabile"
+ IDS_OPTION_YES "Si"
+ IDS_DIRECTPLAY_COL_NAME1 "Nome"
+ IDS_DIRECTPLAY_COL_NAME2 "Registro"
+ IDS_DIRECTPLAY_COL_NAME3 "File"
+ IDS_DIRECTPLAY_COL_NAME4 "Versione"
+ IDS_DIRECTPLAY8_MODEMSP "DirectPlay8-Modem Service Provider"
+ IDS_DIRECTPLAY8_SERIALSP "DirectPlay8 Serial Service Provider"
+ IDS_DIRECTPLAY8_IPXSP "DirectPlay8 IPX Service Provider"
+ IDS_DIRECTPLAY8_TCPSP "DirectPlay8-TCP/IP Service Provider"
+ IDS_DIRECTPLAY_TCPCONN "Connessione Internet TCP/IP per DirectPlay"
+ IDS_DIRECTPLAY_IPXCONN "Connessione IPX per DirectPlay"
+ IDS_DIRECTPLAY_MODEMCONN "Connessione Modem per DirectPlay"
+ IDS_DIRECTPLAY_SERIALCONN "Connessione seriale per DirectPlay"
+ IDS_REG_SUCCESS "OK"
+ IDS_REG_FAIL "Errore"
+ IDS_DDTEST_ERROR "Test fallito!"
+ IDS_DDTEST_DESCRIPTION "Questo avvierà il controllo dell'interfaccia DirectDraw. Continuare?"
+ IDS_DDPRIMARY_DESCRIPTION "Questo test utilizza DirectDraw per disegnare sulla superficie primaria. Rettangoli in bianco e nero devono essere compilati. Continuare?"
+ IDS_DDPRIMARY_RESULT "Hai visto rettangoli bianchi e neri?"
+ IDS_DDOFFSCREEN_DESCRIPTION "Questo test utilizza DirectDraw per disegnare buffer fuori schermo. Spostameni rettangolo bianco devono essere compilati. Continuare?"
+ IDS_DDOFFSCREEN_RESULT "Hai visto il rettangolo bianco muoversi?"
+ IDS_DDFULLSCREEN_DESCRIPTION "Questo test utilizza DirectDraw per disegnare in una modalità schermo intero. I Spostamenti del rettangolo bianco devono essere compilati. Continuare?"
+ IDS_DDFULLSCREEN_RESULT "Hai visto un rettangolo bianco in movimento in modalità schermo intero?"
+ IDS_FORMAT_ADAPTER_MEM "%u MB"
+ IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u bit)(%uHz)"
+ IDS_OPTION_NO "No"
+ IDS_D3DTEST_DESCRIPTION "Avviare il test dell'interfaccia Direct3D. Continuare?"
+ IDS_D3DTEST_D3Dx "Questo test utilizza accelerazione hardware dell'interfaccia Direct3D % u."
+ END
#ifdef LANGUAGE_HE_IL
#include "lang/he-IL.rc"
#endif
+ #ifdef LANGUAGE_IT_IT
+ #include "lang/it-IT.rc"
+ #endif
#ifdef LANGUAGE_JA_JP
#include "lang/ja-JP.rc"
#endif
#ifdef LANGUAGE_NB_NO
#include "lang/no-NO.rc"
#endif
- #ifdef LANGUAGE_SK_SK
- #include "lang/sk-SK.rc"
- #endif
- #ifdef LANGUAGE_SV_SE
- #include "lang/sv-SE.rc"
- #endif
#ifdef LANGUAGE_PL_PL
#include "lang/pl-PL.rc"
#endif
#ifdef LANGUAGE_RU_RU
#include "lang/ru-RU.rc"
#endif
- #ifdef LANGUAGE_UK_UA
- #include "lang/uk-UA.rc"
+ #ifdef LANGUAGE_SK_SK
+ #include "lang/sk-SK.rc"
+ #endif
+ #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
#ifdef LANGUAGE_ZH_CN
#include "lang/zh-CN.rc"
#endif
#ifdef LANGUAGE_HE_IL
#include "lang/he-IL.rc"
#endif
+ #ifdef LANGUAGE_IT_IT
+ #include "lang/it-IT.rc"
+ #endif
#ifdef LANGUAGE_LT_LT
#include "lang/lt-LT.rc"
#endif
--- /dev/null
+ LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
+
+ STRINGTABLE DISCARDABLE
+ BEGIN
+ IDS_INSTALL, "Installa"
+ IDS_PRINT, "Stampa"
+ IDS_STRING, ""
+ IDS_OPEN, "Open Font..."
+ IDS_ERROR, "Errore"
+ IDS_ERROR_NOMEM, "Memoria insufficiente per completare l'operazione."
+ IDS_ERROR_NOFONT, "Il file% 1 non è un file di origine valido."
+ IDS_ERROR_NOCLASS, "Impossibile avviare la classe."
+ END
AUTORADIOBUTTON "1 枚ずつ取る(&O)", IDC_OPT_DRAWONE, 14, 19, 70, 10, WS_GROUP | WS_TABSTOP
AUTORADIOBUTTON "3 枚ずつ取る(&T)", IDC_OPT_DRAWTHREE, 14, 32, 70, 10
- AUTOCHECKBOX "時間を表 示する(&S)", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP | WS_DISABLED
- AUTOCHECKBOX "ステータスバーを表 示する(&T)", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP
+ AUTOCHECKBOX "時間を表示する(&S)", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP | WS_DISABLED
+ AUTOCHECKBOX "ステータスバーを表示する(&T)", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP
DEFPUSHBUTTON "OK", IDOK, 35, 97, 50, 14
PUSHBUTTON "キャンセル", IDCANCEL, 101, 97, 50, 14
STRINGTABLE
BEGIN
- IDS_SOL_NAME "ソ リティア"
- IDS_SOL_ABOUT "J Brown によるソ リティア\n\nCardLib バージョン 1.0。"
+ IDS_SOL_NAME "ソリティア"
+ IDS_SOL_ABOUT "J Brown によるソリティア\n\nCardLib バージョン 1.0。"
IDS_SOL_QUIT "現在のゲームを終了しますか?"
IDS_SOL_WIN "おめでとう、あなたの勝ちです!"
IDS_SOL_DEAL "もう一度カードを配りますか?"
BEGIN
MENUITEM "&Dağıt\tF2", IDM_GAME_NEW
MENUITEM SEPARATOR
- MENUITEM "D&esteler", IDM_GAME_DECK
- MENUITEM "&Ayarlar", IDM_GAME_OPTIONS
+ MENUITEM "D&esteler...", IDM_GAME_DECK
+ MENUITEM "&Ayarlar...", IDM_GAME_OPTIONS
MENUITEM SEPARATOR
MENUITEM "&Çıkış", IDM_GAME_EXIT
END
POPUP "&Yardım"
BEGIN
- MENUITEM "&İçerik\tF1", IDM_HELP_CONTENTS
+ MENUITEM "&Yardım Konuları\tF1", IDM_HELP_CONTENTS
MENUITEM "&Hakkında", IDM_HELP_ABOUT
END
END
STRINGTABLE
BEGIN
IDS_SPI_NAME "スパイダ"
- IDS_SPI_ABOUT "Gregor Schneider によるスパイダ ソ リティア\n\nCardLib バージョン 1.0"
+ IDS_SPI_ABOUT "Gregor Schneider によるスパイダ ソリティア\n\nCardLib バージョン 1.0"
IDS_SPI_QUIT "現在のゲームを終了しますか?"
IDS_SPI_WIN "おめでとう、あなたの勝ちです!"
IDS_SPI_DEAL "もう一度カードを配りますか?"
BEGIN
MENUITEM "&Yeni oyun\tF2", IDM_GAME_NEW
MENUITEM SEPARATOR
- MENUITEM "&Desteler", IDM_GAME_DECK
+ MENUITEM "&Desteler...", IDM_GAME_DECK
MENUITEM SEPARATOR
MENUITEM "&Çıkış", IDM_GAME_EXIT
END
POPUP "&Yardım"
BEGIN
- MENUITEM "&İçerik\tF1", IDM_HELP_CONTENTS
+ MENUITEM "&Yardım Konuları\tF1", IDM_HELP_CONTENTS
MENUITEM "&Hakkında", IDM_HELP_ABOUT
END
END
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
STRINGTABLE BEGIN
- IDS_APPNAME, "Wine Mayın Tarlası"
+ IDS_APPNAME, "Mayın Tarlası"
IDS_NOBODY, "Hiç kimse"
IDS_ABOUT, "Telif hakkı: Joshua Thielen, 2000"
END
MENU_WINEMINE MENU
BEGIN
POPUP "&Seçenekler" BEGIN
- MENUITEM "&Yeni\tF2", IDM_NEW
+ MENUITEM "&Yeni\tF2", IDM_NEW
MENUITEM SEPARATOR
- MENUITEM "&Soru İmi", IDM_MARKQ
+ MENUITEM "&Soru İmi", IDM_MARKQ
MENUITEM SEPARATOR
- MENUITEM "&Başlangıç", IDM_BEGINNER
- MENUITEM "&Orta", IDM_ADVANCED
- MENUITEM "&İleri", IDM_EXPERT
- MENUITEM "&Özel", IDM_CUSTOM
+ MENUITEM "&Başlangıç", IDM_BEGINNER
+ MENUITEM "&Orta", IDM_ADVANCED
+ MENUITEM "&İleri", IDM_EXPERT
+ MENUITEM "&Özel...", IDM_CUSTOM
MENUITEM SEPARATOR
- MENUITEM "&Çıkış\tAlt+X", IDM_EXIT
+ MENUITEM "&Çıkış\tAlt+X", IDM_EXIT
END
POPUP "&Bilgi" BEGIN
- MENUITEM "&En Kısa Süreler", IDM_TIMES
- MENUITEM "&Hakkında", IDM_ABOUT
+ MENUITEM "&En Kısa Süreler...", IDM_TIMES
+ MENUITEM "&Hakkında", IDM_ABOUT
END
END
BEGIN
IDS_USAGE, "セッションを終了します。\n\n\
- /v\t\t実行中に詳細情報を表 示します。\n\
- /?\t\tこの情報を表 示します。\n\n"
+ /v\t\t実行中に詳細情報を表示します。\n\
+ /?\t\tこの情報を表示します。\n\n"
IDS_LOGOFF_REMOTE, "リモート マシンのセッションを終了しています。"
IDS_LOGOFF_LOCAL, "このマシンの現在のセッションを終了しています。"
--- /dev/null
+ /*
+ * PROJECT: ReactOS Magnifier
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: base/applications/magnify/lang/tr-TR.rc
+ * PURPOSE: Turkish Language File for Magnifier
+ * TRANSLATOR: 2013 - Erdem Ersoy (eersoy93)
+ */
+
+ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+ IDC_MAGNIFIER MENU
+ BEGIN
+ POPUP "&Seçke"
+ BEGIN
+ MENUITEM "&Çıkış", IDM_EXIT
+ MENUITEM "&Ayarlar...", IDM_OPTIONS
+ MENUITEM SEPARATOR
+ MENUITEM "&Hakkında", IDM_ABOUT
+ END
+ END
+
+ IDC_MAGNIFIER ACCELERATORS
+ BEGIN
+ "?", IDM_ABOUT, ASCII, ALT
+ "/", IDM_ABOUT, ASCII, ALT
+ END
+
+ IDD_ABOUTBOX DIALOGEX 22, 17, 220, 75
+ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_CAPTION | WS_SYSMENU
+ CAPTION "Hakkında"
+ FONT 8, "MS Shell Dlg", 0, 0, 0x0
+ BEGIN
+ ICON IDI_ICON,IDC_MYICON,14,9,20,20
+ LTEXT "Büyüteç: Sürüm 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX
+ LTEXT "Telif Hakkı: 2007 - Marc Piulachs (marc.piulachs@codexchange.net)",IDC_STATIC,48,24,125,22
+ PUSHBUTTON "Tamam",IDOK,162,48,50,14
+ END
+
+ IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
+ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
+ CAPTION "Büyüteç Ayarları"
+ FONT 8, "MS Shell Dlg", 400, 0, 0x1
+ BEGIN
+ DEFPUSHBUTTON "Çıkış",IDOK,96,161,50,14
+ PUSHBUTTON "Yardım",IDC_BUTTON_HELP,38,161,50,14
+ LTEXT "Büyütme düzeyi:",IDC_STATIC,6,8,68,8
+ COMBOBOX IDC_ZOOM,72,6,63,66,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "İzleme",IDC_STATIC,7,25,139,59
+ GROUPBOX "Sunum",IDC_STATIC,7,87,139,57
+ CONTROL "Fare imlecini takip et",IDC_FOLLOWMOUSECHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,42,114,10
+ CONTROL "Düğme takımı odağını izle",IDC_FOLLOWKEYBOARDCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,54,114,10
+ CONTROL "Metin düzenlemesini izle",IDC_FOLLOWTEXTEDITINGCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,66,114,10
+ CONTROL "Renkleri ters çevir",IDC_INVERTCOLORSCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,102,114,10
+ CONTROL "Simge durumunda başlat",IDC_STARTMINIMIZEDCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,114,114,10
+ CONTROL "Büyüteci göster",IDC_SHOWMAGNIFIERCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,126,114,10
+ END
+
+ IDD_WARNINGDIALOG DIALOGEX 0, 0, 250, 97
+ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION
+ CAPTION "ReactOS Büyüteç"
+ FONT 8, "MS Shell Dlg", 400, 0, 0x1
+ BEGIN
+ DEFPUSHBUTTON "Tamam",IDOK,193,76,50,14
+ ICON IDI_ICON,IDC_STATIC,7,17,20,20
+ LTEXT "Büyüteç, hafif görme engelli kullanıcıların en az çaba harcamaları için tasarlanmıştır. Görme engelli bir çok kullanıcı, günlük kullanım için bu aracı kullanmaya gereksinim duyacaktır.",IDC_STATIC,36,7,207,33
+ CONTROL "Bunu bir daha gösterme",IDC_SHOWWARNINGCHECK, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,43,80,137,10
+ END
+
+ STRINGTABLE
+ BEGIN
+ IDS_APP_TITLE "Büyüteç"
+ END
#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
--- /dev/null
+ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+ IDR_MAINMENU MENU
+ BEGIN
+ POPUP "&Kütük"
+ BEGIN
+ MENUITEM "&Aç...", IDM_OPEN_FILE
+ MENUITEM "&Kapat", IDM_CLOSE_FILE
+ MENUITEM SEPARATOR
+ MENUITEM "&Çıkış", IDM_EXIT
+ END
+ POPUP "&Yardım"
+ BEGIN
+ MENUITEM "&Hakkında", IDM_ABOUT
+ END
+ END
+
+ STRINGTABLE DISCARDABLE
+ BEGIN
+ IDS_ALL_TYPES_FILTER "Tüm Desteklenen Dosyalar (*.wav, *.cda, *.mid, *.midi, *.avi)\0*.wav;*.cda;*.mid;*.midi;*.avi\0"
+ IDS_TOOLTIP_PLAY "Çal"
+ IDS_TOOLTIP_STOP "Durdur"
+ IDS_TOOLTIP_EJECT "Çıkar"
+ IDS_TOOLTIP_BACKWARD "Bir Önceki"
+ IDS_TOOLTIP_SEEKBACK "Geri Sar"
+ IDS_TOOLTIP_SEEKFORW "İleri Sar"
+ IDS_TOOLTIP_FORWARD "Bir Sonraki"
+ IDS_APPTITLE "ReactOS Çokluortam Oynatıcısı"
+ IDS_PLAY "Çal"
+ END
#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
- LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
IDR_MAINMENU MENU
BEGIN
MENUITEM SEPARATOR
MENUITEM "ヘルプ", IDC_PROGHELP, GRAYED
END
- POPUP "表 示"
+ POPUP "表示"
BEGIN
MENUITEM "デバイス (種類別)", IDC_DEVBYTYPE
MENUITEM "デバイス (接続別)", IDC_DEVBYCONN
- MENUITEM "リソ ース (種類別)", IDC_RESBYTYPE, GRAYED
- MENUITEM "リソ ース (接続別)", IDC_RESBYCONN, GRAYED
+ MENUITEM "リソース (種類別)", IDC_RESBYTYPE, GRAYED
+ MENUITEM "リソース (接続別)", IDC_RESBYCONN, GRAYED
MENUITEM SEPARATOR
MENUITEM "Show hidden devices", IDC_SHOWHIDDEN
END
IDS_HINT_EXIT " このプログラムを終了します。"
IDS_HINT_REFRESH " サービスのリストを更新します。"
IDS_HINT_PROP " 現在選択されているシートのプロパティを開きます。"
- IDS_HINT_HELP " ヘルプ ウィンドウを表 示します。"
- IDS_HINT_ABOUT " ReactOS デバイス マネージャについて表 示します。"
+ IDS_HINT_HELP " ヘルプ ウィンドウを表示します。"
+ IDS_HINT_ABOUT " ReactOS デバイス マネージャについて表示します。"
IDS_HINT_SYS_RESTORE " このウィンドウを通常の大きさに復元します。"
IDS_HINT_SYS_MOVE " このウィンドウを移動します。"
MENUITEM SEPARATOR
MENUITEM "終了(&X)", IDM_EXIT
END
- POPUP "表 示(&V)"
+ POPUP "表示(&V)"
BEGIN
MENUITEM "更新(&R)", IDM_REFRESH
END
LTEXT "Static",IDC_EVENTCOMPUTERSTATIC,56,54,72,8
LTEXT "イベントID:",IDC_STATIC,133,15,36,8
LTEXT "Static",IDC_EVENTIDSTATIC,175,15,87,8
- LTEXT "ソ ース:",IDC_STATIC,133,28,36,8
+ LTEXT "ソース:",IDC_STATIC,133,28,36,8
LTEXT "Static",IDC_EVENTSOURCESTATIC,175,28,87,8
LTEXT "種類:",IDC_STATIC,133,42,36,8
LTEXT "Static",IDC_EVENTTYPESTATIC,175,42,87,8
STRINGTABLE
BEGIN
IDS_APP_TITLE "イベント ビューア"
- IDS_EVENTSTRINGIDNOTFOUND "イベント ID (%lu) (ソ ース %s 内) に関する説明が見つかりませんでした。 リモート コンピュータからメッセージを表 示するために必要なレジストリ情報またはメッセージ DLL ファイルがローカル コンピュータにない可能 性があります。"
+ IDS_EVENTSTRINGIDNOTFOUND "イベント ID (%lu) (ソース %s 内) に関する説明が見つかりませんでした。 リモート コンピュータからメッセージを表示するために必要なレジストリ情報またはメッセージ DLL ファイルがローカル コンピュータにない可能性があります。"
IDS_EVENTLOG_ERROR_TYPE "エラー"
IDS_EVENTLOG_WARNING_TYPE "警告"
IDS_EVENTLOG_INFORMATION_TYPE "情報"
MENUITEM SEPARATOR
MENUITEM "プロパティ...", ID_PROP, GRAYED
END
- POPUP "表 示"
+ POPUP "表示"
BEGIN
MENUITEM "大きいアイコン", ID_VIEW_LARGE
MENUITEM "小さいアイコン", ID_VIEW_SMALL
PUSHBUTTON "一時停止", IDC_PAUSE , 130, 155, 54, 15, WS_DISABLED
PUSHBUTTON "再開", IDC_RESUME, 192, 155, 54, 15, WS_DISABLED
LTEXT "サービス名:", IDC_STATIC, 4, 11, 53, 11
- LTEXT "表 示名:", IDC_STATIC, 4, 29, 53, 11
+ LTEXT "表示名:", IDC_STATIC, 4, 29, 53, 11
LTEXT "説明:", IDC_STATIC, 4, 51, 53, 11
LTEXT "実行ファイルのパス:", IDC_STATIC, 6, 73, 82, 9
LTEXT "スタートアップの種類:", IDC_STATIC, 6, 108, 53, 11
EDITTEXT IDC_CREATE_DESC, 10, 97, 210, 48, WS_CHILD | WS_VISIBLE
EDITTEXT IDC_CREATE_OPTIONS, 10, 162, 210, 13, WS_CHILD | WS_VISIBLE
LTEXT "*サービス名 :", IDC_STATIC, 12, 12, 54, 9
- LTEXT "*表 示名 :", IDC_STATIC, 12, 33, 54, 9
+ LTEXT "*表示名 :", IDC_STATIC, 12, 33, 54, 9
LTEXT "*実行ファイルのパス :", IDC_STATIC, 10, 51, 68, 9
LTEXT "説明 :", IDC_STATIC, 12, 86, 44, 9
PUSHBUTTON "OK", IDOK, 126, 192, 44, 13
IDS_HINT_DELETE " 選択したサービスを削除します。"
IDS_HINT_PROP " 現在選択されている項目のプロパティ シートを開きます。"
- IDS_HINT_LARGE " アイテムを大きいアイコンで表 示します。"
- IDS_HINT_SMALL " アイテムを小さいアイコンで表 示します。"
- IDS_HINT_LIST " アイテムを一覧で表 示します。"
- IDS_HINT_DETAILS " 各アイテムの情報をウィンドウに表 示します。"
- IDS_HINT_CUST " 表 示をカスタマイズします。"
+ IDS_HINT_LARGE " アイテムを大きいアイコンで表示します。"
+ IDS_HINT_SMALL " アイテムを小さいアイコンで表示します。"
+ IDS_HINT_LIST " アイテムを一覧で表示します。"
+ IDS_HINT_DETAILS " 各アイテムの情報をウィンドウに表示します。"
+ IDS_HINT_CUST " 表示をカスタマイズします。"
- IDS_HINT_HELP " ヘルプ ウィンドウを表 示します。"
- IDS_HINT_ABOUT " ReactOS サービス マネージャについて表 示します。"
+ IDS_HINT_HELP " ヘルプ ウィンドウを表示します。"
+ IDS_HINT_ABOUT " ReactOS サービス マネージャについて表示します。"
IDS_HINT_SYS_RESTORE " このウィンドウを通常の大きさに復元します。"
IDS_HINT_SYS_MOVE " このウィンドウを移動します。"
MENUITEM "上書き保存(&S)\tCtrl+S", IDM_FILESAVE
MENUITEM "名前を付けて保存(&A)...", IDM_FILESAVEAS
MENUITEM SEPARATOR
- MENUITEM "背景に設定 (並べて表 示)", IDM_FILEASWALLPAPERPLANE
- MENUITEM "背景に設定 (中央に表 示)", IDM_FILEASWALLPAPERCENTERED
+ MENUITEM "背景に設定 (並べて表示)", IDM_FILEASWALLPAPERPLANE
+ MENUITEM "背景に設定 (中央に表示)", IDM_FILEASWALLPAPERCENTERED
MENUITEM "背景に設定 (拡大)", IDM_FILEASWALLPAPERSTRETCHED
MENUITEM SEPARATOR
MENUITEM "ペイントの終了(&Q)\tAlt+F4", IDM_FILEEXIT
MENUITEM SEPARATOR
MENUITEM "切り取り\tCtrl+X", IDM_EDITCUT
MENUITEM "コピー\tCtrl+C", IDM_EDITCOPY
- MENUITEM "貼 り付け\tCtrl+V", IDM_EDITPASTE
+ MENUITEM "貼り付け\tCtrl+V", IDM_EDITPASTE
MENUITEM "選択範囲の削除\tDel", IDM_EDITDELETESELECTION
MENUITEM "選択範囲の挿入", IDM_EDITINVERTSELECTION
MENUITEM "すべて選択\tCtrl+A", IDM_EDITSELECTALL
MENUITEM SEPARATOR
MENUITEM "ファイルへコピー", IDM_EDITCOPYTO
- MENUITEM "ファイルから貼 り付け", IDM_EDITPASTEFROM
+ MENUITEM "ファイルから貼り付け", IDM_EDITPASTEFROM
END
- POPUP "表 示(&V)"
+ POPUP "表示(&V)"
BEGIN
MENUITEM "ツール ボックス\tCtrl+T", IDM_VIEWTOOLBOX, CHECKED
MENUITEM "カラー パレット\tCtrl+L", IDM_VIEWCOLORPALETTE, CHECKED
MENUITEM "800%", IDM_VIEWZOOM800
END
MENUITEM SEPARATOR
- MENUITEM "グリッドを表 示\tCtrl+G", IDM_VIEWSHOWGRID
- MENUITEM "実寸表 示", IDM_VIEWSHOWMINIATURE
+ MENUITEM "グリッドを表示\tCtrl+G", IDM_VIEWSHOWGRID
+ MENUITEM "実寸表示", IDM_VIEWSHOWMINIATURE
END
- MENUITEM "全画面表 示\tCtrl+F", IDM_VIEWFULLSCREEN
+ MENUITEM "全画面表示\tCtrl+F", IDM_VIEWFULLSCREEN
END
POPUP "画像(&I)"
IDS_PROGRAMNAME, "ペイント"
IDS_WINDOWTITLE, "%s - ペイント"
IDS_INFOTITLE, "ReactOS ペイント"
- IDS_INFOTEXT, "ReactOS ペイントは GNU Lesser General Public License (LGPL) version 3 (詳細は www.gnu.org)の下で利用可能 です。"
+ IDS_INFOTEXT, "ReactOS ペイントは GNU Lesser General Public License (LGPL) version 3 (詳細は www.gnu.org)の下で利用可能です。"
IDS_SAVEPROMPTTEXT, "%s の変更内容を保存しますか?"
IDS_DEFAULTFILENAME, "無題.bmp"
IDS_MINIATURETITLE, "縮小図"
--- /dev/null
+ /*
+ * PROJECT: PAINT for ReactOS
+ * LICENSE: unknown (LGPL assumed)
+ * FILE: base/applications/mspaint/lang/tr-TR.rc
+ * PURPOSE: Turkish Language resource file
+ * TRANSLATORS: 2013 - Erdem Ersoy (eersoy93)
+ */
+
+ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+ ID_MENU MENU
+ BEGIN
+ POPUP "&Kütük"
+ BEGIN
+ MENUITEM "&Yeni\tCtrl+N", IDM_FILENEW
+ MENUITEM "&Aç...\tCtrl+O", IDM_FILEOPEN
+ MENUITEM "&Kaydet\tCtrl+S", IDM_FILESAVE
+ MENUITEM "Ay&rı Kaydet...", IDM_FILESAVEAS
+ MENUITEM SEPARATOR
+ MENUITEM "Döşeyerek Duvar Kağıdı Yap", IDM_FILEASWALLPAPERPLANE
+ MENUITEM "Ortalayarak Duvar Kağıdı Yap", IDM_FILEASWALLPAPERCENTERED
+ MENUITEM "Uzatarak Duvar Kağıdı Yap", IDM_FILEASWALLPAPERSTRETCHED
+ MENUITEM SEPARATOR
+ MENUITEM "&Çıkış\tAlt+F4", IDM_FILEEXIT
+ END
+
+ POPUP "&Düzen"
+ BEGIN
+ MENUITEM "Geri Al\tCtrl+Z", IDM_EDITUNDO
+ MENUITEM "Yinele\tCtrl+Y", IDM_EDITREDO
+ MENUITEM SEPARATOR
+ MENUITEM "Kes\tCtrl+X", IDM_EDITCUT
+ MENUITEM "Çoğalt\tCtrl+C", IDM_EDITCOPY
+ MENUITEM "Yapıştır\tCtrl+V", IDM_EDITPASTE
+ MENUITEM "Seçimi Sil\tDel", IDM_EDITDELETESELECTION
+ MENUITEM "Seçimi Evir", IDM_EDITINVERTSELECTION
+ MENUITEM "Hepsini Seç\tCtrl+A", IDM_EDITSELECTALL
+ MENUITEM SEPARATOR
+ MENUITEM "Seçimi Şuraya Kopyala...", IDM_EDITCOPYTO
+ MENUITEM "Şuradan Yapıştır...", IDM_EDITPASTEFROM
+ END
+
+ POPUP "&Görünüm"
+ BEGIN
+ MENUITEM "Araç Çubuğu\tCtrl+T", IDM_VIEWTOOLBOX, CHECKED
+ MENUITEM "Renklik\tCtrl+L", IDM_VIEWCOLORPALETTE, CHECKED
+ MENUITEM "Durum Çubuğu", IDM_VIEWSTATUSBAR, CHECKED
+ MENUITEM "Metin Çubuğu", IDM_FORMATICONBAR, CHECKED, GRAYED
+ MENUITEM SEPARATOR
+ POPUP "Büyüt"
+ BEGIN
+ POPUP "Kullanıcı Tanımlı"
+ BEGIN
+ MENUITEM "%12,5", IDM_VIEWZOOM125
+ MENUITEM "%25", IDM_VIEWZOOM25
+ MENUITEM "%50", IDM_VIEWZOOM50
+ MENUITEM "%100", IDM_VIEWZOOM100
+ MENUITEM "%200", IDM_VIEWZOOM200
+ MENUITEM "%400", IDM_VIEWZOOM400
+ MENUITEM "%800", IDM_VIEWZOOM800
+ END
+ MENUITEM SEPARATOR
+ MENUITEM "Kılavuzu Göster\tCtrl+G", IDM_VIEWSHOWGRID
+ MENUITEM "Küçüğünü Göster", IDM_VIEWSHOWMINIATURE
+ END
+ MENUITEM "Tam Ekran\tCtrl+F", IDM_VIEWFULLSCREEN
+ END
+
+ POPUP "G&örüntü"
+ BEGIN
+ MENUITEM "Döndür ya da Çevir...\tCtrl+R", IDM_IMAGEROTATEMIRROR
+ MENUITEM "Boyutlandır...\tCtrl+W", IDM_IMAGECHANGESIZE
+ MENUITEM "Kırp", IDM_IMAGECROP
+ MENUITEM "Renkleri Evir...\tCtrl+I", IDM_IMAGEINVERTCOLORS
+ MENUITEM "Öznitelikler\tCtrl+E", IDM_IMAGEATTRIBUTES
+ MENUITEM "Resmi Temizle\tCtrl+Shft+N", IDM_IMAGEDELETEIMAGE
+ MENUITEM "Donuk Çiz", IDM_IMAGEDRAWOPAQUE
+ END
+
+ POPUP "R&enkler"
+ BEGIN
+ MENUITEM "Renkliği Düzenle...", IDM_COLORSEDITPALETTE
+ END
+
+ POPUP "&Yardım"
+ BEGIN
+ MENUITEM "Yardım Konuları", IDM_HELPHELPTOPICS
+ MENUITEM SEPARATOR
+ MENUITEM "Hakkında", IDM_HELPINFO
+ END
+ END
+
+ ID_ACCELERATORS ACCELERATORS
+ BEGIN
+ "^N", IDM_FILENEW
+ "^O", IDM_FILEOPEN
+ "^S", IDM_FILESAVE
+ "^Z", IDM_EDITUNDO
+ "^Y", IDM_EDITREDO
+ "^X", IDM_EDITCUT
+ "^C", IDM_EDITCOPY
+ "^V", IDM_EDITPASTE
+ VK_DELETE, IDM_EDITDELETESELECTION, VIRTKEY
+ "^A", IDM_EDITSELECTALL
+ "^T", IDM_VIEWTOOLBOX
+ "^L", IDM_VIEWCOLORPALETTE
+ "^G", IDM_VIEWSHOWGRID
+ "^F", IDM_VIEWFULLSCREEN
+ "^R", IDM_IMAGEROTATEMIRROR
+ "^W", IDM_IMAGECHANGESIZE
+ "^I", IDM_IMAGEINVERTCOLORS
+ "^E", IDM_IMAGEATTRIBUTES
+ "N", IDM_IMAGEDELETEIMAGE, CONTROL, SHIFT, VIRTKEY
+ END
+
+ IDD_MIRRORROTATE DIALOGEX 100, 100, 180, 100
+ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+ FONT 8, "MS Shell Dlg"
+ CAPTION "Resmi Döndür ya da Çevir"
+ BEGIN
+ GROUPBOX "Döndür ya da Çevir", IDD_MIRRORROTATEGROUP, 6, 6, 112, 86
+ AUTORADIOBUTTON "Yatay Çevir", IDD_MIRRORROTATERB1, 12, 18, 100, 10, WS_GROUP
+ AUTORADIOBUTTON "Dikey Çevir", IDD_MIRRORROTATERB2, 12, 30, 100, 10
+ AUTORADIOBUTTON "Açıyla Çevir", IDD_MIRRORROTATERB3, 12, 42, 100, 10
+ AUTORADIOBUTTON "90°", IDD_MIRRORROTATERB4, 42, 54, 50, 10, WS_GROUP | WS_DISABLED
+ AUTORADIOBUTTON "180°", IDD_MIRRORROTATERB5, 42, 66, 50, 10, WS_DISABLED
+ AUTORADIOBUTTON "270°", IDD_MIRRORROTATERB6, 42, 78, 50, 10, WS_DISABLED
+ DEFPUSHBUTTON "Tamam", IDOK, 125, 8, 48, 14
+ PUSHBUTTON "Vazgeç", IDCANCEL, 125, 24, 48, 14
+ END
+
+ IDD_ATTRIBUTES DIALOGEX 100, 100, 225, 120
+ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+ FONT 8, "MS Shell Dlg"
+ CAPTION "Öznitelikler"
+ BEGIN
+ EDITTEXT IDD_ATTRIBUTESEDIT1, 48, 40, 35, 12
+ EDITTEXT IDD_ATTRIBUTESEDIT2, 128, 40, 35, 12
+ LTEXT "En:", IDD_ATTRIBUTESTEXT1, 10, 40, 35, 10
+ LTEXT "Boy:", IDD_ATTRIBUTESTEXT2, 90, 40, 35, 10
+ LTEXT "Kütüğün Zamanı:", IDD_ATTRIBUTESTEXT3, 10, 5, 60, 10
+ LTEXT "Kütüğün Boyutu:", IDD_ATTRIBUTESTEXT4, 10, 15, 60, 10
+ LTEXT "Çözünürlük:", IDD_ATTRIBUTESTEXT5, 10, 25, 60, 10
+ LTEXT "(Daha yok.)", IDD_ATTRIBUTESTEXT6, 60, 5, 90, 10
+ LTEXT "(Daha yok.)", IDD_ATTRIBUTESTEXT7, 60, 15, 90, 10
+ LTEXT "(Daha yok.)", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10
+ GROUPBOX "Birim", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27
+ AUTORADIOBUTTON "İnç", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP
+ AUTORADIOBUTTON "cm", IDD_ATTRIBUTESRB2, 62, 69, 45, 10
+ AUTORADIOBUTTON "Nokta", IDD_ATTRIBUTESRB3, 112, 69, 45, 10
+ GROUPBOX "Renkler", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27
+ AUTORADIOBUTTON "Siyah-beyaz", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP
+ AUTORADIOBUTTON "Renkli", IDD_ATTRIBUTESRB5, 92, 100, 35, 10
+ DEFPUSHBUTTON "Tamam", IDOK, 170, 8, 48, 14
+ PUSHBUTTON "Vazgeç", IDCANCEL, 170, 24, 48, 14
+ PUSHBUTTON "Öntanımlı", IDD_ATTRIBUTESSTANDARD, 170, 40, 48, 14
+ END
+
+ IDD_CHANGESIZE DIALOGEX 100, 100, 225, 80
+ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+ FONT 8, "MS Shell Dlg"
+ CAPTION "Boyutlandır"
+ BEGIN
+ GROUPBOX "Boyutlandır", IDD_CHANGESIZEGROUP, 6, 6, 158, 66
+ ICON IDI_HORZSTRETCH, IDD_CHANGESIZEICON1, 12, 18, 32, 32
+ LTEXT "Yatay:", IDD_CHANGESIZETEXT1, 45, 24, 40, 10
+ EDITTEXT IDD_CHANGESIZEEDIT1, 90, 23, 32, 12
+ LTEXT "%", IDD_CHANGESIZETEXT2, 125, 24, 15, 10
+ ICON IDI_VERTSTRETCH, IDD_CHANGESIZEICON2, 12, 43, 32, 32
+ LTEXT "Dikey:", IDD_CHANGESIZETEXT3, 45, 49, 40, 10
+ EDITTEXT IDD_CHANGESIZEEDIT2, 90, 48, 32, 12
+ LTEXT "%", IDD_CHANGESIZETEXT4, 125, 49, 15, 10
+ DEFPUSHBUTTON "Tamam", IDOK, 170, 8, 48, 14
+ PUSHBUTTON "Vazgeç", IDCANCEL, 170, 24, 48, 14
+ END
+
+ STRINGTABLE
+ BEGIN
+ IDS_PROGRAMNAME, "Görüntü Düzenleyicisi"
+ IDS_WINDOWTITLE, "%s - Görüntü Düzenleyicisi"
+ IDS_INFOTITLE, "ReactOS için Görüntü Düzenleyicisi"
+ IDS_INFOTEXT, "ReactOS için Görüntü Düzenleyicisi GNU Kısıtlı Genel Kamu Lisansı'nın (LGPL) 3. sürümüyle lisanslıdır. (bk: www.gnu.org)"
+ IDS_SAVEPROMPTTEXT, "%s için yapılan değişiklikler kaydedilsin mi?"
+ IDS_DEFAULTFILENAME, "Adsız.bmp"
+ IDS_MINIATURETITLE, "Küçüğü"
+ IDS_TOOLTIP1, "Özgür Seçim"
+ IDS_TOOLTIP2, "Dikdörtgen Seçim"
+ IDS_TOOLTIP3, "Silgi"
+ IDS_TOOLTIP4, "Boya Kabı"
+ IDS_TOOLTIP5, "Renk Seçici"
+ IDS_TOOLTIP6, "Büyüteç"
+ IDS_TOOLTIP7, "Kalem"
+ IDS_TOOLTIP8, "Fırça"
+ IDS_TOOLTIP9, "Püskürteç"
+ IDS_TOOLTIP10, "Metin"
+ IDS_TOOLTIP11, "Çizgi"
+ IDS_TOOLTIP12, "Kıvrım"
+ IDS_TOOLTIP13, "Dikdörtgen"
+ IDS_TOOLTIP14, "Çokgen"
+ IDS_TOOLTIP15, "Söbek"
+ IDS_TOOLTIP16, "Yuvarlatılmış Dikdörtgen"
+ IDS_OPENFILTER, "Bit Eşlem Görüntüleri (*.bmp;*.dib)\1*.bmp;*.dib\1Tüm Kütükler (*.*)\1*.*\1"
+ IDS_SAVEFILTER, "24-bit Bit Eşlem Görüntüsü(*.bmp;*.dib)\1*.bmp;*.dib\1"
+ IDS_FILESIZE, "%d sekizlik"
+ IDS_PRINTRES, "Her metrekarede %d x %d nokta"
+ END
#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
GROUPBOX "色",IDC_STATIC,7,83,228,85
ICON "", IDC_REMICON, 15,19,20,20
ICON "", IDC_COLORSICON, 15,98,20,20
- LTEXT "リモート デスクトップの画面サイズを設定してください。スライダのつまみを右端に動かすと、全画面表 示になります",IDC_STATIC,53,22,175,21
+ LTEXT "リモート デスクトップの画面サイズを設定してください。スライダのつまみを右端に動かすと、全画面表示になります",IDC_STATIC,53,22,175,21
CONTROL "", IDC_GEOSLIDER, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 56, 42, 124, 17
COMBOBOX IDC_BPPCOMBO,56,102,128,80, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_COLORIMAGE,"Static",SS_OWNERDRAW | SS_SUNKEN, 56,121,127,10
- LTEXT "注意: この設定はリモート コンピュータの設定で上書きされる可能 性があります。",IDC_STATIC,56,143,165,18
+ LTEXT "注意: この設定はリモート コンピュータの設定で上書きされる可能性があります。",IDC_STATIC,56,143,165,18
LTEXT "小",IDC_STATIC,35,42,15,8
LTEXT "大",IDC_STATIC,189,42,17,8
LTEXT "", IDC_SETTINGS_RESOLUTION_TEXT, 56, 62, 120, 10, SS_CENTER
IDS_HIGHCOLOR16 "65,536 色 (16 ビット)"
IDS_HIGHCOLOR24 "16,777,216 色 (24 ビット)"
IDS_PIXEL "%lu x %lu ピクセル"
- IDS_FULLSCREEN "全画面表 示"
+ IDS_FULLSCREEN "全画面表示"
IDS_BROWSESERVER "<参照...>"
IDS_HEADERTEXT1 "リモート デスクトップ"
IDS_HEADERTEXT2 "接続"
--- /dev/null
+ LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT
+
+ STRINGTABLE DISCARDABLE
+ BEGIN
+ IDS_USAGE, "\nEinen WLAN Adapter konfigurieren.\n\n\
+ WLANCONF [-c SSID [-w WEP] [-a]] [-d] [-s]\n\n\
+ \t-c SSID\t\teine Verbindung mit der angegebenen\n\
+ \t\t\tSSID herstellen \n\
+ \t-w WEP\t\tden zu benutzenden WEP-Schlüssel angeben\n\
+ \t-a\t\tals ad-hoc-Netzwerk konfigurieren\n\
+ \t-d\t\tvom aktuellen Access Point trennen\n\
+ \t-s\t\t scannt nach verfügbaren Access Points\n\
+ \t\t\tin der Nähe.\n\n\
+ Werden keine Parameter angegeben, werden Informationen zur WLAN-Verbindung ausgegeben.\n"
+ /* === */
+ IDS_NO_NETWORK, "Keine Netzwerke gefunden.\n"
+ IDS_NO_WLAN_ADAPTER, "Es konnte kein WLAN Adapter gefunden werden.\n"
+ IDS_SUCCESS, "Die Operation wurde erfolgreich abgeschlossen.\n"
+ IDS_WLAN_DISCONNECT, "\nWLAN getrennt\n"
+ /* === */
+ IDS_MSG_WEP_ENABLED, "WEP aktiv: %s\n"
+ IDS_MSG_NETWORK_MODE, "Netzwerkmodus: %s\n"
+ IDS_MSG_CURRENT_WIRELESS, "\nAktuelle WLAN-Konfiguration:\n\n"
+ IDS_MSG_ENCRYPTED, "Verschlüsselt: %s\n"
+ IDS_MSG_NETWORK_TYPE, "Netzwerktyp: %s\n"
+ IDS_MSG_RSSI, "RSSI: %i dBm\n"
+ IDS_MSG_SUPPORT_RATE, "Unterstützte Geschwindigkeiten (Mbps): "
+ IDS_MSG_TRANSMISSION_POWER, "Sendeleistung: %d mW\n"
+ IDS_MSG_ANTENNA_COUNT, "Anzahl der Antennen: %d\n"
+ IDS_MSG_TRANSMIT_ANTENNA, "Sendeantenne: %d\n"
+ IDS_MSG_TRANSMIT_ANTENNA_ANY, "Sendeantenne: beliebig\n"
+ IDS_MSG_RECEIVE_ANTENNA, "Empfangsantenne: %d\n"
+ IDS_MSG_RECEIVE_ANTENNA_ANY, "Empfangsantenne: beliebig\n"
+ IDS_MSG_FRAGMENT_THRESHOLD, "Fragmentierungsschwelle: %d Bytes\n"
+ IDS_MSG_RTS_THRESHOLD, "RTS-Schwelle: %d Bytes\n"
+ /* === */
+ IDS_YES, "Ja"
+ IDS_NO, "Nein"
+ IDS_ADHOC, "Adhoc"
+ IDS_INFRASTRUCTURE, "Infrastruktur"
+ END
--- /dev/null
+ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+ STRINGTABLE DISCARDABLE
+ BEGIN
+ IDS_USAGE, "\nConfigurazione adattatore WLAN.\n\n\
+ WLANCONF [-c SSID [-w WEP] [-a]] [-d] [-s]\n\n\
+ \t-c SSID\t\tConnesso al SSID,\n\
+ \t-w WEP\t\tSpecifica una chiave WEP da usare.\n\
+ \t-a\t\tSpecifica la rete di destinazione ad-hoc\n\
+ \t-d\t\tDisconneti dall'AP corrente.\n\
+ \t-s\t\tEsegue la scansione e visualizza un elenco di punti di accesso\n\
+ \t\t\tin range.\n\n\
+ Non passando nessun parametro verranno stampate le informazioni relative alla connessione WLAN corrente\n"
+ /* === */
+ IDS_NO_NETWORK, "Nessuna rete trovata\n"
+ IDS_NO_WLAN_ADAPTER, "Impossibile trovare un adattatore WLAN sul sistema\n"
+ IDS_SUCCESS, "Operazione completata con successo.\n"
+ IDS_WLAN_DISCONNECT, "\nWLAN disconnesso\n"
+ /* === */
+ IDS_MSG_WEP_ENABLED, "WEP abilitato: %s\n"
+ IDS_MSG_NETWORK_MODE, "Modalità di rete: %s\n"
+ IDS_MSG_CURRENT_WIRELESS, "\Informazioni correnti per la configurazione wireless:\n\n"
+ IDS_MSG_ENCRYPTED, "Crittografia: %s\n"
+ IDS_MSG_NETWORK_TYPE, "Tipologia rete: %s\n"
+ IDS_MSG_RSSI, "RSSI: %i dBm\n"
+ IDS_MSG_SUPPORT_RATE, "Tariffe supportate (Mbps): "
+ IDS_MSG_TRANSMISSION_POWER, "Potenza Trasmissione: %d mW\n"
+ IDS_MSG_ANTENNA_COUNT, "Numero Antenne: %d\n"
+ IDS_MSG_TRANSMIT_ANTENNA, "Trasmissione antenna: %d\n"
+ IDS_MSG_TRANSMIT_ANTENNA_ANY, "Trasmissione antenna: Qualsiasi\n"
+ IDS_MSG_RECEIVE_ANTENNA, "Ricezione Antenna: %d\n"
+ IDS_MSG_RECEIVE_ANTENNA_ANY, "Ricezione Antenna: Qualsiasi\n"
+ IDS_MSG_FRAGMENT_THRESHOLD, "Soglia di Frammentazione: %d bytes\n"
+ IDS_MSG_RTS_THRESHOLD, "Soglia RTS: %d bytes\n"
+ /* === */
+ IDS_YES, "Si"
+ IDS_NO, "No"
+ IDS_ADHOC, "Adhoc"
+ IDS_INFRASTRUCTURE, "Infrastruttura"
+ END
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS WLAN Configuration Tool\0"
- #define REACTOS_STR_INTERNAL_NAME "wlanconf\0"
+ #define REACTOS_STR_INTERNAL_NAME "wlanconf\0"
#define REACTOS_STR_ORIGINAL_FILENAME "wlanconf.exe\0"
#define REACTOS_STR_ORIGINAL_COPYRIGHT "Cameron Gutman (cameron.gutman@reactos.org)\0"
#include <reactos/version.rc>
// UTF-8
#pragma code_page(65001)
+
+ #ifdef LANGUAGE_DE_DE
+ #include "lang/de-DE.rc"
+ #endif
#ifdef LANGUAGE_EN_US
#include "lang/en-US.rc"
#endif
+ #ifdef LANGUAGE_IT_IT
+ #include "lang/it-IT.rc"
+ #endif
+
MENUITEM SEPARATOR
MENUITEM "切り取り(&T)\tCtrl+X", CMD_CUT
MENUITEM "コピー(&C)\tCtrl+C", CMD_COPY
- MENUITEM "貼 り付け(&P)\tCtrl+V", CMD_PASTE
+ MENUITEM "貼り付け(&P)\tCtrl+V", CMD_PASTE
MENUITEM "削除(&D)\tDel", CMD_DELETE
MENUITEM SEPARATOR
MENUITEM "検索(&F)...\tCtrl+F", CMD_SEARCH
MENUITEM "右端で折り返す(&W)", CMD_WRAP
MENUITEM "フォント(&F)...", CMD_FONT
END
- POPUP "表 示(&V)"
+ POPUP "表示(&V)"
BEGIN
MENUITEM "ステータス バー(&B)", CMD_STATUSBAR
END
- /*
+ /*
* Notepad (Turkish resources)
*
- * Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
- * Proofread 1998 by David Lee Lambert <lamber45@egr.msu.edu>
- * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
- * Çeviri 2012 Arda Tanrıkulu <ardatanrikulu@gmail.com>
+ * Copyright 2012 Arda Tanrıkulu <ardatanrikulu@gmail.com>
+ * Copyright 2013 Erdem Ersoy (eersoy93)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
MAIN_MENU MENU
BEGIN
- POPUP "&Dosya"
+ POPUP "&Kütük"
BEGIN
- MENUITEM "&Yeni\tCtrl+N", CMD_NEW
- MENUITEM "&Aç...\tCtrl+O", CMD_OPEN
+ MENUITEM "&Yeni\tCtrl+N", CMD_NEW
+ MENUITEM "&Aç...\tCtrl+O", CMD_OPEN
MENUITEM "&Kaydet\tCtrl+S", CMD_SAVE
- MENUITEM "&Farklı Kaydet...", CMD_SAVE_AS
+ MENUITEM "Ay&rı Kaydet...", CMD_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "&Sayfa Yapısı...", CMD_PAGE_SETUP
- MENUITEM "&Yazdır\tCtrl+P", CMD_PRINT
- MENUITEM "&Yazıcı Ayarları...", CMD_PRINTER_SETUP
+ MENUITEM "Ya&zdır...\tCtrl+P", CMD_PRINT
+ MENUITEM "Yaz&ıcı Ayarları...", CMD_PRINTER_SETUP
MENUITEM SEPARATOR
- MENUITEM "&Çıkış", CMD_EXIT
+ MENUITEM "&Çıkış", CMD_EXIT
END
POPUP "&Düzen"
BEGIN
- MENUITEM "&Geri Al\tCtrl+Z", CMD_UNDO
+ MENUITEM "&Geri Al\tCtrl+Z", CMD_UNDO
MENUITEM SEPARATOR
MENUITEM "&Kes\tCtrl+X", CMD_CUT
- MENUITEM "K&opyala\tCtrl+C", CMD_COPY
- MENUITEM "Y&apıştır\tCtrl+V", CMD_PASTE
- MENUITEM "&Sil\tDel", CMD_DELETE
+ MENUITEM "&Çoğalt\tCtrl+C", CMD_COPY
+ MENUITEM "&Yapıştır\tCtrl+V", CMD_PASTE
+ MENUITEM "&Sil\tDel", CMD_DELETE
MENUITEM SEPARATOR
- MENUITEM "&Bul...\tCtrl+F", CMD_SEARCH
- MENUITEM "Son&rakini Bul\tF3", CMD_SEARCH_NEXT
- MENUITEM "&Değiştir\tCtrl+H", CMD_REPLACE
- MENUITEM "G&it...\tCtrl+G", CMD_GOTO
+ MENUITEM "&Ara...\tCtrl+F", CMD_SEARCH
+ MENUITEM "S&onrakini Ara\tF3", CMD_SEARCH_NEXT
+ MENUITEM "&Değiştir...\tCtrl+H",CMD_REPLACE
+ MENUITEM "G&it...\tCtrl+G", CMD_GOTO
MENUITEM SEPARATOR
MENUITEM "&Tümünü Seç\tCtrl+A", CMD_SELECT_ALL
- MENUITEM "Saat/Tari&h\tF5", CMD_TIME_DATE
+ MENUITEM "&Zaman\tF5", CMD_TIME_DATE
END
POPUP "&Biçim"
BEGIN
- MENUITEM "&Sözcük Kaydır", CMD_WRAP
- MENUITEM "&Yazı Tipi...", CMD_FONT
+ MENUITEM "&Satır Kaydır", CMD_WRAP
+ MENUITEM "&Yazı Türü...", CMD_FONT
END
POPUP "&Görünüm"
BEGIN
- MENUITEM "&Durum çubuÄ\9fu", CMD_STATUSBAR
+ MENUITEM "&Durum Ã\87ubuÄ\9fu", CMD_STATUSBAR
END
POPUP "&Yardım"
BEGIN
- MENUITEM "&Yardım Konuları", CMD_HELP_CONTENTS
- MENUITEM "&Ara...", CMD_HELP_SEARCH
- MENUITEM "&Yardımda yardım", CMD_HELP_ON_HELP
+ MENUITEM "&Yardım Konuları", CMD_HELP_CONTENTS
+ MENUITEM "Yardımda &Ara...", CMD_HELP_SEARCH
+ MENUITEM "Yardım &İçin Yardım", CMD_HELP_ON_HELP
MENUITEM SEPARATOR
- MENUITEM "&Not Defteri &Hakkında", CMD_ABOUT
- MENUITEM "Bil&gi", CMD_ABOUT_WINE
+ MENUITEM "&Hakkında", CMD_ABOUT
+ MENUITEM "&Bilgi", CMD_ABOUT_WINE
END
END
/* Dialog `Page setup' */
-
DIALOG_PAGESETUP DIALOGEX 0, 0, 225, 95
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Sayfa Yapısı"
BEGIN
- LTEXT "Üst&bilgi:", 0x140, 10, 07, 40, 15
- EDITTEXT 0x141, 60, 05,110, 12, WS_BORDER | WS_TABSTOP
- LTEXT "Altbil&gi:", 0x142, 10, 24, 40, 15
- EDITTEXT 0x143, 60, 22,110, 12, WS_BORDER | WS_TABSTOP
+ LTEXT "Üst &Bilgi:", 0x140, 10, 07, 40, 15
+ EDITTEXT 0x141, 60, 05,110, 12, WS_BORDER | WS_TABSTOP
+ LTEXT "&Alt Bilgi:", 0x142, 10, 24, 40, 15
+ EDITTEXT 0x143, 60, 22,110, 12, WS_BORDER | WS_TABSTOP
- GROUPBOX "&Kenar Boşlukları:", 0x144, 10, 43,160, 45
- LTEXT "S&ol:", 0x145, 20, 55, 30, 10, WS_CHILD
+ GROUPBOX "Kenar Payı:", 0x144, 10, 43,160, 45
+ LTEXT "S&ol:", 0x145, 20, 55, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_LEFTVALUE,*/ 0x147, 50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
- LTEXT "&Üst:", 0x148, 20, 73, 30, 10, WS_CHILD
+ LTEXT "&Üst:", 0x148, 20, 73, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_TOPVALUE,*/ 0x14A, 50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
- LTEXT "&Sağ:", 0x14B, 100, 55, 30, 10, WS_CHILD
+ LTEXT "&Sağ:", 0x14B, 100, 55, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_RIGHTVALUE,*/ 0x14D, 130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
- LTEXT "A<:", 0x14E, 100, 73, 30, 10, WS_CHILD
+ LTEXT "A<:", 0x14E, 100, 73, 30, 10, WS_CHILD
EDITTEXT /*STRING_PAGESETUP_BOTTOMVALUE,*/ 0x150, 130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP
- DEFPUSHBUTTON "Tamam", IDOK, 180, 3, 40, 15, WS_TABSTOP
- PUSHBUTTON "İptal", IDCANCEL, 180, 21, 40, 15, WS_TABSTOP
- PUSHBUTTON "&Yardım", IDHELP, 180, 39, 40, 15, WS_TABSTOP
+ DEFPUSHBUTTON "&Tamam", IDOK, 180, 3, 40, 15, WS_TABSTOP
+ PUSHBUTTON "&Vazgeç", IDCANCEL, 180, 21, 40, 15, WS_TABSTOP
+ PUSHBUTTON "&Yardım", IDHELP, 180, 39, 40, 15, WS_TABSTOP
END
/* Dialog `Encoding' */
COMBOBOX ID_ENCODING,54,0,156,80,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "K&odlama:",0x155,5,2,41,12
COMBOBOX ID_EOLN,54,18,156,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- LTEXT "Sonhatlar:",0x156,5,20,41,12
+ LTEXT "&Sonlanma:",0x156,5,20,41,12
END
/* Dialog 'Go To' */
DIALOG_GOTO DIALOGEX 0,0,165,50
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
- CAPTION "Satıra git"
+ CAPTION "Satıra Git"
BEGIN
EDITTEXT ID_LINENUMBER,54,10,106,12,WS_CHILD | WS_BORDER | WS_TABSTOP
- LTEXT "&Satır No:",0x155,5,12,41,12,WS_CHILD | WS_TABSTOP | ES_NUMBER
- DEFPUSHBUTTON "Tamam", IDOK, 75, 30, 40, 15, WS_CHILD | WS_TABSTOP
- PUSHBUTTON "İptal", IDCANCEL, 120, 30, 40, 15, WS_CHILD | WS_TABSTOP
+ LTEXT "Satır No:",0x155,5,12,41,12,WS_CHILD | WS_TABSTOP | ES_NUMBER
+ DEFPUSHBUTTON "&Tamam", IDOK, 75, 30, 40, 15, WS_CHILD | WS_TABSTOP
+ PUSHBUTTON "&Vazgeç", IDCANCEL, 120, 30, 40, 15, WS_CHILD | WS_TABSTOP
END
IDD_ABOUTBOX DIALOGEX DISCARDABLE 22,16,284,170
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
- CAPTION "ReactOS Not Defteri Hakkında"
+ CAPTION "ReactOS Metin Düzenleyicisi Hakkında"
FONT 8, "MS Shell Dlg"
BEGIN
- CONTROL "ReactOS Not Defteri v1.0\r\nCopyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>\r\nCopyright 2000 Mike McCormack <Mike_McCormack@looksmart.com.au>\r\nCopyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>\r\nCopyright 2002 Andriy Palamarchuk\r\n",
+ CONTROL "ReactOS Metin Düzenleyicisi - Sürüm: 1.0\r\nTelif Hakkı: 1997,98 Marcel Baur (mbaur@g26.ethz.ch)\r\nTelif Hakkı: 2000 Mike McCormack (Mike_McCormack@looksmart.com.au)\r\nTelif Hakkı: 2002 Sylvain Petreolle (spetreolle@yahoo.fr)\r\nTelif Hakkı: 2002 Andriy Palamarchuk\r\n",
-1,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,46,7,232,39
CONTROL " ",
-1,"Static",0x50000000,8,48,272,11
- DEFPUSHBUTTON "Kapat",IDOK,114,149,44,15,WS_GROUP
+ DEFPUSHBUTTON "&Tamam",IDOK,114,149,44,15,WS_GROUP
ICON IDI_NPICON,-1,12,9,20,30
EDITTEXT IDC_LICENSE,8,64,272,81,ES_MULTILINE |
ES_READONLY | WS_VSCROLL
STRINGTABLE DISCARDABLE
BEGIN
- STRING_LICENSE, "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
+ STRING_LICENSE, "ÖNEMLİ: Aşağıdaki metin özgün metnin resmi olmayan çevirisidir. Çeviri metniyle özgün metin arasında ayrım olabilir. Özgün metin çeviri metninin altındadır.\r\n\r\n***\r\n\r\nBu yazılım özgürdür, yani bu yazılım Özgür Yazılım Vakfı'nın yayınladığı GNU Genel Kamu Lisansı'nın 2. sürümü veya daha sonraki sürümleri altında yeniden dağıtabilir veya değiştirebilirsiniz.\r\n\r\nBu yazılım, kullanışlı olabileceği umuduyla dağıtılmıştır, ancak özellikle SATILABİLİRLİK ve BELİRLİ BİR AMACA UYGUNLUK açısından olmak üzere bu yazılımın hiçbir güvencesi yoktur. Daha fazla bilgi için GNU Genel Kamu Lisansı'na bakınız.\r\n\r\nBu yazılımla birlikte GNU Genel Kamu Lisansı'nın bir sûretine de iye olmanız gerekir, eğer yoksa Özgür Yazılım Vakfı A.Ş.'ne (51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 ABD) yazınız. \r\n\r\n***\r\n\r\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
END
STRINGTABLE DISCARDABLE
STRING_PAGESETUP_TOPVALUE, "25 mm" /* FIXME */
STRING_PAGESETUP_BOTTOMVALUE, "25 mm" /* FIXME */
- STRING_NOTEPAD, "Not Defteri"
+ STRING_NOTEPAD, "Metin Düzenleyicisi"
STRING_ERROR, "HATA"
STRING_WARNING, "UYARI"
STRING_INFO, "Bilgi"
STRING_UNTITLED, "Adsız"
- STRING_ALL_FILES, "Tüm dosyalar (*.*)"
- STRING_TEXT_FILES_TXT, "Metin dosyaları (*.txt)"
+ STRING_ALL_FILES, "Tüm Kütükler (*.*)"
+ STRING_TEXT_FILES_TXT, "Metin Belgeleri (*.txt)"
- STRING_TOOLARGE, "'%s' dosyası Not Defteri için çok büyük.\n\nBu dosyayı düzenlemek için başka bir düzenleyici kullanın."
- STRING_NOTEXT, "Hiçbirşey yazmadınız."
- STRING_DOESNOTEXIST, "'%s' dosyası bulunamıyor.\n\nYeni bir dosya yaratmak ister misiniz?"
- STRING_NOTSAVED, " dosyasındaki metin değişmiş.\n\nDeğişiklikleri kaydetmek istiyor musunuz?"
- STRING_NOTFOUND, "'%s' bulunamıyor."
- STRING_OUT_OF_MEMORY, "Bu işlemi tamamlamak için yetersiz bellek. Kullanılabilen belleği arttırmak için bir veya daha fazla uygulamadan çıkıp yeniden deneyin."
- STRING_CANNOTFIND "'%s' bulunamıyor"
+ STRING_TOOLARGE, "'%s' kütüğü Metin Düzenleyicisi için çok büyük. Bu kütüğü düzenlemek için başka bir metin düzenleyicisi kullanınız."
+ STRING_NOTEXT, "Hiçbir şey yazmadınız. Lütfen bir şeyler yazıp yeniden deneyiniz."
+ STRING_DOESNOTEXIST, "'%s' kütüğü mevcut değil. Yeni bir kütük oluşturmak ister misiniz?"
+ STRING_NOTSAVED, "'%s' kütüğündeki metin değiştirilmiş. Değişiklikleri kaydetmek istiyor musunuz?"
+ STRING_NOTFOUND, "'%s' kütüğü bulunamadı."
+ STRING_OUT_OF_MEMORY, "Bu işlemi tamamlamak için gereken bellek yetersiz. Kullanılabilen belleği arttırmak için bir veya daha fazla uygulamadan çıkıp bu işlemi yeniden deneyiniz."
+ STRING_CANNOTFIND "'%s' bulunamadı."
STRING_ANSI, "ANSI"
STRING_UNICODE, "Unicode"
- STRING_UNICODE_BE, "Unicode (big endian)"
+ STRING_UNICODE_BE, "Unicode (Big Endian)"
STRING_UTF8, "UTF-8"
STRING_CRLF, "Windows"
- STRING_LF, "Unix"
+ STRING_LF, "UNIX"
STRING_CR, "Mac"
- STRING_LINE_COLUMN, "St %d, Stn %d"
+ STRING_LINE_COLUMN, "%d. Satır, %d. Sütun"
END
ID_REGISTRY_CONNECTNETWORKREGISTRY
MENUITEM "&Disconnetti da Registro di rete...",
- ID_REGISTRY_DISCONNECTNETWORKREGISTRY,GRAYED
+ ID_REGISTRY_DISCONNECTNETWORKREGISTRY, GRAYED
MENUITEM SEPARATOR
MENUITEM "&Stampa\tCtrl+P", ID_REGISTRY_PRINT, GRAYED
MENUITEM SEPARATOR
CAPTION "Modifica DWORD"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "&Name:",IDC_STATIC,6,6,134,8
+ LTEXT "&Nome:",IDC_STATIC,6,6,134,8
EDITTEXT IDC_VALUE_NAME,6,17,240,12,ES_AUTOHSCROLL | ES_READONLY
LTEXT "&Dati:",IDC_STATIC,6,35,161,8
EDITTEXT IDC_VALUE_DATA,6,46,116,12,ES_AUTOHSCROLL
IDD_EDIT_RESOURCE_LIST DIALOGEX 32, 24, 170, 120
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
- CAPTION "Resource List"
+ CAPTION "Lista Risorse"
FONT 8, "MS Shell Dlg"
{
CONTROL "", IDC_RESOURCE_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 10, 150, 75
DEFPUSHBUTTON "OK", IDOK, 27, 100, 50, 14
- PUSHBUTTON "Show...", IDC_SHOW_RESOURCE, 93, 100, 50, 14, WS_DISABLED
+ PUSHBUTTON "Visualizza...", IDC_SHOW_RESOURCE, 93, 100, 50, 14, WS_DISABLED
}
IDD_EDIT_RESOURCE DIALOGEX 6, 18, 281, 283
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
- CAPTION "Resources"
+ CAPTION "Risorse"
FONT 8, "MS Shell Dlg"
{
LTEXT "DMA:", IDC_STATIC, 10, 5, 20, 8
CONTROL "", IDC_DMA_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 15, 261, 31
- LTEXT "Interrupt:", IDC_STATIC, 10, 48, 35, 8
+ LTEXT "Interruzione:", IDC_STATIC, 10, 48, 35, 8
CONTROL "", IDC_IRQ_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 58, 261, 31
- LTEXT "Memory:", IDC_STATIC, 10, 91, 32, 8
+ LTEXT "Memoria:", IDC_STATIC, 10, 91, 32, 8
CONTROL "", IDC_MEMORY_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 101, 261, 31
- LTEXT "Port:", IDC_STATIC, 10, 134, 38, 8
+ LTEXT "Porta:", IDC_STATIC, 10, 134, 38, 8
CONTROL "", IDC_PORT_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 144, 261, 31
- LTEXT "Device specific data:", IDC_STATIC, 10, 177, 80, 8
+ LTEXT "Dati specifici del dispositivo", IDC_STATIC, 10, 177, 80, 8
CONTROL "", IDC_DEVICE_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 188, 261, 31
- GROUPBOX "Usage", IDC_STATIC, 10, 219, 125, 39
- LTEXT "Undetermined", IDC_UNDETERMINED, 18, 230, 46, 8, WS_DISABLED
- LTEXT "Shared", IDC_SHARED, 18, 240, 48, 8, WS_DISABLED
- LTEXT "Device exclusive", IDC_DEVICE_EXCLUSIVE, 72, 230, 58, 8, WS_DISABLED
- LTEXT "Driver exclusive", IDC_DRIVER_EXCLUSIVE, 72, 240, 54, 8, WS_DISABLED
- RTEXT "Interface Type:", IDC_STATIC, 144, 220, 58, 8
+ GROUPBOX "Utilizzo", IDC_STATIC, 10, 219, 125, 39
+ LTEXT "Indeterminato", IDC_UNDETERMINED, 18, 230, 46, 8, WS_DISABLED
+ LTEXT "Condividi", IDC_SHARED, 18, 240, 48, 8, WS_DISABLED
+ LTEXT "Device esclusivo", IDC_DEVICE_EXCLUSIVE, 72, 230, 58, 8, WS_DISABLED
+ LTEXT "Driver esclusivo", IDC_DRIVER_EXCLUSIVE, 72, 240, 54, 8, WS_DISABLED
+ RTEXT "Tipo di interfaccia:", IDC_STATIC, 144, 220, 58, 8
LTEXT "", IDC_INTERFACETYPE, 205, 220, 66, 8
RTEXT "Bus Nummer:", IDC_STATIC, 151, 230, 51, 8
LTEXT "", IDC_BUSNUMBER, 205, 230, 66, 8
- RTEXT "Version:", IDC_STATIC, 151, 240, 51, 8
+ RTEXT "Versione:", IDC_STATIC, 151, 240, 51, 8
LTEXT "", IDC_VERSION, 205, 240, 66, 8
- RTEXT "Revision:", IDC_STATIC, 151, 250, 51, 8
+ RTEXT "Revisione:", IDC_STATIC, 151, 250, 51, 8
LTEXT "", IDC_REVISION, 205, 250, 66, 8
DEFPUSHBUTTON "OK",IDOK, 92, 263, 40, 14
PUSHBUTTON "&Data...", IDC_SHOW_RESOURCE_DATA, 148, 263, 40, 14, WS_DISABLED
STRINGTABLE DISCARDABLE
BEGIN
ID_REGISTRY_MENU "Contiene i comandi per lavorare su tutto il Registro"
- ID_EDIT_MENU "Contiene i comandi per editare valori o chiavi"
+ ID_EDIT_MENU "Contiene i comandi per modificare valori o chiavi"
ID_VIEW_MENU "Contiene i comandi per personalizzare la finestra del Registro"
ID_FAVOURITES_MENU "Contiene i comandi per accedere alle chiavi usate frequentemente"
ID_HELP_MENU "Contiene i comandi per visualizzare la Guida e informazioni sull'editor del Registro"
ID_REGISTRY_EXPORTREGISTRYFILE
"Esporta tutto o parte del Registro in un file di testo"
ID_REGISTRY_LOADHIVE
- "Loads a hive file into the registry"
+ "Carica un file hive nel Registro di sistema"
ID_REGISTRY_UNLOADHIVE
- "Unloads a hive from the registry"
+ "Espelle un hive dal Registro di sistema"
ID_REGISTRY_CONNECTNETWORKREGISTRY
"Si connette al Registro di un computer remoto"
ID_REGISTRY_DISCONNECTNETWORKREGISTRY
IDS_ERR_DELETEVALUE "Impossibile cancellare tutti i valori indicati!"
IDS_ERR_RENVAL_CAPTION "Errore nel rinominare il valore"
IDS_ERR_RENVAL_TOEMPTY "Impossibile rinominare %s. Il nome indicato è vuoto. Riprovate con un altro nome."
- IDS_QUERY_IMPORT_HIVE_CAPTION "Confirm Key Restoration"
- IDS_QUERY_IMPORT_HIVE_MSG "A key will be restored on top of the currently selected key.\nAll values and subkeys of this key will be deleted.\nDo you want to continue the operation?"
+ IDS_QUERY_IMPORT_HIVE_CAPTION "Conferma ripristino della chiave"
+ IDS_QUERY_IMPORT_HIVE_MSG "Una chiave sarà ripristinata in cima alla chiave correntemente selezionata.\n Tutti i valori e le sottochiavi di questa chiave verranno eliminati.\n Si desidera continuare l'operazione?"
IDS_NEW_KEY "Nuova chiave #%d"
IDS_NEW_VALUE "Nuovo valore #%d"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_BINARY_EMPTY "(valore binario di lunghezza nulla)"
+ IDS_BINARY_EMPTY "(valore binario di lunghezza nulla)"
IDS_DEFAULT_VALUE_NAME "(predefinito)"
IDS_VALUE_NOT_SET "(valore non impostato)"
IDS_UNKNOWN_TYPE "Tipo sconosciuto: (0x%lx)"
IDS_MY_COMPUTER "Il mio Computer"
IDS_IMPORT_REG_FILE "Importa file di Registro"
IDS_EXPORT_REG_FILE "Esporta file di Registro"
- IDS_LOAD_HIVE "Load Hive"
- IDS_UNLOAD_HIVE "Unload Hive"
+ IDS_LOAD_HIVE "Carica Hive"
+ IDS_UNLOAD_HIVE "Scarica Hive"
IDS_INVALID_DWORD "(valore DWORD non valido)"
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 "Aggiungendo informazioni si possono involontariamente modificare o eliminare i valori e causare il giusto funzionamente dei componenti.\n Se non si considera attendibile la fonte di queste informazioni in '% s', non aggiungere al Registro di sistema.\n\n Si desidera continuare? "
+ IDS_IMPORT_OK "Le chiavi e i valori contenuti in '% s' sono stati correttamente aggiunti al Registro di sistema."
+ IDS_IMPORT_ERROR "Impossibile importare '% s': Errore durante l'apertura del file. Ci può essere un disco, file cdanneggiati o il file non esiste."
+ IDS_EXPORT_ERROR "Impossibile esportare '% s': Errore durante la creazione o la scrittura del file. Ci può essere un disco o un file di sistema danneggiato."
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_BUSNUMBER "Bus Number"
- IDS_INTERFACE "Interface"
- IDS_DMA_CHANNEL "Channel"
- IDS_DMA_PORT "Port"
- IDS_INTERRUPT_VECTOR "Vector"
- IDS_INTERRUPT_LEVEL "Level"
- IDS_INTERRUPT_AFFINITY "Affinity"
- IDS_INTERRUPT_TYPE "Type"
- IDS_MEMORY_ADDRESS "Physical Address"
- IDS_MEMORY_LENGTH "Length"
- IDS_MEMORY_ACCESS "Access"
- IDS_PORT_ADDRESS "Physical Address"
- IDS_PORT_LENGTH "Length"
- IDS_PORT_ACCESS "Access"
- IDS_SPECIFIC_RESERVED1 "Reserved 1"
- IDS_SPECIFIC_RESERVED2 "Reserved 2"
- IDS_SPECIFIC_DATASIZE "Data Size"
+ IDS_INTERFACE "Interfaccia"
+ IDS_DMA_CHANNEL "Canale"
+ IDS_DMA_PORT "Porta"
+ IDS_INTERRUPT_VECTOR "Vettore"
+ IDS_INTERRUPT_LEVEL "Livello"
+ IDS_INTERRUPT_AFFINITY "Affinità"
+ IDS_INTERRUPT_TYPE "Tipo"
+ IDS_MEMORY_ADDRESS "Indirizzo fisico"
+ IDS_MEMORY_LENGTH "Lunghezza"
+ IDS_MEMORY_ACCESS "Accesso"
+ IDS_PORT_ADDRESS "Indirizzo fisico"
+ IDS_PORT_LENGTH "Lunghezza"
+ IDS_PORT_ACCESS "Accesso"
+ IDS_SPECIFIC_RESERVED1 "Riservato 1"
+ IDS_SPECIFIC_RESERVED2 "Riservato 2"
+ IDS_SPECIFIC_DATASIZE "Lunghezza dati"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_PORT_PORT_IO "Port"
- IDS_PORT_MEMORY_IO "Memory"
- IDS_INTERRUPT_EDGE_SENSITIVE "Edge Sensitive"
- IDS_INTERRUPT_LEVEL_SENSITIVE "Level Sensitive"
- IDS_MEMORY_READ_ONLY "Read Only"
- IDS_MEMORY_WRITE_ONLY "Write Only"
- IDS_MEMORY_READ_WRITE "Read / Write"
+ IDS_PORT_PORT_IO "Porta"
+ IDS_PORT_MEMORY_IO "Memoria"
+ IDS_INTERRUPT_EDGE_SENSITIVE "Sensibile al fronte"
+ IDS_INTERRUPT_LEVEL_SENSITIVE "Sensibile al livello"
+ IDS_MEMORY_READ_ONLY "Solo lettura"
+ IDS_MEMORY_WRITE_ONLY "Solo scrittura"
+ IDS_MEMORY_READ_WRITE "Leggi / Scrivi"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_BUS_UNDEFINED "Undefined"
- IDS_BUS_INTERNAL "Internal"
+ IDS_BUS_UNDEFINED "Indefinito"
+ IDS_BUS_INTERNAL "Interno"
IDS_BUS_ISA "ISA"
IDS_BUS_EISA "EISA"
IDS_BUS_MICROCHANNEL "MicroChannel"
IDS_BUS_CBUS "C-Bus"
IDS_BUS_MPIBUS "MPI-Bus"
IDS_BUS_MPSABUS "MPSA-Bus"
- IDS_BUS_PROCESSORINTERNAL "Processor Internal"
+ IDS_BUS_PROCESSORINTERNAL "Processore Interno"
IDS_BUS_INTERNALPOWERBUS "Internal Power Bus"
IDS_BUS_PNPISABUS "PnP-ISA Bus"
IDS_BUS_PNPBUS "PnP Bus"
- IDS_BUS_UNKNOWNTYPE "Unknown Interface Type"
+ IDS_BUS_UNKNOWNTYPE "Tipologia interfaccia sconosciuta"
END
/*****************************************************************/
EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12
END
+ //
+ // Dialog resources
+ //
IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
- CAPTION "Load Hive"
+ CAPTION "Carica Hive"
FONT 8, "Ms Shell Dlg"
{
- LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
+ LTEXT "&Chiave:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
- PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
+ PUSHBUTTON "Annulla", IDCANCEL, 89, 17, 50, 14
}
IDD_ADDFAVORITES DIALOGEX DISCARDABLE 0, 0, 186, 46
BEGIN
MENUITEM "切り取り(&C)", ID_HEXEDIT_CUT
MENUITEM "コピー(&C)", ID_HEXEDIT_COPY
- MENUITEM "貼 り付け(&P)", ID_HEXEDIT_PASTE
+ MENUITEM "貼り付け(&P)", ID_HEXEDIT_PASTE
MENUITEM "削除(&D)", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "すべて選択(&A)", ID_HEXEDIT_SELECT_ALL
/* include localised resources */
// UTF-8
#pragma code_page(65001)
+
#ifdef LANGUAGE_BG_BG
#include "lang/bg-BG.rc"
#endif
/* Dialog */
IDD_GUI DIALOGEX DISCARDABLE 0, 0, 240, 255
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
- CAPTION "Remote Shutdown"
+ CAPTION "Accesso remoto"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "&OK",IDC_OK,125,232,50,14
PUSHBUTTON "&Cancel",IDC_CANCEL,178,232,50,14
CTEXT "Co&mputers:", IDC_STATIC,9,9,35,36
LISTBOX IDC_COMPUTER_LIST,8,19,162,55
- PUSHBUTTON "&Add...",IDC_ADD_SYSTEM,179,19,50,14
- PUSHBUTTON "&Remove",IDC_REMOVE_SYSTEM,179,36,50,14,WS_DISABLED
- PUSHBUTTON "&Browse...",IDC_BROWSE_SYSTEM,179,53,50,14
- CTEXT "Which action do you want these computers to execute?", IDC_ACTION,14,81,20,14
+ PUSHBUTTON "&Aggiungi...",IDC_ADD_SYSTEM,179,19,50,14
+ PUSHBUTTON "&Rimuovi...",IDC_REMOVE_SYSTEM,179,36,50,14,WS_DISABLED
+ PUSHBUTTON "&Naviga...",IDC_BROWSE_SYSTEM,179,53,50,14
+ CTEXT "quale azione si vuole eseguire?", IDC_ACTION,14,81,20,14
COMBOBOX IDC_ACTION_TYPE,37,79,129,14,WS_TABSTOP | CBS_DROPDOWN
- CHECKBOX "Warn users",IDC_WARN_USERS,178,79,50,14,BS_AUTOCHECKBOX | WS_TABSTOP
- CTEXT "Display warning for",IDC_SHOW_WARN_ONE,11,99,65,14
+ CHECKBOX "Avvio all'utente",IDC_WARN_USERS,178,79,50,14,BS_AUTOCHECKBOX | WS_TABSTOP
+ CTEXT "Visualizza avviso per",IDC_SHOW_WARN_ONE,11,99,65,14
EDITTEXT IDC_SHOW_WARN,78,97,41,14
- CTEXT "second(s)",IDC_SHOW_WARN_TWO,124,99,32,10
- GROUPBOX "Shutdown Event Tracker",IDC_STATIC,5,114,224,114
- CTEXT "Reason:",IDC_STATIC,16,130,27,8
- CHECKBOX "Planned",IDC_PLANNED,175,130,40,12,BS_AUTOCHECKBOX | WS_TABSTOP
+ CTEXT "secondi(s)",IDC_SHOW_WARN_TWO,124,99,32,10
+ GROUPBOX "Individuazione evento di arresto",IDC_STATIC,5,114,224,114
+ CTEXT "Ragione:",IDC_STATIC,16,130,27,8
+ CHECKBOX "Progettato",IDC_PLANNED,175,130,40,12,BS_AUTOCHECKBOX | WS_TABSTOP
COMBOBOX IDC_REASON_CODE,17,142,198,13,WS_TABSTOP | CBS_DROPDOWN
- CTEXT "Comm&ent:",IDC_COMMENT_CAPTION,17,159,30,8
+ CTEXT "Comm&ento:",IDC_COMMENT_CAPTION,17,159,30,8
EDITTEXT IDC_COMMENT_TEXT,17,171,198,50,WS_VSCROLL
END
Usage: shutdown [/?] [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f]\n\
[/m \\\\computer][/t xxx][/d [p|u:]xx:yy [/c ""comment""]]\n\
\n\
- No arguments or /? Display this help.\n\
- /i Show the graphical user interface (GUI). This option must be the\n\
- first one.\n\
- /l Log off on the local system only. Cannot be used with /m or /d.\n\
- /s Shutdown the computer.\n\
- /r Restart the computer.\n\
- /g Restart the computer and restart all the registered applications.\n\
- /a Cancel a delayed shutdown. Can only be used during the delay\n\
- period.\n\
- /p Shutdown the local computer without any timeout or warning. Can be\n\
- used with /d or /f.\n\
- /h Hibernate the local computer. Usable with /f.\n\
- /e Document the reason for the unexpected computer shutdown.\n\
- /m \\\\computer Specify the target computer (UNC/IP address).\n\
- /t xxx Set the timeout period to xxx seconds before shutting down.\n\
- The valid range starts from 0 to 315360000 (10 years),\n\
- 30 being the default value.\n\
- /c ""comment"" Comment on the reason for shutdown or restart.\n\
- 512 characters maximum allowed.\n\
- /f Force running applications to close without warning users. If you\n\
- do not specify any other parameter, this option will also log off.\n\
- /d [p|u:]xx:yy Give the reason code for the shutdown or the restart.\n\
- p indicates that the shutdown or the restart is planned.\n\
- u indicates that the reason is defined by the user.\n\
- If neither p nor u are specified, the shutdown or the restart are\n\
- not planned.\n\
- xx is the major reason code (positive integer smaller than 256).\n\
- yy is the minor reason code (positive integer smaller than 65536).\n"
+ Non ci sono argomenti o/? Visualizza aiuti.\n\
+ /i Mostra l'interfaccia utente grafica (GUI). Questa opzione deve essere la \n\
+ prima.\n\
+ /l Disconnessione dal sistema locale. Non può essere utilizzata con /m or /d.\n\
+ /s Chiusura del computer.\n\
+ /r Riavvio del computer.\n\
+ /g Riavvio del computer e riavvio di tutte le applicazioni registrate.\n\
+ /a cancellare un arresto ritardato. Può essere utilizzato solo durante il periodo\n\
+ di ritardo.\n\
+ /p Spegnere il computer locale senza alcun timeout o avviso. Può essere\n\
+ utilizzato con /d or /f.\n\
+ /h Sospensione del computer locale. Utilizzabile con /f.\n\
+ /e Documento e il motivo dell'arresto del computer inatteso.\n\
+ /m \\\\computer Specificare la destinazione del computer (UNC/IP address).\n\
+ /t xxx Imposta il periodo di timeout di xxx secondi prima di spegnersi.\n\
+ L'intervallo valido inizia 0-315360000 (10 anni),\n\
+ 30 è il valore di default.\n\
+ /c ""comment"" Commento sul motivo per cui spegnere o riavviare.\n\
+ 512 caratteri massimi consentiti.\n\
+ /f Forzare la chiusura delle applicazioni in esecuzione senza che avvertire gli utenti. Se\n\
+ non è specificato un'altro parametro, questa opzione è valida anche per la disconnessione.\n\
+ /d [p|u:]xx:yy Indicare il codice motivo per l'arresto o il riavvio.\n\
+ p indica che l'arresto o il riavvio è previsto.\n\
+ u indica che il motivo è definito dall'utente.\n\
+ Se nè p nè u vengono specificati, l'arresto o il riavvio non sono\n\
+ pianificati.\n\
+ xx è il codice maggiore (numero intero positivo inferiore a 256).\n\
+ yy è il codice minore (numero intero positivo inferiore a 65536).\n"
- IDS_ERROR_SHUTDOWN_REBOOT, "ERROR: Unable to shutdown and restart at the same time.\n"
- IDS_ERROR_TIMEOUT, "ERROR: Timeout value of %u is out of bounds (0-315360000).\n"
- IDS_ERROR_ABORT, "ERROR: Unable to abort the shutdown of the system.\n"
- IDS_ERROR_LOGOFF, "ERROR: Unable to logoff the system.\n"
- IDS_ERROR_SHUTDOWN, "ERROR: Unable to shutdown the system.\n"
- IDS_ERROR_RESTART, "ERROR: Unable to restart the system.\n"
- IDS_ERROR_MAX_COMMENT_LENGTH, "ERROR: Comment length exceeds maximum character limit set by the system.\n"
- IDS_ERROR_HIBERNATE, "ERROR: Unable to send system into hibernation mode.\n"
- IDS_ERROR_HIBERNATE_LOCAL, "ERROR: Hibernation mode cannot be started remotely.\n"
- IDS_ERROR_HIBERNATE_ENABLED, "ERROR: Hibernation mode is not enabled.\n"
- IDS_ERROR_DIALOG_CAPTION, "Remote Shutdown"
- IDS_ERROR_DIALOG_INIT, "Unable to display the graphical user interface."
+ IDS_ERROR_SHUTDOWN_REBOOT, "ERROR: Impossibile arrestare e riavviare al tempo stesso.\n"
+ IDS_ERROR_TIMEOUT, "ERROR: Il valore di timeout di u% è fuori dai limiti (0-315360000) \n"
+ IDS_ERROR_ABORT, "ERROR: Impossibile interrompere l'arresto del sistema \n."
+ IDS_ERROR_LOGOFF, "ERROR: Impossibile disconnettersi dal sistema \n"
+ IDS_ERROR_SHUTDOWN, "ERROR: Impossibile arrestare il sistema \n."
+ IDS_ERROR_RESTART, "ERROR: Impossibile riavviare il sistema \n."
+ IDS_ERROR_MAX_COMMENT_LENGTH, "ERROR: Lunghezza commento supera il limite massimo di caratteri impostato dal sistema \n"
+ IDS_ERROR_HIBERNATE, "ERROR: Impossibile avviare il sistema in modalità di sospensione. \n"
+ IDS_ERROR_HIBERNATE_LOCAL, "ERROR: Modalitài sospensione non può essere avviata in modalità remota \n"
+ IDS_ERROR_HIBERNATE_ENABLED, "ERROR: Modalità di sospensione non è abilitata \n"
+ IDS_ERROR_DIALOG_CAPTION, "Arresto improviso"
+ IDS_ERROR_DIALOG_INIT, "Impossibile visualizzare l'interfaccia utente grafica."
END
/* Remote shutdown action strings */
STRINGTABLE DISCARDABLE
BEGIN
- IDS_ACTION_SHUTDOWN, "Shutdown the system"
- IDS_ACTION_RESTART, "Restart the system"
- IDS_ACTION_UNEXPECTED_SHUTDOWN, "Annotate the unexpected shutdown"
+ IDS_ACTION_SHUTDOWN, "Esci dal sistema"
+ IDS_ACTION_RESTART, "Riavvia il sistema"
+ IDS_ACTION_UNEXPECTED_SHUTDOWN, "Arresto improviso"
END
/* Remote shutdown reason strings */
STRINGTABLE DISCARDABLE
BEGIN
- IDS_REASON_OTHER, "Other"
- IDS_REASON_HARDWARE_MAINTENANCE, "Hardware: Maintenance"
- IDS_REASON_HARDWARE_INSTALL, "Hardware: Installation"
- IDS_REASON_OS_RECOVER, "Operating System: Recovery"
- IDS_REASON_OS_RECONFIGURE, "Operating System: Reconfigure"
- IDS_REASON_APP_MAINTENANCE, "Application: Maintenance"
- IDS_REASON_APP_INSTALL, "Application: Installation"
- IDS_REASON_APP_UNRESPONSIVE, "Application: Unresponsive"
- IDS_REASON_APP_UNSTABLE, "Application: Unstable"
- IDS_REASON_SECURITY, "Security Issue"
- IDS_REASON_NETWORK, "Loss of network connectivity"
+ IDS_REASON_OTHER, "Altro"
+ IDS_REASON_HARDWARE_MAINTENANCE, "Hardware: Manutenzione"
+ IDS_REASON_HARDWARE_INSTALL, "Hardware: Installazione"
+ IDS_REASON_OS_RECOVER, "Sistema Operativo System: Recupero"
+ IDS_REASON_OS_RECONFIGURE, "Sistema Operativo: Riconfigurazione"
+ IDS_REASON_APP_MAINTENANCE, "Applicazione: Manutenzione"
+ IDS_REASON_APP_INSTALL, "Applicazione: Installazione"
+ IDS_REASON_APP_UNRESPONSIVE, "Applicazione: Non Risponde"
+ IDS_REASON_APP_UNSTABLE, "Applicazione: Instabile"
+ IDS_REASON_SECURITY, "Problema di sicurezza"
+ IDS_REASON_NETWORK, "Connetività di rete assente"
END
END
END
- STRINGTABLE
+ STRINGTABLE
BEGIN
IDS_APP_TITLE "Sound recorder"
IDC_REACTOS_SNDREC32 "REACTOS_SNDREC32"
END
- STRINGTABLE
+ STRINGTABLE
BEGIN
IDS_STRPOS "Position: %.2f s"
IDS_STRDUR "Lenght: %.2f s"
--- /dev/null
+ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+ IDC_REACTOS_SNDREC32 ACCELERATORS
+ BEGIN
+ "?", IDM_ABOUT, ASCII, ALT
+ "/", IDM_ABOUT, ASCII, ALT
+ END
+
+ IDD_ABOUTBOX DIALOGEX 0, 0, 196, 75
+ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+ CAPTION "ReactOS Ses Kaydedicisi Hakkında"
+ FONT 8, "MS Shell Dlg", 0, 0, 0x1
+ BEGIN
+ ICON IDI_SNDREC32,-1,19,14,21,20
+ LTEXT "ReactOS Ses Kaydedicisi, sürüm 1.0",IDC_STATIC,56,16,114,8,SS_NOPREFIX
+ LTEXT "Tekif Hakkı - 2009",IDC_STATIC,55,25,114,8
+ DEFPUSHBUTTON "&Tamam",IDOK,139,54,50,14,WS_GROUP
+ END
+
+ IDR_MENU1 MENU
+ BEGIN
+ POPUP "&Kütük"
+ BEGIN
+ MENUITEM "&Yeni", ID_NEW
+ MENUITEM "&Aç...", ID_FILE_OPEN
+ MENUITEM "&Kaydet", ID_FILE_SAVE, GRAYED
+ MENUITEM "Ay&rı Kaydet...", ID_FILE_SAVEAS, GRAYED
+ MENUITEM SEPARATOR
+ MENUITEM "&Çıkış", ID_EXIT
+ END
+ MENUITEM "Yapılacak", 0
+ MENUITEM "Yapılacak_2", 0
+ POPUP "&Yardım"
+ BEGIN
+ MENUITEM "&Hakkında", ID__ABOUT
+ END
+ END
+
+ STRINGTABLE
+ BEGIN
+ IDS_APP_TITLE "Ses Kaydedicisi"
+ IDC_REACTOS_SNDREC32 "REACTOS_SNDREC32"
+ END
+
+ STRINGTABLE
+ BEGIN
+ IDS_STRPOS "Konum: %.2f s"
+ IDS_STRDUR "Uzunluk: %.2f s"
+ IDS_STRBUF "Nitelik: %.2f KB"
+ IDS_STRFMT "%.1f kHz, %u bitlik"
+ IDS_STRMONO "Tek Yol"
+ IDS_STRSTEREO "Çift Yol"
+ IDS_STRCHAN "%s"
+ END
#ifdef LANGUAGE_PL_PL
#include "lang/pl-PL.rc"
#endif
+ #ifdef LANGUAGE_RO_RO
+ #include "lang/ro-RO.rc"
+ #endif
#ifdef LANGUAGE_SK_SK
#include "lang/sk-SK.rc"
#endif
#ifdef LANGUAGE_SV_SE
#include "lang/sv-SE.rc"
#endif
- #ifdef LANGUAGE_RO_RO
- #include "lang/ro-RO.rc"
+ #ifdef LANGUAGE_TR_TR
+ #include "lang/tr-TR.rc"
#endif
#ifdef LANGUAGE_UK_UA
#include "lang/uk-UA.rc"
PUSHBUTTON "録音(&R)", IDC_RECORDING, 13,61,47,8, BS_AUTORADIOBUTTON
PUSHBUTTON "その他(&O):", IDC_OTHER, 13,80,42,8, BS_AUTORADIOBUTTON | WS_DISABLED
COMBOBOX IDC_LINE, 55,80,155,50, CBS_DROPDOWNLIST | WS_TABSTOP | WS_DISABLED
- LTEXT "表 示するコントロール:", IDC_LABELCONTROLS, 7, 109, 162, 8
+ LTEXT "表示するコントロール:", IDC_LABELCONTROLS, 7, 109, 162, 8
CONTROL "", IDC_CONTROLS, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | WS_TABSTOP | WS_BORDER, 7, 122, 211, 96
PUSHBUTTON "OK", IDOK, 114,226,50,14
END
POPUP "オプション(&O)"
BEGIN
- MENUITEM "常に手前に表 示(&A)", ID_OPTIONS_ALWAYSONTOP
+ MENUITEM "常に手前に表示(&A)", ID_OPTIONS_ALWAYSONTOP
, CHECKED
MENUITEM "未使用時に最小化(&M)", ID_OPTIONS_MINIMIZEONUSE
, CHECKED
MENUITEM "最小化時に隠す(&H)", ID_OPTIONS_HIDEWHENMINIMIZED
, CHECKED
- MENUITEM "16 ビット タスクの表 示(&S)", ID_OPTIONS_SHOW16BITTASKS
+ MENUITEM "16 ビット タスクの表示(&S)", ID_OPTIONS_SHOW16BITTASKS
, CHECKED
END
- POPUP "表 示(&V)"
+ POPUP "表示(&V)"
BEGIN
MENUITEM "最新の状態に更新(&R)", ID_VIEW_REFRESH
POPUP "更新の頻度(&U)"
MENUITEM "CPU ごとに 1 グラフ(&P)", ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
, CHECKED
END
- MENUITEM "カーネル時間を表 示する(&S)", ID_VIEW_SHOWKERNELTIMES
+ MENUITEM "カーネル時間を表示する(&S)", ID_VIEW_SHOWKERNELTIMES
END
POPUP "ウィンドウ(&W)"
BEGIN
- MENUITEM "上下に並べて表 示(&H)", ID_WINDOWS_TILEHORIZONTALLY
- MENUITEM "左右に並べて表 示(&V)", ID_WINDOWS_TILEVERTICALLY
+ MENUITEM "上下に並べて表示(&H)", ID_WINDOWS_TILEHORIZONTALLY
+ MENUITEM "左右に並べて表示(&V)", ID_WINDOWS_TILEVERTICALLY
MENUITEM "最小化(&M)", ID_WINDOWS_MINIMIZE
MENUITEM "最大化(&X)", ID_WINDOWS_MAXIMIZE
- MENUITEM "重ねて表 示(&C)", ID_WINDOWS_CASCADE
- MENUITEM "手前に表 示(&B)", ID_WINDOWS_BRINGTOFRONT
+ MENUITEM "重ねて表示(&C)", ID_WINDOWS_CASCADE
+ MENUITEM "手前に表示(&B)", ID_WINDOWS_BRINGTOFRONT
END
POPUP "ヘルプ(&H)"
BEGIN
IDR_WINDOWSMENU MENU DISCARDABLE
BEGIN
- MENUITEM "上下に並べて表 示(&H)", ID_WINDOWS_TILEHORIZONTALLY
- MENUITEM "左右に並べて表 示(&V)", ID_WINDOWS_TILEVERTICALLY
+ MENUITEM "上下に並べて表示(&H)", ID_WINDOWS_TILEHORIZONTALLY
+ MENUITEM "左右に並べて表示(&V)", ID_WINDOWS_TILEVERTICALLY
MENUITEM "最小化(&M)", ID_WINDOWS_MINIMIZE
MENUITEM "最大化(&X)", ID_WINDOWS_MAXIMIZE
- MENUITEM "重ねて表 示(&C)", ID_WINDOWS_CASCADE
- MENUITEM "手前に表 示(&B)", ID_WINDOWS_BRINGTOFRONT
+ MENUITEM "重ねて表示(&C)", ID_WINDOWS_CASCADE
+ MENUITEM "手前に表示(&B)", ID_WINDOWS_BRINGTOFRONT
END
IDR_APPLICATION_PAGE_CONTEXT1 MENU DISCARDABLE
POPUP "DUMMY"
BEGIN
MENUITEM "切り替え(&S)", ID_APPLICATION_PAGE_SWITCHTO
- MENUITEM "手前に表 示(&B)", ID_WINDOWS_BRINGTOFRONT
+ MENUITEM "手前に表示(&B)", ID_WINDOWS_BRINGTOFRONT
MENUITEM SEPARATOR
- MENUITEM "上下に並べて表 示(&H)", ID_WINDOWS_TILEHORIZONTALLY
- MENUITEM "左右に並べて表 示(&V)", ID_WINDOWS_TILEVERTICALLY
+ MENUITEM "上下に並べて表示(&H)", ID_WINDOWS_TILEHORIZONTALLY
+ MENUITEM "左右に並べて表示(&V)", ID_WINDOWS_TILEVERTICALLY
MENUITEM "最小化(&M)", ID_WINDOWS_MINIMIZE
MENUITEM "最大化(&X)", ID_WINDOWS_MAXIMIZE
- MENUITEM "重ねて表 示(&C)", ID_WINDOWS_CASCADE
+ MENUITEM "重ねて表示(&C)", ID_WINDOWS_CASCADE
MENUITEM SEPARATOR
MENUITEM "タスクの終了(&E)", ID_APPLICATION_PAGE_ENDTASK
- MENUITEM "プロセスの表 示(&G)", ID_APPLICATION_PAGE_GOTOPROCESS
+ MENUITEM "プロセスの表示(&G)", ID_APPLICATION_PAGE_GOTOPROCESS
END
END
MENUITEM "元のサイズに戻す(&R)", ID_RESTORE
MENUITEM "閉じる(&C)", ID_FILE_EXIT
MENUITEM SEPARATOR
- MENUITEM "常に手前に表 示(&A)", ID_OPTIONS_ALWAYSONTOP
+ MENUITEM "常に手前に表示(&A)", ID_OPTIONS_ALWAYSONTOP
END
END
LVS_SINGLESEL | LVS_SHOWSELALWAYS |
WS_BORDER | WS_TABSTOP,7,7,233,177
PUSHBUTTON "プロセスの終了(&E)",IDC_ENDPROCESS,171,189,69,14
- CONTROL "全ユーザーのプロセスを表 示する(&S)",IDC_SHOWALLPROCESSES,
+ CONTROL "全ユーザーのプロセスを表示する(&S)",IDC_SHOWALLPROCESSES,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,191,111,10
END
ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
GROUPBOX "CPU 使用率の履歴",IDC_CPU_USAGE_HISTORY_FRAME,74,5,168,54,0,WS_EX_TRANSPARENT
GROUPBOX "メモリ使用量の履歴",IDC_MEMORY_USAGE_HISTORY_FRAME,74,63,168,54,0,WS_EX_TRANSPARENT
- PUSHBUTTON "CPU 使用率の表 示",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE
- PUSHBUTTON "メモリ使用量の表 示",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE
+ PUSHBUTTON "CPU 使用率の表示",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE
+ PUSHBUTTON "メモリ使用量の表示",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE
PUSHBUTTON "CPU 使用率の履歴",IDC_CPU_USAGE_HISTORY_GRAPH,81,17,
153,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE
PUSHBUTTON "メモリ使用量の履歴",IDC_MEM_USAGE_HISTORY_GRAPH,81,75,
BEGIN
DEFPUSHBUTTON "OK",IDOK,84,178,50,14
PUSHBUTTON "キャンセル",IDCANCEL,138,178,50,14
- LTEXT "タスク マネージャの [プロセス] ページに表 示する列を選択します。",
+ LTEXT "タスク マネージャの [プロセス] ページに表示する列を選択します。",
IDC_STATIC,7,7,181,17
CONTROL "イメージ名(&I)",IDC_IMAGENAME,"Button",BS_AUTOCHECKBOX |
WS_DISABLED | WS_TABSTOP,7,28,56,10
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_NEW "新しいプログラムを実行します"
- ID_OPTIONS_ALWAYSONTOP "最小化されない限り、常にタスク マネージャがほかのすべてのウィンドウよりも手前に表 示されます"
+ ID_OPTIONS_ALWAYSONTOP "最小化されない限り、常にタスク マネージャがほかのすべてのウィンドウよりも手前に表示されます"
ID_OPTIONS_MINIMIZEONUSE
"[切り替え] 操作を実行すると、タスク マネージャが最小化されます"
ID_OPTIONS_HIDEWHENMINIMIZED "最小化されたときに、タスク マネージャを隠します"
ID_VIEW_REFRESH "[更新の頻度] の設定にかかわらず、今すぐタスク マネージャを更新します"
- ID_VIEW_LARGE "大きいアイコンを使ってタスクを表 示します"
- ID_VIEW_SMALL "小さいアイコンを使ってタスクを表 示します"
- ID_VIEW_DETAILS "各タスクの情報を表 示します"
- ID_VIEW_UPDATESPEED_HIGH "毎秒 2 回表 示を更新します"
- ID_VIEW_UPDATESPEED_NORMAL "2 秒に 1 回表 示を更新します"
- ID_VIEW_UPDATESPEED_LOW "4 秒に 1 回表 示を更新します"
+ ID_VIEW_LARGE "大きいアイコンを使ってタスクを表示します"
+ ID_VIEW_SMALL "小さいアイコンを使ってタスクを表示します"
+ ID_VIEW_DETAILS "各タスクの情報を表示します"
+ ID_VIEW_UPDATESPEED_HIGH "毎秒 2 回表示を更新します"
+ ID_VIEW_UPDATESPEED_NORMAL "2 秒に 1 回表示を更新します"
+ ID_VIEW_UPDATESPEED_LOW "4 秒に 1 回表示を更新します"
END
STRINGTABLE DISCARDABLE
BEGIN
- ID_VIEW_UPDATESPEED_PAUSED "表 示を自動的に更新しません"
+ ID_VIEW_UPDATESPEED_PAUSED "表示を自動的に更新しません"
ID_WINDOWS_TILEHORIZONTALLY
- "デスクトップ上でウィンドウを重ならないように上下に並べて表 示します"
- ID_WINDOWS_TILEVERTICALLY "デスクトップ上でウィンドウを重ならないように左右に並べて表 示します"
+ "デスクトップ上でウィンドウを重ならないように上下に並べて表示します"
+ ID_WINDOWS_TILEVERTICALLY "デスクトップ上でウィンドウを重ならないように左右に並べて表示します"
ID_WINDOWS_MINIMIZE "ウィンドウを最小化します"
ID_WINDOWS_MAXIMIZE "ウィンドウを最大化します"
- ID_WINDOWS_CASCADE "デスクトップ上でウィンドウを重ねて表 示します"
- ID_WINDOWS_BRINGTOFRONT "ウィンドウを手前に表 示しますが、切り替えません。"
- ID_HELP_TOPICS "タスク マネージャのヘルプ トピックを表 示します"
- ID_HELP_ABOUT "プログラム情報、バージョン番号、著作権を表 示します"
+ ID_WINDOWS_CASCADE "デスクトップ上でウィンドウを重ねて表示します"
+ ID_WINDOWS_BRINGTOFRONT "ウィンドウを手前に表示しますが、切り替えません。"
+ ID_HELP_TOPICS "タスク マネージャのヘルプ トピックを表示します"
+ ID_HELP_ABOUT "プログラム情報、バージョン番号、著作権を表示します"
ID_FILE_EXIT "タスク マネージャ アプリケーションを終了します"
ID_OPTIONS_SHOW16BITTASKS
- "16 ビット タスクを、関連付けられた ntvdm.exe の下に表 示します"
- ID_VIEW_SELECTCOLUMNS "[プロセス] ページに表 示する列を選択します"
- ID_VIEW_SHOWKERNELTIMES "カーネル時間をパフォーマンス グラフ上に表 示します"
+ "16 ビット タスクを、関連付けられた ntvdm.exe の下に表示します"
+ ID_VIEW_SELECTCOLUMNS "[プロセス] ページに表示する列を選択します"
+ ID_VIEW_SHOWKERNELTIMES "カーネル時間をパフォーマンス グラフ上に表示します"
ID_VIEW_CPUHISTORY_ONEGRAPHALL
- "1 つの履歴グラフで CPU 使用率の合計を表 示します"
- ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "CPU 使用率の履歴を CPU ごとにグラフで表 示します"
+ "1 つの履歴グラフで CPU 使用率の合計を表示します"
+ ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "CPU 使用率の履歴を CPU ごとにグラフで表示します"
ID_APPLICATION_PAGE_SWITCHTO
- "タスクを手前に表 示し、フォーカスを切り替えます"
+ "タスクを手前に表示し、フォーカスを切り替えます"
END
STRINGTABLE DISCARDABLE
IDS_TAB_IOWRITESBYTES "I/O 書き込みバイト数"
IDS_TAB_IOOTHERBYTES "I/O その他のバイト数"
IDS_MENU_SELECTCOLUMNS "列の選択(&S)..."
- IDS_MENU_16BITTASK "16 ビット タスクの表 示(&S)"
+ IDS_MENU_16BITTASK "16 ビット タスクの表示(&S)"
IDS_MENU_WINDOWS "ウィンドウ(&W)"
IDS_MENU_LARGEICONS "大きいアイコン(&G)"
IDS_MENU_SMALLICONS "小さいアイコン(&M)"
IDS_MENU_ONEGRAPHALLCPUS "すべての CPU で 1 グラフ(&O)"
IDS_MENU_ONEGRAPHPERCPU "CPU ごとに 1 グラフ(&P)"
IDS_MENU_CPUHISTORY "CPU 履歴(&C)"
- IDS_MENU_SHOWKERNELTIMES "カーネル時間を表 示する(&S)"
+ IDS_MENU_SHOWKERNELTIMES "カーネル時間を表示する(&S)"
IDS_CREATENEWTASK "新しいタスクの作成"
- IDS_CREATENEWTASK_DESC "実行するプログラム名、または開くフォルダやドキュメント名、インターネット リソ ース名を入力してください。"
+ IDS_CREATENEWTASK_DESC "実行するプログラム名、または開くフォルダやドキュメント名、インターネット リソース名を入力してください。"
IDS_MSG_ACCESSPROCESSAFF "プロセスの関係へのアクセスまたは設定ができません"
IDS_MSG_PROCESSONEPRO "プロセスは、少なくとも 1 つのプロセッサと関係を持たなければなりません。"
IDS_MSG_INVALIDOPTION "無効なオプション"
IDS_MSG_UNABLEDEBUGPROCESS "デバッガを添付できません"
- IDS_MSG_WARNINGDEBUG "警告: このプロセスをデバッグすると、データが失われる可能 性があります。\nデバッガを添付しますか?"
+ IDS_MSG_WARNINGDEBUG "警告: このプロセスをデバッグすると、データが失われる可能性があります。\nデバッガを添付しますか?"
IDS_MSG_TASKMGRWARNING "タスク マネージャの警告"
- IDS_MSG_WARNINGTERMINATING "警告: プロセスを終了すると、データが失われたり、システムが\n不安定になったりするなどの、予 期しない結果になることがあります。\nプロセスを終了する前に、状態またはデータを保存するかどうかの\n確認メッセージは表 示されません。プロセスを終了しますか?"
+ IDS_MSG_WARNINGTERMINATING "警告: プロセスを終了すると、データが失われたり、システムが\n不安定になったりするなどの、予期しない結果になることがあります。\nプロセスを終了する前に、状態またはデータを保存するかどうかの\n確認メッセージは表示されません。プロセスを終了しますか?"
IDS_MSG_UNABLETERMINATEPRO "プロセスを終了できません"
IDS_MSG_UNABLECHANGEPRIORITY "優先度を変更できません"
- IDS_MSG_WARNINGCHANGEPRIORITY "警告: このプロセスの優先度クラスを変更すると、システムが不安定に\nなるなど、予 期しない結果になることがあります。\n優先度クラスを変更しますか?"
+ IDS_MSG_WARNINGCHANGEPRIORITY "警告: このプロセスの優先度クラスを変更すると、システムが不安定に\nなるなど、予期しない結果になることがあります。\n優先度クラスを変更しますか?"
IDS_MSG_TRAYICONCPUUSAGE "CPU 使用率: %d%%"
IDS_STATUS_MEMUSAGE "メモリ使用量: %dKB / %dKB"
IDS_STATUS_CPUUSAGE "CPU 使用率: %3d%%"
IDD_TABSTOPS DIALOG 30, 20, 200, 110
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Tabs"
- FONT 8, "MS SHell DLg"
+ FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Tab stops", -1, 10, 10, 120, 90
COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
/*
* Turkish Resources for Wordpad
*
- * Copyright 2006 Fatih Aþýcý <fasici@linux-sevenler.org>
+ * Copyright 2006 Fatih Aşıcı <fasici@linux-sevenler.org>
+ * Copyright 2013 Erdem Ersoy (eersoy93)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
#include "wordpad.h"
- LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL
IDM_MAINMENU MENU
BEGIN
- POPUP "&Dosya"
+ POPUP "&Kütük"
BEGIN
MENUITEM "&Yeni...\tCtrl+N", ID_FILE_NEW
- MENUITEM "&Aç...\tCtrl+O", ID_FILE_OPEN
+ MENUITEM "&Aç...\tCtrl+O", ID_FILE_OPEN
MENUITEM "&Kaydet\tCtrl+S", ID_FILE_SAVE
- MENUITEM "&Farklý Kaydet...", ID_FILE_SAVEAS
+ MENUITEM "Ay&rı Kaydet...", ID_FILE_SAVEAS
MENUITEM SEPARATOR
- MENUITEM "&Print...\tCtrl+P", ID_PRINT
- MENUITEM "Print previe&w...", ID_PREVIEW
- MENUITEM "Pag&e setup...", ID_PRINTSETUP
+ MENUITEM "Ya&zdır...\tCtrl+P", ID_PRINT
+ MENUITEM "&Baskı Önizleme...", ID_PREVIEW
+ MENUITEM "&Sayfa Yapısı...", ID_PRINTSETUP
MENUITEM SEPARATOR
- MENUITEM "&Çýk", ID_FILE_EXIT
+ MENUITEM "&Çıkış", ID_FILE_EXIT
END
- POPUP "&Düzen"
+ POPUP "&Düzen"
BEGIN
MENUITEM "&Geri Al\tCtrl+Z", ID_EDIT_UNDO
MENUITEM "&Yinele\tCtrl+Y", ID_EDIT_REDO
MENUITEM SEPARATOR
- MENUITEM "Ke&s\tCtrl+X", ID_EDIT_CUT
- MENUITEM "&Kopyala\tCtrl+C", ID_EDIT_COPY
- MENUITEM "Ya&pýþtýr\tCtrl+V", ID_EDIT_PASTE
+ MENUITEM "&Kes\tCtrl+X", ID_EDIT_CUT
+ MENUITEM "&Çoğalt\tCtrl+C", ID_EDIT_COPY
+ MENUITEM "Ya&pıştır\tCtrl+V", ID_EDIT_PASTE
MENUITEM "&Sil\tDel", ID_EDIT_CLEAR
- MENUITEM "&Tümünü seç\tCtrl+A", ID_EDIT_SELECTALL
+ MENUITEM "&Tümünü Seç\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Find...\tCtrl+F", ID_FIND
- MENUITEM "Find &next\tF3", ID_FIND_NEXT
- MENUITEM "&Replace...\tCtrl+H", ID_REPLACE
+ MENUITEM "&Ara\tCtrl+F", ID_FIND
+ MENUITEM "S&onrakini Ara\tF3", ID_FIND_NEXT
+ MENUITEM "&Değiştir...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
- MENUITEM "Salt-&okunur", ID_EDIT_READONLY
- MENUITEM "&Deðiþmiþ", ID_EDIT_MODIFIED
+ MENUITEM "Sa< Okunur", ID_EDIT_READONLY
+ MENUITEM "D&eğiştirilmiş", ID_EDIT_MODIFIED
MENUITEM SEPARATOR
- POPUP "D&iðerleri"
+ POPUP "D&iğer Seçenekler"
BEGIN
- MENUITEM "Seçim &bilgisi", ID_EDIT_SELECTIONINFO
- MENUITEM "Karakter bi&çimi", ID_EDIT_CHARFORMAT
- MENUITEM "&Öntanýmlý kar. biçimi", ID_EDIT_DEFCHARFORMAT
- MENUITEM "Paragra&f biçimi", ID_EDIT_PARAFORMAT
- MENUITEM "&Metni al", ID_EDIT_GETTEXT
+ MENUITEM "&Seçim Bilgisi", ID_EDIT_SELECTIONINFO
+ MENUITEM "&Damga Biçimi", ID_EDIT_CHARFORMAT
+ MENUITEM "&Öntanımlı Damga Biçimi", ID_EDIT_DEFCHARFORMAT
+ MENUITEM "&Paragraf Biçimi", ID_EDIT_PARAFORMAT
+ MENUITEM "&Metni Al", ID_EDIT_GETTEXT
END
END
- POPUP "&View"
+ POPUP "&Görünüm"
BEGIN
- MENUITEM "&Toolbar", ID_TOGGLE_TOOLBAR
- MENUITEM "&Formatbar", ID_TOGGLE_FORMATBAR
- MENUITEM "&Ruler", ID_TOGGLE_RULER
- MENUITEM "&Statusbar", ID_TOGGLE_STATUSBAR
+ MENUITEM "&Araç Çubuğu", ID_TOGGLE_TOOLBAR
+ MENUITEM "&Biçim Çubuğu", ID_TOGGLE_FORMATBAR
+ MENUITEM "&Çizgilik", ID_TOGGLE_RULER
+ MENUITEM "&Durum Çubuğu", ID_TOGGLE_STATUSBAR
MENUITEM SEPARATOR
- MENUITEM "&Options...", ID_VIEWPROPERTIES
+ MENUITEM "A&yarlar...", ID_VIEWPROPERTIES
END
- POPUP "&Insert"
+ POPUP "&Ekle"
BEGIN
- MENUITEM "&Date and time...", ID_DATETIME
+ MENUITEM "&Tarih veya Saat...",ID_DATETIME
END
- POPUP "&Biçim"
+ POPUP "&Biçim"
BEGIN
- MENUITEM "&Font...", ID_FONTSETTINGS
- MENUITEM "&Bullet points", ID_BULLET
- MENUITEM "&Paragraph...", ID_PARAFORMAT
- MENUITEM "&Tabs...", ID_TABSTOPS
+ MENUITEM "&Yazı Türü...", ID_FONTSETTINGS
+ MENUITEM "&Madde İmi", ID_BULLET
+ MENUITEM "&Paragraf...", ID_PARAFORMAT
+ MENUITEM "&Sekmeler...", ID_TABSTOPS
POPUP "&Arkaplan"
BEGIN
- MENUITEM "S&istem\tCtrl+1", ID_BACK_1
- MENUITEM "&Sarýmtýrak\tCtrl+2", ID_BACK_2
+ MENUITEM "&Dizge Rengi\tCtrl+1", ID_BACK_1
+ MENUITEM "&Sarımtırak\tCtrl+2", ID_BACK_2
END
END
- POPUP "&Help"
+ POPUP "&Yardım"
BEGIN
- MENUITEM "&About Wine Wordpad", ID_ABOUT
+ MENUITEM "&Hakkında", ID_ABOUT
END
END
BEGIN
POPUP ""
BEGIN
- MENUITEM "Ke&s", ID_EDIT_CUT
- MENUITEM "&Kopyala", ID_EDIT_COPY
- MENUITEM "Ya&pýþtýr", ID_EDIT_PASTE
+ MENUITEM "&Kes", ID_EDIT_CUT
+ MENUITEM "&Çoğalt", ID_EDIT_COPY
+ MENUITEM "&Yapıştır", ID_EDIT_PASTE
MENUITEM SEPARATOR
- MENUITEM "&Bullet points", ID_BULLET
- MENUITEM "&Paragraph...", ID_PARAFORMAT
+ MENUITEM "&Madde İmi", ID_BULLET
+ MENUITEM "&Paragraf...", ID_PARAFORMAT
END
END
BEGIN
POPUP ""
BEGIN
- MENUITEM "Siyah", ID_COLOR_BLACK
- MENUITEM "Koyu Kýrmýzý",ID_COLOR_MAROON
- MENUITEM "Yeþil", ID_COLOR_GREEN
- MENUITEM "Koyu Sarý", ID_COLOR_OLIVE
- MENUITEM "Koyu Mavi", ID_COLOR_NAVY
- MENUITEM "Mor", ID_COLOR_PURPLE
- MENUITEM "Deniz Mavisi",ID_COLOR_TEAL
- MENUITEM "Gri", ID_COLOR_GRAY
- MENUITEM "Gümüþ", ID_COLOR_SILVER
- MENUITEM "Kýrmýzý", ID_COLOR_RED
- MENUITEM "Parlak Yeþil",ID_COLOR_LIME
- MENUITEM "Sarý", ID_COLOR_YELLOW
- MENUITEM "Mavi", ID_COLOR_BLUE
- MENUITEM "Pembe", ID_COLOR_FUCHSIA
- MENUITEM "Turkuaz", ID_COLOR_AQUA
- MENUITEM "Beyaz", ID_COLOR_WHITE
- MENUITEM "Automatic", ID_COLOR_AUTOMATIC
+ MENUITEM "Kara", ID_COLOR_BLACK
+ MENUITEM "Vişne Çürüğü", ID_COLOR_MAROON
+ MENUITEM "Yeşil", ID_COLOR_GREEN
+ MENUITEM "Zeytinyağı", ID_COLOR_OLIVE
+ MENUITEM "Deniz Mavisi", ID_COLOR_NAVY
+ MENUITEM "Mor", ID_COLOR_PURPLE
+ MENUITEM "Çamurcun", ID_COLOR_TEAL
+ MENUITEM "Kül Rengi", ID_COLOR_GRAY
+ MENUITEM "Gümüş", ID_COLOR_SILVER
+ MENUITEM "Al", ID_COLOR_RED
+ MENUITEM "Misket limonu", ID_COLOR_LIME
+ MENUITEM "Sarı", ID_COLOR_YELLOW
+ MENUITEM "Mavi", ID_COLOR_BLUE
+ MENUITEM "Küpe Çiçeği", ID_COLOR_FUCHSIA
+ MENUITEM "Turkuaz", ID_COLOR_AQUA
+ MENUITEM "Beyaz", ID_COLOR_WHITE
+ MENUITEM "Dizge Rengi", ID_COLOR_AUTOMATIC
END
END
+
+ IDD_DATETIME DIALOG 30, 20, 130, 80
+ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+ CAPTION "Zaman"
+ FONT 10, "MS Sans Serif"
+ BEGIN
+ LTEXT "Var Olan Biçimler:",-1,3,2,100,15
+ LISTBOX IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY
+ PUSHBUTTON "&Tamam",IDOK,87,12,40,12
+ PUSHBUTTON "&Vazgeç",IDCANCEL,87,26,40,12
+ END
+
+ IDD_NEWFILE DIALOG 30, 20, 140, 80
+ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+ CAPTION "Yeni"
+ FONT 10, "MS Sans Serif"
+ BEGIN
+ LTEXT "Yeni belge türü:",-1,3,2,100,15
+ LISTBOX IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT
+ PUSHBUTTON "&Tamam",IDOK,97,12,40,12
+ PUSHBUTTON "&Vazgeç",IDCANCEL,97,26,40,12
+ END
+
+ IDD_PARAFORMAT DIALOG 30, 20, 200, 110
+ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+ CAPTION "Paragraf Düzeni"
+ FONT 8, "MS Shell Dlg"
+ BEGIN
+ GROUPBOX "Pay", -1, 10, 10, 120, 68
+ LTEXT "Sol", -1, 15, 22, 40, 13
+ EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13
+ LTEXT "Sağ", -1, 15, 40, 40, 13
+ EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13
+ LTEXT "İlk satır", -1, 15, 58, 40, 13
+ EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13
+ LTEXT "Hizâlama", -1, 15, 87, 40, 13
+ COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST
+ PUSHBUTTON "&Tamam", IDOK, 137, 15, 50, 15
+ PUSHBUTTON "&Vazgeç", IDCANCEL, 137, 33, 50, 15
+ END
+
+ IDD_TABSTOPS DIALOG 30, 20, 200, 110
+ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+ CAPTION "Sekmeler"
+ FONT 8, "MS Shell Dlg"
+ BEGIN
+ GROUPBOX "Sekme Durakları", -1, 10, 10, 120, 90
+ COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
+ DEFPUSHBUTTON "&Ekle", ID_TAB_ADD, 20, 80, 45, 15
+ PUSHBUTTON "&Sil", ID_TAB_DEL, 72, 80, 45, 15
+ PUSHBUTTON "&Tamam", IDOK, 137, 15, 50, 15
+ PUSHBUTTON "&Vazgeç", IDCANCEL, 137, 33, 50, 15
+ PUSHBUTTON "&Hepsini Sil", ID_TAB_EMPTY, 137, 51, 50, 15
+ END
+
+ IDD_FORMATOPTS DIALOG 0, 0, 280, 110
+ STYLE DS_SYSMODAL
+ CAPTION ""
+ FONT 8, "MS Shell Dlg"
+ BEGIN
+ GROUPBOX "Satır Kaydırma", -1, 10, 10, 130, 85
+ RADIOBUTTON "&Kaydırma yok", IDC_PAGEFMT_WN, 18, 25, 117, 15
+ RADIOBUTTON "&Pencere kenarlığına kadar", IDC_PAGEFMT_WW, 18, 45, 117, 15
+ RADIOBUTTON "&Çizgiliğe kadar", IDC_PAGEFMT_WM, 18, 65, 117, 15
+ GROUPBOX "Çubuklar", -1, 150, 10, 120, 85
+ CHECKBOX "&Araç Çubuğu", IDC_PAGEFMT_TB, 160, 20, 80, 15
+ CHECKBOX "&Biçim Çubuğu", IDC_PAGEFMT_FB, 160, 38, 80, 15
+ CHECKBOX "Ç&izgilik", IDC_PAGEFMT_RU, 160, 56, 80, 15
+ CHECKBOX "&Durum Çubuğu", IDC_PAGEFMT_SB, 160, 74, 80, 15
+ LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0
+ END
+
+ STRINGTABLE
+ BEGIN
+ STRING_ALL_FILES, "Tüm Kütükler (*.*)"
+ STRING_TEXT_FILES_TXT, "Metin Belgeleri (*.txt)"
+ STRING_TEXT_FILES_UNICODE_TXT, "Unicode Metin Belgeleri (*.txt)"
+ STRING_RICHTEXT_FILES_RTF, "Zengin Metin Belgeleri (*.rtf)"
+ STRING_NEWFILE_RICHTEXT, "Zengin Metin Belgesi"
+ STRING_NEWFILE_TXT, "Metin Belgesi"
+ STRING_NEWFILE_TXT_UNICODE, "Unicode Metin Belgesi"
+ STRING_PRINTER_FILES_PRN, "Yazıcı Dosyaları (*.PRN)"
+ END
+
+ STRINGTABLE
+ BEGIN
+ STRING_ALIGN_LEFT, "Sol"
+ STRING_ALIGN_RIGHT, "Sağ"
+ STRING_ALIGN_CENTER, "Orta"
+ END
+
+ STRINGTABLE
+ BEGIN
+ STRING_VIEWPROPS_TITLE, "Ayarlar"
+ STRING_VIEWPROPS_TEXT, "Metin"
+ STRING_VIEWPROPS_RICHTEXT, "Zengin Metin"
+ END
+
+ STRINGTABLE
+ BEGIN
+ STRING_PREVIEW_PRINT, "Yazdır"
+ STRING_PREVIEW_NEXTPAGE, "Sonraki Sayfa"
+ STRING_PREVIEW_PREVPAGE, "Önceki Sayfa"
+ STRING_PREVIEW_TWOPAGES, "İkili"
+ STRING_PREVIEW_ONEPAGE, "Tekli"
+ STRING_PREVIEW_ZOOMIN, "Yakınlaştır"
+ STRING_PREVIEW_ZOOMOUT, "Uzaklaştır"
+ STRING_PREVIEW_CLOSE, "Tamam"
+ STRING_PREVIEW_PAGE, "Sayfa"
+ STRING_PREVIEW_PAGES, "Sayfalar"
+ STRING_UNITS_CM, "cm"
+ STRING_UNITS_IN, "in"
+ STRING_UNITS_INCH, "inç"
+ STRING_UNITS_PT, "pt"
+ END
+
+ STRINGTABLE
+ BEGIN
+ STRING_DEFAULT_FILENAME, "Adsız"
+ STRING_PROMPT_SAVE_CHANGES, "'%s' için değişiklikler kaydedilsin mi?"
+ STRING_SEARCH_FINISHED, "Belge araması tamamlandı."
+ STRING_LOAD_RICHED_FAILED, "Zengin metin kitaplığının yüklenmesi başarısız oldu."
+ STRING_SAVE_LOSEFORMATTING, "Eğer düz metin belgesi olarak kaydedilirse yapılan tüm değişiklikler kaybolacak. Devam etmek istiyor musunuz?"
+ STRING_INVALID_NUMBER, "Geçersiz sayı biçimi."
+ STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE içeren belgeler desteklenmiyor."
+ STRING_WRITE_FAILED, "Belgenin kaydedilmesi başarısız oldu."
+ STRING_WRITE_ACCESS_DENIED, "Bu kütüğü kaydetme yetkiniz yok."
+ STRING_OPEN_FAILED, "Belgenin açılması başarısız oldu."
+ STRING_OPEN_ACCESS_DENIED, "Bu kütüğü açma yetkiniz yok."
+ STRING_PRINTING_NOT_IMPLEMENTED, "Yazdırma seçeneği daha tamamlanmadı."
+ STRING_MAX_TAB_STOPS, "En fazla 32 adet sekme durağı ekleyebilirsiniz."
+ END
#ifdef LANGUAGE_PL_PL
#include "Pl.rc"
#endif
- #ifdef LANGUAGE_TR_TR
- #include "Tr.rc"
- #endif
/* UTF-8 */
#ifdef LANGUAGE_DA_DK
#ifdef LANGUAGE_SV_SE
#include "Sv.rc"
#endif
+ #ifdef LANGUAGE_TR_TR
+ #include "Tr.rc"
+ #endif
#ifdef LANGUAGE_UK_UA
#include "Uk.rc"
#endif
/*
- * Copyright 2005
+ * Turkish language support
*
- * Stefan Leichter
+ * Copyright (C) 2013 Erdem Ersoy (eersoy93)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
- #define WINE_FILENAME_STR "urlmon.dll"
- #define WINE_FILEVERSION 6,0,2800,1485
- #define WINE_FILEVERSION_STR "6.0.2800.1485"
- #define WINE_PRODUCTVERSION 6,0,2800,1485
- #define WINE_PRODUCTVERSION_STR "6.0.2800.1485"
+ #include "resources.h"
- #include "wine/wine_common_ver.rc"
+ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+ STRINGTABLE
+ {
+ IDS_FAILED, "Zengin Metin Düzenleyicisi'nin açılması başarısız oldu."
+ }
#ifdef LANGUAGE_SR_SP
#include "Sr.rc"
#endif
+ #ifdef LANGUAGE_TR_TR
+ #include "Tr.rc"
+ #endif
#ifdef LANGUAGE_UK_UA
#include "Uk.rc"
#endif
if (size > 512)
{
+ TCHAR *old_evar = evar;
evar = cmd_realloc(evar,size * sizeof(TCHAR) );
if (evar!=NULL)
size = GetEnvironmentVariable (_T("COPYCMD"), evar, size);
else
+ {
size=0;
+ evar = old_evar;
+ }
}
/* check see if we did get any env variable */
{
/* skip the first character */
ConOutPuts(param + 1);
- ConOutPuts(_T("\n"));
+ ConOutPuts(_T("\r\n"));
}
return 0;
}
INT ret;
File1 = cmd_alloc(sizeof(FileName));
+ if (!File1)
+ return 0;
+
File2 = cmd_alloc(sizeof(FileName));
- if(!File1 || !File2)
+ if(!File2)
+ {
+ cmd_free(File1);
return 0;
+ }
memcpy(File1,arg1,sizeof(FileName));
memcpy(File2,arg2,sizeof(FileName));
/* aseemble a list of all files names */
do
{
+ FileName * oldFileList = FileList;
+
if(!_tcscmp (file.cFileName, _T(".")) ||
!_tcscmp (file.cFileName, _T("..")))
continue;
/* Don't show files when they are doing 'cd' or 'rd' */
if(!ShowAll &&
- file.dwFileAttributes != 0xFFFFFFFF &&
- !(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+ file.dwFileAttributes != 0xFFFFFFFF &&
+ !(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
continue;
}
if(FileList == NULL)
{
+ /* Don't leak old buffer */
+ cmd_free(oldFileList);
/* Assemble the orginal string and return */
_tcscpy(strOut,szOrginal);
FindClose(hFile);
} while(FindNextFile(hFile,&file));
- FindClose(hFile);
+ FindClose(hFile);
/* Check the size of the list to see if we
found any matches */
IDS_UsageMessage, "%s\n\n使用法: regsvr32 [/u] [/s] [/c] [/n] [/i[:コマンド ライン]] DLL名\n\
/u - サーバーを登録解除する\n\
- /s - サイレント; メッセージ ボックスを表 示しない\n\
- /c - コンソ ール出力\n\
- /i - 省略可能 な [コマンド ライン] を引数として DllInstall を呼び出す; /u と併用した場合は dll uninstall を呼び出す\n\
+ /s - サイレント; メッセージ ボックスを表示しない\n\
+ /c - コンソール出力\n\
+ /i - 省略可能な [コマンド ライン] を引数として DllInstall を呼び出す; /u と併用した場合は dll uninstall を呼び出す\n\
/n - DllRegisterServer を呼び出さない; このオプションは /i と併用する必要がある"
IDS_NoDllSpecified, "DLL 名が指定されていません。"
IDS_DllNotLoaded, "LoadLibrary('%s') に失敗しました。\nGetLastError は 0x%08x を返しました。"
IDS_MissingEntry, "%s を読み込みましたが、%s エントリ ポイントが見つかりませんでした。\n\n\
- %s はエクスポートされていないか、%s の不正なバージョンがメモリ上にある可能 性があります。検出や削除をするため、PView の使用を検討してください。"
+ %s はエクスポートされていないか、%s の不正なバージョンがメモリ上にある可能性があります。検出や削除をするため、PView の使用を検討してください。"
IDS_FailureMessage, "%s (%s の) に失敗しました。\n返ってきたコード: 0x%08x"
/*
* Uncomment the line below to start services
- * using the SERVICE_START_PENDING state
+ * using the SERVICE_START_PENDING state.
*/
- // #define USE_SERVICE_START_PENDING
+ #define USE_SERVICE_START_PENDING
/*
* Uncomment the line below to use asynchronous IO operations
static RTL_RESOURCE DatabaseLock;
static DWORD ResumeCount = 1;
+ /* The critical section synchronizes service controls commands */
static CRITICAL_SECTION ControlServiceCriticalSection;
static DWORD PipeTimeout = 30000; /* 30 Seconds */
DWORD
ScmCreateNewServiceRecord(LPCWSTR lpServiceName,
- PSERVICE *lpServiceRecord)
+ PSERVICE* lpServiceRecord)
{
PSERVICE lpService = NULL;
if (Service->Status.dwServiceType == SERVICE_KERNEL_DRIVER)
{
- RtlInitUnicodeString(&DirName,
- L"\\Driver");
+ RtlInitUnicodeString(&DirName, L"\\Driver");
}
- else
+ else // if (Service->Status.dwServiceType == SERVICE_FILE_SYSTEM_DRIVER)
{
- RtlInitUnicodeString(&DirName,
- L"\\FileSystem");
+ RtlInitUnicodeString(&DirName, L"\\FileSystem");
}
InitializeObjectAttributes(&ObjectAttributes,
}
BufferLength = sizeof(OBJECT_DIRECTORY_INFORMATION) +
- 2 * MAX_PATH * sizeof(WCHAR);
+ 2 * MAX_PATH * sizeof(WCHAR);
DirInfo = HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
BufferLength);
static DWORD
ScmSendStartCommand(PSERVICE Service,
DWORD argc,
- LPWSTR *argv)
+ LPWSTR* argv)
{
PSCM_CONTROL_PACKET ControlPacket;
SCM_REPLY_PACKET ReplyPacket;
static DWORD
ScmStartUserModeService(PSERVICE Service,
DWORD argc,
- LPWSTR *argv)
+ LPWSTR* argv)
{
PROCESS_INFORMATION ProcessInformation;
STARTUPINFOW StartupInfo;
return ScmSendStartCommand(Service, argc, argv);
}
+ /* Otherwise start its process */
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
ZeroMemory(&ProcessInformation, sizeof(ProcessInformation));
if (dwError == ERROR_SUCCESS)
{
/* Send start command */
- dwError = ScmSendStartCommand(Service,
- argc,
- argv);
+ dwError = ScmSendStartCommand(Service, argc, argv);
}
else
{
}
- DWORD
- ScmStartService(PSERVICE Service, DWORD argc, LPWSTR *argv)
+ static DWORD
+ ScmLoadService(PSERVICE Service,
+ DWORD argc,
+ LPWSTR* argv)
{
PSERVICE_GROUP Group = Service->lpGroup;
DWORD dwError = ERROR_SUCCESS;
LPCWSTR ErrorLogStrings[2];
WCHAR szErrorBuffer[32];
- DPRINT("ScmStartService() called\n");
-
+ DPRINT("ScmLoadService() called\n");
DPRINT("Start Service %p (%S)\n", Service, Service->lpServiceName);
- EnterCriticalSection(&ControlServiceCriticalSection);
-
if (Service->Status.dwCurrentState != SERVICE_STOPPED)
{
DPRINT("Service %S is already running!\n", Service->lpServiceName);
- LeaveCriticalSection(&ControlServiceCriticalSection);
return ERROR_SERVICE_ALREADY_RUNNING;
}
Service->Status.dwCurrentState = SERVICE_RUNNING;
}
}
- else
+ else // if (Service->Status.dwServiceType & (SERVICE_WIN32 | SERVICE_INTERACTIVE_PROCESS))
{
/* Start user-mode service */
dwError = ScmCreateOrReferenceServiceImage(Service);
}
}
- LeaveCriticalSection(&ControlServiceCriticalSection);
-
- DPRINT("ScmStartService() done (Error %lu)\n", dwError);
+ DPRINT("ScmLoadService() done (Error %lu)\n", dwError);
if (dwError == ERROR_SUCCESS)
{
}
+ DWORD
+ ScmStartService(PSERVICE Service,
+ DWORD argc,
+ LPWSTR* argv)
+ {
+ DWORD dwError = ERROR_SUCCESS;
+ SC_RPC_LOCK Lock = NULL;
+
+ DPRINT("ScmStartService() called\n");
+ DPRINT("Start Service %p (%S)\n", Service, Service->lpServiceName);
+
+ /* Acquire the service control critical section, to synchronize starts */
+ EnterCriticalSection(&ControlServiceCriticalSection);
+
+ /*
+ * Acquire the user service start lock while the service is starting, if
+ * needed (i.e. if we are not starting it during the initialization phase).
+ * If we don't success, bail out.
+ */
+ if (!ScmInitialize)
+ {
+ dwError = ScmAcquireServiceStartLock(TRUE, &Lock);
+ if (dwError != ERROR_SUCCESS) goto done;
+ }
+
+ /* Really start the service */
+ dwError = ScmLoadService(Service, argc, argv);
+
+ /* Release the service start lock, if needed, and the critical section */
+ if (Lock) ScmReleaseServiceStartLock(&Lock);
+
+ done:
+ LeaveCriticalSection(&ControlServiceCriticalSection);
+
+ DPRINT("ScmStartService() done (Error %lu)\n", dwError);
+
+ return dwError;
+ }
+
+
VOID
ScmAutoStartServices(VOID)
{
+ DWORD dwError = ERROR_SUCCESS;
+ SC_RPC_LOCK Lock = NULL;
+
PLIST_ENTRY GroupEntry;
PLIST_ENTRY ServiceEntry;
PSERVICE_GROUP CurrentGroup;
PSERVICE CurrentService;
WCHAR szSafeBootServicePath[MAX_PATH];
- DWORD dwError;
HKEY hKey;
ULONG i;
+ /* Acquire the service control critical section, to synchronize starts */
+ EnterCriticalSection(&ControlServiceCriticalSection);
+
+ /*
+ * Acquire the user service start lock while the service is starting, if
+ * needed (i.e. if we are not starting it during the initialization phase).
+ * If we don't success, bail out.
+ */
+ if (!ScmInitialize)
+ {
+ /*
+ * Actually this code is never executed since we are called
+ * at initialization time, so that ScmInitialize == TRUE.
+ * But keep the code here if someday we are called later on
+ * for whatever reason...
+ */
+ dwError = ScmAcquireServiceStartLock(TRUE, &Lock);
+ if (dwError != ERROR_SUCCESS) goto done;
+ }
+
+
/* Clear 'ServiceVisited' flag (or set if not to start in Safe Mode) */
ServiceEntry = ServiceListHead.Flink;
while (ServiceEntry != &ServiceListHead)
(CurrentService->dwTag == CurrentGroup->TagArray[i]))
{
CurrentService->ServiceVisited = TRUE;
- ScmStartService(CurrentService, 0, NULL);
+ ScmLoadService(CurrentService, 0, NULL);
}
ServiceEntry = ServiceEntry->Flink;
(CurrentService->ServiceVisited == FALSE))
{
CurrentService->ServiceVisited = TRUE;
- ScmStartService(CurrentService, 0, NULL);
+ ScmLoadService(CurrentService, 0, NULL);
}
ServiceEntry = ServiceEntry->Flink;
(CurrentService->ServiceVisited == FALSE))
{
CurrentService->ServiceVisited = TRUE;
- ScmStartService(CurrentService, 0, NULL);
+ ScmLoadService(CurrentService, 0, NULL);
}
ServiceEntry = ServiceEntry->Flink;
(CurrentService->ServiceVisited == FALSE))
{
CurrentService->ServiceVisited = TRUE;
- ScmStartService(CurrentService, 0, NULL);
+ ScmLoadService(CurrentService, 0, NULL);
}
ServiceEntry = ServiceEntry->Flink;
CurrentService->ServiceVisited = FALSE;
ServiceEntry = ServiceEntry->Flink;
}
+
+
+ /* Release the service start lock, if needed, and the critical section */
+ if (Lock) ScmReleaseServiceStartLock(&Lock);
+
+ done:
+ LeaveCriticalSection(&ControlServiceCriticalSection);
}
DWORD dwError = ERROR_SUCCESS;
PSERVICE_HANDLE hSvc;
PSERVICE lpService = NULL;
- SC_RPC_LOCK Lock = NULL;
#ifndef NDEBUG
DWORD i;
if (lpService->bDeleted)
return ERROR_SERVICE_MARKED_FOR_DELETE;
- /* Acquire the service start lock until the service has been started */
- dwError = ScmAcquireServiceStartLock(TRUE, &Lock);
- if (dwError != ERROR_SUCCESS)
- return dwError;
-
/* Start the service */
dwError = ScmStartService(lpService, argc, (LPWSTR*)argv);
- /* Release the service start lock */
- ScmReleaseServiceStartLock(&Lock);
-
return dwError;
}
DWORD dwError = ERROR_SUCCESS;
PSERVICE_HANDLE hSvc;
PSERVICE lpService = NULL;
- SC_RPC_LOCK Lock = NULL;
LPWSTR *lpVector = NULL;
DWORD i;
DWORD dwLength;
}
}
- /* Acquire the service start lock until the service has been started */
- dwError = ScmAcquireServiceStartLock(TRUE, &Lock);
- if (dwError != ERROR_SUCCESS)
- goto done;
-
/* Start the service */
dwError = ScmStartService(lpService, argc, lpVector);
- /* Release the service start lock */
- ScmReleaseServiceStartLock(&Lock);
-
done:
/* Free the Unicode argument vector */
if (lpVector != NULL)
#define PIPE_BUFSIZE 1024
#define PIPE_TIMEOUT 1000
+ /* Defined in include/reactos/services/services.h */
+ // #define SCM_START_EVENT L"SvcctrlStartEvent_A3752DX"
+ #define SCM_AUTOSTARTCOMPLETE_EVENT L"SC_AutoStartComplete"
+ #define LSA_RPC_SERVER_ACTIVE L"LSA_RPC_SERVER_ACTIVE"
+
+ BOOL ScmInitialize = FALSE;
BOOL ScmShutdown = FALSE;
static HANDLE hScmShutdownEvent = NULL;
BOOL
- ScmCreateStartEvent(PHANDLE StartEvent)
+ ScmCreateControlEvent(PHANDLE Event,
+ LPCWSTR Name,
+ DWORD dwDesiredAccess)
{
+ /*
+ * This function creates a generic non-inheritable event
+ * and return a handle to the caller. The caller must
+ * close this handle afterwards.
+ */
+
HANDLE hEvent;
- hEvent = CreateEventW(NULL,
- TRUE,
- FALSE,
- L"SvcctrlStartEvent_A3752DX");
+ hEvent = CreateEventW(NULL, TRUE, FALSE, Name);
if (hEvent == NULL)
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
- hEvent = OpenEventW(EVENT_ALL_ACCESS,
- FALSE,
- L"SvcctrlStartEvent_A3752DX");
- if (hEvent == NULL)
- {
- return FALSE;
- }
- }
- else
- {
- return FALSE;
+ hEvent = OpenEventW(dwDesiredAccess, FALSE, Name);
}
}
- *StartEvent = hEvent;
-
- return TRUE;
+ if (hEvent)
+ {
+ DPRINT("SERVICES: Created event %S with handle %x\n", Name, hEvent);
+ *Event = hEvent;
+ return TRUE;
+ }
+ else
+ {
+ DPRINT1("SERVICES: Failed to create event %S (Error %lu)\n", Name, GetLastError());
+ return FALSE;
+ }
}
ScmWaitForLsa(VOID)
{
HANDLE hEvent;
- DWORD dwError;
- hEvent = CreateEventW(NULL,
- TRUE,
- FALSE,
- L"LSA_RPC_SERVER_ACTIVE");
- if (hEvent == NULL)
+ if (!ScmCreateControlEvent(&hEvent,
+ LSA_RPC_SERVER_ACTIVE,
+ SYNCHRONIZE))
{
- dwError = GetLastError();
- DPRINT1("Failed to create the notication event (Error %lu)\n", dwError);
-
- if (dwError == ERROR_ALREADY_EXISTS)
- {
- hEvent = OpenEventW(SYNCHRONIZE,
- FALSE,
- L"LSA_RPC_SERVER_ACTIVE");
- if (hEvent == NULL)
- {
- DPRINT1("Could not open the notification event (Error %lu)\n", GetLastError());
- return;
- }
- }
+ DPRINT1("Failed to create the notification event (Error %lu)\n", GetLastError());
}
+ else
+ {
+ DPRINT("Wait for the LSA server!\n");
+ WaitForSingleObject(hEvent, INFINITE);
+ DPRINT("LSA server running!\n");
- DPRINT("Wait for the LSA server!\n");
- WaitForSingleObject(hEvent, INFINITE);
- DPRINT("LSA server running!\n");
-
- CloseHandle(hEvent);
+ CloseHandle(hEvent);
+ }
DPRINT("ScmWaitForLsa() done\n");
}
int nShowCmd)
{
HANDLE hScmStartEvent = NULL;
+ HANDLE hScmAutoStartCompleteEvent = NULL;
SC_RPC_LOCK Lock = NULL;
BOOL bCanDeleteNamedPipeCriticalSection = FALSE;
DWORD dwError;
DPRINT("SERVICES: Service Control Manager\n");
- /* Create start event */
- if (!ScmCreateStartEvent(&hScmStartEvent))
+ /* We are initializing ourselves */
+ ScmInitialize = TRUE;
+
+ /* Create the start event */
+ if (!ScmCreateControlEvent(&hScmStartEvent,
+ SCM_START_EVENT,
+ EVENT_ALL_ACCESS))
{
- DPRINT1("SERVICES: Failed to create start event\n");
+ DPRINT1("SERVICES: Failed to create the start event\n");
goto done;
}
+ DPRINT("SERVICES: Created start event with handle %p.\n", hScmStartEvent);
- DPRINT("SERVICES: created start event with handle %p.\n", hScmStartEvent);
+ /* Create the auto-start complete event */
+ if (!ScmCreateControlEvent(&hScmAutoStartCompleteEvent,
+ SCM_AUTOSTARTCOMPLETE_EVENT,
+ EVENT_ALL_ACCESS))
+ {
+ DPRINT1("SERVICES: Failed to create the auto-start complete event\n");
+ goto done;
+ }
+ DPRINT("SERVICES: created auto-start complete event with handle %p.\n", hScmAutoStartCompleteEvent);
/* Create the shutdown event */
- hScmShutdownEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+ hScmShutdownEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
if (hScmShutdownEvent == NULL)
{
DPRINT1("SERVICES: Failed to create shutdown event\n");
/* Read the control set values */
if (!ScmGetControlSetValues())
{
- DPRINT1("SERVICES: failed to read the control set values\n");
+ DPRINT1("SERVICES: Failed to read the control set values\n");
goto done;
}
dwError = ScmCreateServiceDatabase();
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("SERVICES: failed to create SCM database (Error %lu)\n", dwError);
+ DPRINT1("SERVICES: Failed to create SCM database (Error %lu)\n", dwError);
goto done;
}
+ /* Wait for the LSA server */
+ ScmWaitForLsa();
+
/* Update the services database */
ScmGetBootAndSystemDriverState();
- /* Register the Service Control Manager process with CSRSS */
+ /* Register the Service Control Manager process with the ReactOS Subsystem */
if (!RegisterServicesProcess(GetCurrentProcessId()))
{
DPRINT1("SERVICES: Could not register SCM process\n");
goto done;
}
- /* Acquire the service start lock until autostart services have been started */
+ /*
+ * Acquire the user service start lock until
+ * auto-start services have been started.
+ */
dwError = ScmAcquireServiceStartLock(TRUE, &Lock);
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("SERVICES: failed to acquire the service start lock (Error %lu)\n", dwError);
+ DPRINT1("SERVICES: Failed to acquire the service start lock (Error %lu)\n", dwError);
goto done;
}
/* Start the RPC server */
ScmStartRpcServer();
- DPRINT("SERVICES: Initialized.\n");
-
/* Signal start event */
SetEvent(hScmStartEvent);
+ DPRINT("SERVICES: Initialized.\n");
+
/* Register event handler (used for system shutdown) */
SetConsoleCtrlHandler(ShutdownHandlerRoutine, TRUE);
- /* Wait for the LSA server */
- ScmWaitForLsa();
-
/* Start auto-start services */
ScmAutoStartServices();
+ /* Signal auto-start complete event */
+ SetEvent(hScmAutoStartCompleteEvent);
+
/* FIXME: more to do ? */
/* Release the service start lock */
ScmReleaseServiceStartLock(&Lock);
+ /* Initialization finished */
+ ScmInitialize = FALSE;
+
DPRINT("SERVICES: Running.\n");
/* Wait until the shutdown event gets signaled */
if (hScmShutdownEvent != NULL)
CloseHandle(hScmShutdownEvent);
+ /* Close the auto-start complete event */
+ if (hScmAutoStartCompleteEvent != NULL)
+ CloseHandle(hScmAutoStartCompleteEvent);
+
/* Close the start event */
if (hScmStartEvent != NULL)
CloseHandle(hScmStartEvent);
DPRINT("SERVICES: Finished.\n");
ExitThread(0);
-
return 0;
}
extern LIST_ENTRY ServiceListHead;
extern LIST_ENTRY GroupListHead;
extern LIST_ENTRY ImageListHead;
+ extern BOOL ScmInitialize;
extern BOOL ScmShutdown;
#common hives
add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/txtsetup.sif DESTINATION reactos NO_CAB FOR bootcd regtest)
- add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivecls.inf DESTINATION reactos NO_CAB NAME_ON_CD hivecls.inf FOR bootcd regtest)
- add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivedef.inf DESTINATION reactos NO_CAB NAME_ON_CD hivedef.inf FOR bootcd regtest)
- add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivesft.inf DESTINATION reactos NO_CAB NAME_ON_CD hivesft.inf FOR bootcd regtest)
- add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivesys.inf DESTINATION reactos NO_CAB NAME_ON_CD hivesys.inf FOR bootcd regtest)
+ add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivecls.inf DESTINATION reactos NO_CAB FOR bootcd regtest)
+ add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivedef.inf DESTINATION reactos NO_CAB FOR bootcd regtest)
+ add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivesft.inf DESTINATION reactos NO_CAB FOR bootcd regtest)
+ add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivesys.inf DESTINATION reactos NO_CAB FOR bootcd regtest)
# livecd hives
list(APPEND CD_HIVES
--- /dev/null
+[Version]\r
+Signature="$ReactOS$"\r
+\r
+[AddReg]\r
+\r
+HKCU,"Control Panel",,0x00000012\r
+\r
+; Accessibility\r
+HKCU,"Control Panel\Accessibility",,0x00000012\r
+HKCU,"Control Panel\Accessibility\Keyboard Preference",,0x00000012\r
+HKCU,"Control Panel\Accessibility\Keyboard Preference","On",2,"0"\r
+HKCU,"Control Panel\Accessibility\HighContrast","Flags",2,"126"\r
+HKCU,"Control Panel\Accessibility\HighContrast","High Contrast Scheme",2,"High Contrast Black (large)"\r
+HKCU,"Control Panel\Accessibility\Keyboard Response","AutoRepeatDelay",2,"1000"\r
+HKCU,"Control Panel\Accessibility\Keyboard Response","AutoRepeatRate",2,"500"\r
+HKCU,"Control Panel\Accessibility\Keyboard Response","BounceTime",2,"0"\r
+HKCU,"Control Panel\Accessibility\Keyboard Response","DelayBeforeAcceptance",2,"1000"\r
+HKCU,"Control Panel\Accessibility\Keyboard Response","Flags",2,"126"\r
+HKCU,"Control Panel\Accessibility\MouseKeys","Flags",2,"62"\r
+HKCU,"Control Panel\Accessibility\MouseKeys","MaximumSpeed",2,"80"\r
+HKCU,"Control Panel\Accessibility\MouseKeys","TimeToMaximumSpeed",2,"3000"\r
+HKCU,"Control Panel\Accessibility\ShowSounds","On",2,"0"\r
+HKCU,"Control Panel\Accessibility\SoundSentry","Flags",2,"2"\r
+HKCU,"Control Panel\Accessibility\SoundSentry","FSTextEffect",2,"0"\r
+HKCU,"Control Panel\Accessibility\SoundSentry","WindowsEffect",2,"1"\r
+HKCU,"Control Panel\Accessibility\StickyKeys","Flags",2,"510"\r
+HKCU,"Control Panel\Accessibility\TimeOut","Flags",2,"2"\r
+HKCU,"Control Panel\Accessibility\TimeOut","TimeToWait",2,"300000"\r
+HKCU,"Control Panel\Accessibility\ToggleKeys","Flags",2,"62"\r
+HKCU,"Control Panel\Accessibility\Blind Access","On",2,"0"\r
+\r
+HKCU,"Control Panel\Mouse","MouseTrails",0x00000002,"0"\r
+HKCU,"Control Panel\Mouse","SnapToDefaultButton",0x00000002,"0"\r
+HKCU,"Control Panel\Mouse","MouseSpeed",0x00000002,"1"\r
+HKCU,"Control Panel\Mouse","MouseThreshold1",0x00000002,"6"\r
+HKCU,"Control Panel\Mouse","MouseThreshold2",0x00000002,"10"\r
+HKCU,"Control Panel\Mouse","DoubleClickSpeed",0x00000002,"500"\r
+HKCU,"Control Panel\Mouse","SwapMouseButtons",0x00000002,"0"\r
+HKCU,"Control Panel\Mouse","MouseSensitivity",0x00000002,"10"\r
+HKCU,"Control Panel\Mouse","MouseHoverTime",0x00000002,"400"\r
+HKCU,"Control Panel\Mouse","MouseHoverWidth",0x00000002,"4"\r
+HKCU,"Control Panel\Mouse","MouseHoverHeight",0x00000002,"4"\r
+HKCU,"Control Panel\Mouse","DoubleClickWidth",0x00000002,"4"\r
+HKCU,"Control Panel\Mouse","DoubleClickHeight",0x00000002,"4"\r
+\r
+HKCU,"Control Panel\Keyboard","InitialKeyboardIndicators",2,"0x80000000"\r
+HKCU,"Control Panel\Keyboard","KeyboardDelay",2,"1"\r
+HKCU,"Control Panel\Keyboard","KeyboardSpeed",2,"31"\r
+\r
+HKCU,"Control Panel\Desktop","ActiveWndTrkTimeout",0x00010003,0x00000000\r
+HKCU,"Control Panel\Desktop","AutoEndTasks",2,"0"\r
+HKCU,"Control Panel\Desktop","CaretWidth",0x00010003,0x00000001\r
+HKCU,"Control Panel\Desktop","CoolSwitch",2,"1"\r
+HKCU,"Control Panel\Desktop","CoolSwitchColumns",2,"7"\r
+HKCU,"Control Panel\Desktop","CoolSwitchRows",2,"3"\r
+HKCU,"Control Panel\Desktop","CursorBlinkRate",2,"530"\r
+HKCU,"Control Panel\Desktop","DragFullWindows",2,"0"\r
+HKCU,"Control Panel\Desktop","DragHeight",0x00000000,"4"\r
+HKCU,"Control Panel\Desktop","DragWidth",0x00000000,"4"\r
+HKCU,"Control Panel\Desktop","PaintDesktopVersion",0x00010001,"0"\r
+HKCU,"Control Panel\Desktop","HungAppTimeout",2,"5000"\r
+HKCU,"Control Panel\Desktop","ScreenSaveActive",2,"0"\r
+HKCU,"Control Panel\Desktop","ScreenSaverIsSecure",2,"1"\r
+HKCU,"Control Panel\Desktop","ScreenSaveTimeOut",0,"600"\r
+HKCU,"Control Panel\Desktop","WaitToKillAppTimeout",2,"20000"\r
+HKCU,"Control Panel\Desktop","Wallpaper",0x00000000,""\r
+HKCU,"Control Panel\Desktop","FontSmoothing",0,"1"\r
+HKCU,"Control Panel\Desktop","FontSmoothingOrientation",0x00010003,0x00000001\r
+HKCU,"Control Panel\Desktop","FontSmoothingType",0x00010003,0x00000001\r
+HKCU,"Control Panel\Desktop","ForegroundFlashCount",0x00010003,0x00000003\r
+HKCU,"Control Panel\Desktop","ForegroundLockTimeout",0x00010003,0x00030d40\r
+HKCU,"Control Panel\Desktop","GridGranularity",2,"0"\r
+HKCU,"Control Panel\Desktop","SmoothScroll",3,00,00,00,00\r
+HKCU,"Control Panel\Desktop","UserPreferencesMask",3,10,00,00,80\r
+HKCU,"Control Panel\Desktop","LowPowerActive",2,"0"\r
+HKCU,"Control Panel\Desktop","LowPowerTimeOut",2,"0"\r
+HKCU,"Control Panel\Desktop","PowerOffActive",2,"0"\r
+HKCU,"Control Panel\Desktop","PowerOffTimeOut",2,"0"\r
+HKCU,"Control Panel\Desktop","MenuShowDelay",2,"400"\r
+HKCU,"Control Panel\Desktop","WheelScrollLines",2,"3"\r
+HKCU,"Control Panel\Desktop","WheelScrollChars",2,"3"\r
+HKCU,"Control Panel\Desktop","TileWallpaper",2,"0"\r
+HKCU,"Control Panel\Desktop","Pattern",2,"(None)"\r
+\r
+HKCU,"Control Panel\Desktop\WindowMetrics","ScrollWidth",2,"16"\r
+HKCU,"Control Panel\Desktop\WindowMetrics","ScrollHeight",2,"16"\r
+HKCU,"Control Panel\Desktop\WindowMetrics","CaptionWidth",2,"18"\r
+HKCU,"Control Panel\Desktop\WindowMetrics","CaptionHeight",2,"18"\r
+HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionWidth",2,"13"\r
+HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionHeight",2,"15"\r
+HKCU,"Control Panel\Desktop\WindowMetrics","MenuWidth",2,"18"\r
+HKCU,"Control Panel\Desktop\WindowMetrics","MenuHeight",2,"18"\r
+HKCU,"Control Panel\Desktop\WindowMetrics","BorderWidth",2,"1"\r
+HKCU,"Control Panel\Desktop\WindowMetrics","Shell Icon Size",2,"32"\r
++HKCU,"Control Panel\Desktop\WindowMetrics","IconSpacing",2,"75"\r
++HKCU,"Control Panel\Desktop\WindowMetrics","IconVerticalspacing",2,"75"\r
+HKCU, "Control Panel\Desktop\WindowMetrics","CaptionFont",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\\r
+00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU, "Control Panel\Desktop\WindowMetrics","IconFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\\r
+61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU, "Control Panel\Desktop\WindowMetrics","MenuFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\\r
+61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU, "Control Panel\Desktop\WindowMetrics","MessageFont",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\\r
+00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU, "Control Panel\Desktop\WindowMetrics","SmCaptionFont",0x00000001,f5,ff,ff,ff,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,\\r
+6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU, "Control Panel\Desktop\WindowMetrics","StatusFont",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\\r
+00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+\r
+; Input Methods\r
+HKCU,"Control Panel\Input Method\Hot Keys",,0x00000012\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000010","Key Modifiers",0x00030003,02,c0,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000010","Target IME",0x00030003,00,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000010","Virtual Key",0x00030003,20,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000011","Key Modifiers",0x00030003,04,c0,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000011","Target IME",0x00030003,00,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000011","Virtual Key",0x00030003,20,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000012","Key Modifiers",0x00030003,02,c0,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000012","Target IME",0x00030003,00,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000012","Virtual Key",0x00030003,be,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000070","Key Modifiers",0x00030003,02,c0,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000070","Target IME",0x00030003,00,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000070","Virtual Key",0x00030003,20,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000071","Key Modifiers",0x00030003,04,c0,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000071","Target IME",0x00030003,00,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000071","Virtual Key",0x00030003,20,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000072","Key Modifiers",0x00030003,03,c0,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000072","Target IME",0x00030003,00,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000072","Virtual Key",0x00030003,bc,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000200","Key Modifiers",0x00030003,03,C0,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000200","Target IME",0x00030003,00,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000200","Virtual Key",0x00030003,47,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000201","Key Modifiers",0x00030003,03,c0,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000201","Target IME",0x00030003,00,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000201","Virtual Key",0x00030003,4b,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000202","Key Modifiers",0x00030003,03,c0,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000202","Target IME",0x00030003,00,00,00,00\r
+HKCU,"Control Panel\Input Method\Hot Keys\00000202","Virtual Key",0x00030003,4c,00,00,00\r
+\r
+; International keys\r
+HKCU,"Control Panel\International",,0x00000012\r
+HKCU,"Control Panel\International","Locale",0x00000000,"0409"\r
+HKCU,"Control Panel\International","iCountry",2,"1"\r
+HKCU,"Control Panel\International","iCurrDigits",2,"2"\r
+HKCU,"Control Panel\International","iCurrency",2,"0"\r
+HKCU,"Control Panel\International","iDate",2,"0"\r
+HKCU,"Control Panel\International","iDigits",2,"2"\r
+HKCU,"Control Panel\International","iLZero",2,"1"\r
+HKCU,"Control Panel\International","iMeasure",2,"1"\r
+HKCU,"Control Panel\International","iNegCurr",2,"0"\r
+HKCU,"Control Panel\International","iTime",2,"0"\r
+HKCU,"Control Panel\International","iTLZero",2,"0"\r
+HKCU,"Control Panel\International","s1159",2,"AM"\r
+HKCU,"Control Panel\International","s2359",2,"PM"\r
+HKCU,"Control Panel\International","sCountry",2,"United States"\r
+HKCU,"Control Panel\International","sCurrency",2,"$"\r
+HKCU,"Control Panel\International","sDate",2,"/"\r
+HKCU,"Control Panel\International","sDecimal",2,"."\r
+;HKCU,"Control Panel\International","sLanguage",2,"ENU"\r
+HKCU,"Control Panel\International","sList",2,","\r
+HKCU,"Control Panel\International","sLongDate",2,"dddd, MMMM dd, yyyy"\r
+HKCU,"Control Panel\International","sShortDate",2,"M/d/yyyy"\r
+HKCU,"Control Panel\International","sThousand",2,","\r
+HKCU,"Control Panel\International","sTime",2,":"\r
+HKCU,"Control Panel\International\Geo","Nation",0x00000000,"1"\r
+\r
+; Cursors Schemes\r
+HKCU,"Control Panel\Cursors",,,"ReactOS Default"\r
+HKCU,"Control Panel\Cursors","Scheme Source",0x00010001,0x00000002\r
+\r
+; PowerCfg\r
+HKCU,"Control Panel\PowerCfg","CurrentPowerPolicy",2,"0"\r
+HKCU,"Control Panel\PowerCfg\GlobalPowerPolicy","Policies",0x00030003,01,00,00,00,00,\\r
+00,00,00,03,00,00,00,10,00,00,00,00,00,00,00,03,00,00,00,10,00,00,00,02,00,00,00,03,\\r
+00,00,00,00,00,00,00,02,00,00,00,03,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,\\r
+00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,03,00,00,00,03,00,00,00,00,\\r
+00,00,C0,01,00,00,00,05,00,00,00,01,00,00,00,0A,00,00,00,00,00,00,00,03,00,00,00,01,\\r
+00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,16,\\r
+00,00,00\r
+\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Name",2,"%POWERCFG_NAME_0%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Description",2,"%POWERCFG_DESC_0%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Policies",0x00030003,01,00,00,00,02,00,\\r
+00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2C,01,\\r
+00,00,32,32,00,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,B0,04,00,00,2C,01,\\r
+00,00,00,00,00,00,58,02,00,00,01,01,64,50,64,64,00,00\r
+\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Name",2,"%POWERCFG_NAME_1%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Description",2,"%POWERCFG_DESC_1%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Policies",0x00030003,01,00,00,00,02,00,\\r
+00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,B0,04,00,00,2C,01,\\r
+00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2C,01,\\r
+00,00,08,07,00,00,2C,01,00,00,01,01,64,50,64,64,00,00\r
+\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Name",2,"%POWERCFG_NAME_2%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Description",2,"%POWERCFG_DESC_2%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Policies",0x00030003,01,00,00,00,02,00,\\r
+00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,84,03,\\r
+00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,2C,01,00,00,01,01,50,50,64,64,00,00\r
+\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Name",2,"%POWERCFG_NAME_3%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Description",2,"%POWERCFG_DESC_3%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Policies",0x00030003,01,00,00,00,02,00,\\r
+00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,32,32,00,00,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,B0,04,00,00,84,03,\\r
+00,00,00,00,00,00,08,07,00,00,00,01,64,64,64,64,00,00\r
+\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Name",2,"%POWERCFG_NAME_4%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Description",2,"%POWERCFG_DESC_4%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Policies",0x00030003,01,00,00,00,02,00,\\r
+00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2C,01,\\r
+00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2C,01,\\r
+00,00,00,00,00,00,84,03,00,00,00,01,64,64,64,64,00,00\r
+\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Name",2,"%POWERCFG_NAME_5%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Description",2,"%POWERCFG_DESC_5%"\r
+HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Policies",0x00030003,01,00,00,00,02,00,\\r
+00,00,01,00,00,00,00,00,00,00,02,00,00,00,05,00,00,00,00,00,00,00,B0,04,00,00,78,00,\\r
+00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,3C,00,\\r
+00,00,00,00,00,00,B4,00,00,00,01,01,64,32,64,64,00,00\r
+\r
+; Color schemes\r
+HKCU,"Control Panel\Current","Color Schemes",0x00020000,"%DESKTOP_SCHEME_0%"\r
+HKCU,"Control Panel\Appearance","Current",0x00020000,"%DESKTOP_SCHEME_0%"\r
+HKCU,"Control Panel\Appearance","NewCurrent",0x00020000,"%DESKTOP_SCHEME_0%"\r
+HKCU,"Control Panel\Appearance\New Schemes","SelectedSize",0x00020000,"0"\r
+HKCU,"Control Panel\Appearance\New Schemes","SelectedStyle",0x00020000,"0"\r
+; ReactOS Standard\r
+HKCU,"Control Panel\Appearance\New Schemes\0","DisplayName",0x00020000,"@themeui.dll,-883"\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #0",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #1",0x00010001,0x00a56e3a\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #2",0x00010001,0x006a240a\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #3",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #4",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #5",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #6",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #10",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #11",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #12",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #13",0x00010001,0x006a240a\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #15",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #16",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #17",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #18",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #19",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #20",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #21",0x00010001,0x00404040\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #22",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #24",0x00010001,0x00e1ffff\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #25",0x00010001,0x00b5b5b5\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #26",0x00010001,0x00800000\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #27",0x00010001,0x00f0caa6\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #28",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #29",0x00010001,0x006a240a\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #30",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_0%"\r
+; Brick\r
+HKCU,"Control Panel\Appearance\New Schemes\1","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #0",0x00010001,0x02d2e0e1\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #1",0x00010001,0x00000042\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #2",0x00010001,0x00000080\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #3",0x00010001,0x0061898d\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #4",0x00010001,0x00a5bfc2\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #5",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #9",0x00010001,0x00d2e0e1\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #10",0x00010001,0x00a5bfc2\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #11",0x00010001,0x00a5bfc2\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #12",0x00010001,0x00d2e0e1\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #13",0x00010001,0x0061898d\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #15",0x00010001,0x00a5bfc2\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #16",0x00010001,0x0261898d\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #17",0x00010001,0x0261898d\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #18",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #19",0x00010001,0x00d2e0e1\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #20",0x00010001,0x02d2e0e1\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #22",0x00010001,0x02a5bfc2\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #23",0x00010001,0x00000080\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #24",0x00010001,0x00d2e0e1\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #26",0x00010001,0x02000080\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #27",0x00010001,0x004074b0\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #28",0x00010001,0x0070b8c8\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #29",0x00010001,0x00808000\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #30",0x00010001,0x00a5bfc2\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_1%"\r
+; Eggplant\r
+HKCU,"Control Panel\Appearance\New Schemes\2","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #0",0x00010001,0x02a8b090\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #1",0x00010001,0x00400040\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #2",0x00010001,0x00788058\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #3",0x00010001,0x00a8b090\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #4",0x00010001,0x00a8b090\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #10",0x00010001,0x02a8b090\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #11",0x00010001,0x02a8b090\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #12",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #13",0x00010001,0x00788058\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #15",0x00010001,0x02a8b090\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #16",0x00010001,0x02788058\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #17",0x00010001,0x02788058\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #19",0x00010001,0x00788058\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #20",0x00010001,0x02d8d8c8\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #22",0x00010001,0x02a8b090\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #23",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #26",0x00010001,0x02788058\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #27",0x00010001,0x00834b83\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #28",0x00010001,0x00d2bdcb\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #29",0x00010001,0x00788058\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #30",0x00010001,0x00a8b090\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_2%"\r
+; Green Olive\r
+HKCU,"Control Panel\Appearance\New Schemes\3","DisplayName",0x00020000,"@themeui.dll,-877"\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #0",0x00010001,0x02d3e3d0\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #1",0x00010001,0x00213f21\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #2",0x00010001,0x00649759\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #3",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #4",0x00010001,0x00a9c8a2\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #10",0x00010001,0x02a9c8a2\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #11",0x00010001,0x02a9c8a2\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #12",0x00010001,0x02d3e3d0\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #13",0x00010001,0x00649759\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #15",0x00010001,0x02a9c8a2\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #16",0x00010001,0x02649759\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #17",0x00010001,0x02649759\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #19",0x00010001,0x00d3e3d0\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #20",0x00010001,0x02d3e3d0\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #22",0x00010001,0x02a9c8a2\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #26",0x00010001,0x02649759\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #27",0x00010001,0x00e8c898\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #28",0x00010001,0x00b0cca8\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #29",0x00010001,0x00649759\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #30",0x00010001,0x00a9c8a2\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_3%"\r
+; High Contrast 1\r
+HKCU,"Control Panel\Appearance\New Schemes\4","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #0",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #1",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #2",0x00010001,0x00ff0000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #3",0x00010001,0x00ffff00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #4",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #5",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #6",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #7",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #8",0x00010001,0x0000ffff\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #10",0x00010001,0x00ff0000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #11",0x00010001,0x00ffff00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #12",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #13",0x00010001,0x00008000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #15",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #16",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #17",0x00010001,0x0200ff00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #18",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #19",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #20",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #21",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #22",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #23",0x00010001,0x0000ffff\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #24",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #26",0x00010001,0x02800080\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #27",0x00010001,0x00ff0000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #28",0x00010001,0x00ffff00\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #29",0x00010001,0x00008000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #30",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_4%"\r
+; High Contrast 2\r
+HKCU,"Control Panel\Appearance\New Schemes\5","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #0",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #1",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #2",0x00010001,0x00ffff00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #3",0x00010001,0x00ff0000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #4",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #5",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #6",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #7",0x00010001,0x0000ff00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #8",0x00010001,0x0000ff00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #9",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #10",0x00010001,0x00ffff00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #11",0x00010001,0x00ff0000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #12",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #13",0x00010001,0x00ff0000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #15",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #16",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #17",0x00010001,0x0200ff00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #18",0x00010001,0x0000ff00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #19",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #20",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #21",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #22",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #24",0x00010001,0x0000ffff\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #26",0x00010001,0x02800080\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #27",0x00010001,0x00ffff00\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #28",0x00010001,0x00ff0000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #29",0x00010001,0x00ff0000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #30",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_5%"\r
+; High Contrast Black\r
+HKCU,"Control Panel\Appearance\New Schemes\6","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #0",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #1",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #2",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #3",0x00010001,0x00008000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #4",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #5",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #6",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #7",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #8",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #10",0x00010001,0x0200ffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #11",0x00010001,0x02008000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #12",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #13",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #15",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #16",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #17",0x00010001,0x0200ff00\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #18",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #19",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #20",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #21",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #22",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #23",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #24",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #26",0x00010001,0x02800080\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #27",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #28",0x00010001,0x00008000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #29",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #30",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_6%"\r
+; High Contrast White\r
+HKCU,"Control Panel\Appearance\New Schemes\7","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #0",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #1",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #2",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #3",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #4",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #10",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #11",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #12",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #13",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #15",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #16",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #17",0x00010001,0x0200ff00\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #19",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #20",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #22",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #26",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #27",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #28",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #29",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #30",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_7%"\r
+; Lilac\r
+HKCU,"Control Panel\Appearance\New Schemes\8","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #0",0x00010001,0x02d9a8ae\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #1",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #2",0x00010001,0x00b14e5a\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #3",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #4",0x00010001,0x00d9a8ae\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #10",0x00010001,0x02d9a8ae\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #11",0x00010001,0x02d9a8ae\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #12",0x00010001,0x02b14e5a\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #13",0x00010001,0x00b14e5a\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #15",0x00010001,0x02d9a8ae\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #16",0x00010001,0x02b14e5a\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #17",0x00010001,0x02b14e5a\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #19",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #20",0x00010001,0x02ecd5d8\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #22",0x00010001,0x02d9a8ae\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #26",0x00010001,0x02b14e5a\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #27",0x00010001,0x00cb8fb6\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #28",0x00010001,0x00d0b4b8\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #29",0x00010001,0x00b14e5a\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #30",0x00010001,0x00d9a8ae\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_8%"\r
+; Maple\r
+HKCU,"Control Panel\Appearance\New Schemes\9","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #0",0x00010001,0x02d7ecf2\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #1",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #2",0x00010001,0x00000080\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #3",0x00010001,0x0046a6c6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #4",0x00010001,0x00aed8e6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #10",0x00010001,0x02aed8e6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #11",0x00010001,0x02aed8e6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #12",0x00010001,0x0246a6c6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #13",0x00010001,0x0046a6c6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #14",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #15",0x00010001,0x02aed8e6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #16",0x00010001,0x0246a6c6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #17",0x00010001,0x0246a6c6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #19",0x00010001,0x00d7ecf2\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #20",0x00010001,0x02d7ecf2\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #22",0x00010001,0x02aed8e6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #25",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #26",0x00010001,0x0246a6c6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #27",0x00010001,0x00389cc0\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #28",0x00010001,0x0088c8e0\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #29",0x00010001,0x0046a6c6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #30",0x00010001,0x00aed8e6\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_9%"\r
+; Marine\r
+HKCU,"Control Panel\Appearance\New Schemes\10","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #0",0x00010001,0x02d8e0c8\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #1",0x00010001,0x00474e2c\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #2",0x00010001,0x00800000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #3",0x00010001,0x00889048\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #4",0x00010001,0x00b8c088\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #5",0x00010001,0x02d8e0c8\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #10",0x00010001,0x02b8c088\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #11",0x00010001,0x02b8c088\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #12",0x00010001,0x00848d4b\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #13",0x00010001,0x00800000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #15",0x00010001,0x02b8c088\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #16",0x00010001,0x02889048\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #17",0x00010001,0x02889048\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #19",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #20",0x00010001,0x02d8e0c8\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #22",0x00010001,0x02b8c088\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #24",0x00010001,0x00d8e0c8\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #26",0x00010001,0x02800000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #27",0x00010001,0x00c0b418\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #28",0x00010001,0x00d8cc78\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #29",0x00010001,0x00800000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #30",0x00010001,0x00b8c088\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_10%"\r
+; Plum\r
+HKCU,"Control Panel\Appearance\New Schemes\11","DisplayName",0x00020000,"@themeui.dll,-869"\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #0",0x00010001,0x00c8d0d8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #1",0x00010001,0x00402840\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #2",0x00010001,0x00604048\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #3",0x00010001,0x00586078\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #4",0x00010001,0x009098a8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #5",0x00010001,0x00c8d0d8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #6",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #10",0x00010001,0x009098a8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #11",0x00010001,0x009098a8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #12",0x00010001,0x005a6374\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #13",0x00010001,0x00808000\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #14",0x00010001,0x00c8d0d8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #15",0x00010001,0x009098a8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #16",0x00010001,0x00586078\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #17",0x00010001,0x00586078\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #18",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #19",0x00010001,0x009098a8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #20",0x00010001,0x00c8d0d8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #21",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #22",0x00010001,0x009098a8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #23",0x00010001,0x00580030\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #24",0x00010001,0x00c8ccd5\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #26",0x00010001,0x00604048\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #27",0x00010001,0x00b884a0\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #28",0x00010001,0x007898a8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #29",0x00010001,0x00808000\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #30",0x00010001,0x009098a8\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_11%"\r
+; Pumpkin\r
+HKCU,"Control Panel\Appearance\New Schemes\12","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #0",0x00010001,0x02cfeaf5\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #1",0x00010001,0x00420042\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #2",0x00010001,0x002fa5d7\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #3",0x00010001,0x00a4a0a0\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #4",0x00010001,0x009dd5ec\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #10",0x00010001,0x029dd5ec\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #11",0x00010001,0x029dd5ec\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #12",0x00010001,0x02cfeaf5\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #13",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #15",0x00010001,0x029dd5ec\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #16",0x00010001,0x022fa5d7\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #17",0x00010001,0x022fa5d7\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #19",0x00010001,0x00cfeaf5\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #20",0x00010001,0x02cfeaf5\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #22",0x00010001,0x029dd5ec\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #23",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #26",0x00010001,0x022fa5d7\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #27",0x00010001,0x0088cce0\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #28",0x00010001,0x0090ccd0\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #29",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #30",0x00010001,0x009dd5ec\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_12%"\r
+; Rainy Day\r
+HKCU,"Control Panel\Appearance\New Schemes\13","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #0",0x00010001,0x02d9ccc1\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #1",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #2",0x00010001,0x007d654f\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #3",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #4",0x00010001,0x00b19983\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #10",0x00010001,0x02b19983\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #11",0x00010001,0x02b19983\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #12",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #13",0x00010001,0x007d654f\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #15",0x00010001,0x02b19983\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #16",0x00010001,0x027d654f\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #17",0x00010001,0x027d654f\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #19",0x00010001,0x00d9ccc1\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #20",0x00010001,0x02d9ccc1\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #22",0x00010001,0x02b19983\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #26",0x00010001,0x027d654f\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #27",0x00010001,0x00d0b480\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #28",0x00010001,0x00d0bcb0\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #29",0x00010001,0x007d654f\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #30",0x00010001,0x00b19983\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_13%"\r
+; ReactOS Classic\r
+HKCU,"Control Panel\Appearance\New Schemes\14","DisplayName",0x00020000,"@themeui.dll,-880"\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #0",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #1",0x00010001,0x00a56e3a\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #2",0x00010001,0x00800000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #3",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #4",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #5",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #6",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #10",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #11",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #12",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #13",0x00010001,0x00800000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #15",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #16",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #17",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #18",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #19",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #20",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #21",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #22",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #24",0x00010001,0x00e1ffff\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #26",0x00010001,0x00800000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #27",0x00010001,0x00d08410\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #28",0x00010001,0x00b5b5b5\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #29",0x00010001,0x00800000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #30",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_14%"\r
+; Rose\r
+HKCU,"Control Panel\Appearance\New Schemes\15","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #0",0x00010001,0x02b7afcf\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #1",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #2",0x00010001,0x0070609f\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #3",0x00010001,0x00a4a0a0\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #4",0x00010001,0x00b7afcf\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #10",0x00010001,0x02b7afcf\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #11",0x00010001,0x02b7afcf\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #12",0x00010001,0x0270609f\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #13",0x00010001,0x0070609f\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #15",0x00010001,0x02b7afcf\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #16",0x00010001,0x0270609f\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #17",0x00010001,0x0270609f\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #19",0x00010001,0x007d7d7d\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #20",0x00010001,0x02dcd8e7\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #22",0x00010001,0x02b7afcf\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #26",0x00010001,0x0270609f\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #27",0x00010001,0x00d0ccd8\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #28",0x00010001,0x00d0d4d0\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #29",0x00010001,0x0070609f\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #30",0x00010001,0x00b7afcf\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_15%"\r
+; Sand\r
+HKCU,"Control Panel\Appearance\New Schemes\16","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #0",0x00010001,0x02dde6ea\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #1",0x00010001,0x02688da2\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #2",0x00010001,0x00808000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #3",0x00010001,0x00688da2\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #4",0x00010001,0x00bbccd5\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #10",0x00010001,0x02bbccd5\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #11",0x00010001,0x02bbccd5\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #12",0x00010001,0x02688da2\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #13",0x00010001,0x00808000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #15",0x00010001,0x02bbccd5\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #16",0x00010001,0x02688da2\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #17",0x00010001,0x02688da2\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #19",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #20",0x00010001,0x02dde6ea\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #22",0x00010001,0x02bbccd5\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #26",0x00010001,0x02808000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #27",0x00010001,0x00aabd84\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #28",0x00010001,0x0080d0e8\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #29",0x00010001,0x00808000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #30",0x00010001,0x00bbccd5\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_16%"\r
+; Sky (WinXP-like)\r
+HKCU,"Control Panel\Appearance\New Schemes\17","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #0",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #1",0x00010001,0x00984e00\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #2",0x00010001,0x00e35400\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #3",0x00010001,0x00df967a\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #4",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #5",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #6",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #10",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #11",0x00010001,0x00c8d0d4\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #12",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #13",0x00010001,0x00c56a31\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #15",0x00010001,0x00d8e9ec\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #16",0x00010001,0x0099a8ac\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #17",0x00010001,0x0099a8ac\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #18",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #19",0x00010001,0x00f8e4d8\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #20",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #21",0x00010001,0x00646f71\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #22",0x00010001,0x00e2eff1\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #24",0x00010001,0x00e1ffff\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #25",0x00010001,0x00b5b5b5\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #26",0x00010001,0x00800000\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #27",0x00010001,0x00ff953d\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #28",0x00010001,0x00ebb99d\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #29",0x00010001,0x00c56a31\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #30",0x00010001,0x00d8e9ec\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_17%"\r
+; Slate\r
+HKCU,"Control Panel\Appearance\New Schemes\18","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #0",0x00010001,0x02e3dcce\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #1",0x00010001,0x00414141\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #2",0x00010001,0x00978055\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #3",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #4",0x00010001,0x00c8b99d\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #10",0x00010001,0x02c8b99d\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #11",0x00010001,0x02c8b99d\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #12",0x00010001,0x00424242\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #13",0x00010001,0x00978055\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #15",0x00010001,0x02c8b99d\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #16",0x00010001,0x02978055\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #17",0x00010001,0x02978055\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #19",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #20",0x00010001,0x02e3dcce\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #22",0x00010001,0x02c8b99d\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #26",0x00010001,0x02978055\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #27",0x00010001,0x00d8b888\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #28",0x00010001,0x00c8bca0\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #29",0x00010001,0x00978055\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #30",0x00010001,0x00c8b99d\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_18%"\r
+; Storm\r
+HKCU,"Control Panel\Appearance\New Schemes\19","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #0",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #1",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #2",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #3",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #4",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #10",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #11",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #12",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #13",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #15",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #16",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #17",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #19",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #20",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #22",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #23",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #26",0x00010001,0x02800080\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #27",0x00010001,0x00b08c38\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #28",0x00010001,0x00a8aca8\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #29",0x00010001,0x00800080\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #30",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_19%"\r
+; Teal\r
+HKCU,"Control Panel\Appearance\New Schemes\20","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #0",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #1",0x00010001,0x00404000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #2",0x00010001,0x00808000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #3",0x00010001,0x00808080\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #4",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #10",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #11",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #12",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #13",0x00010001,0x00808000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #15",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #16",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #17",0x00010001,0x02808080\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #19",0x00010001,0x00f0fbff\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #20",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #22",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #25",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #26",0x00010001,0x02808000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #27",0x00010001,0x00d8cc00\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #28",0x00010001,0x00b8c898\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #29",0x00010001,0x00808000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #30",0x00010001,0x00c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_20%"\r
+; Wheat\r
+HKCU,"Control Panel\Appearance\New Schemes\21","DisplayName",0x00020000,"@themeui.dll,-851"\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019"\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Flat Menus",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\r
+00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #0",0x00010001,0x02d0eeee\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #1",0x00010001,0x021d4000\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #2",0x00010001,0x00008080\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #3",0x00010001,0x0041bcbc\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #4",0x00010001,0x00a0dede\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #5",0x00010001,0x02ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #6",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #7",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #8",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #9",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #10",0x00010001,0x02a0dede\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #11",0x00010001,0x02a0dede\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #12",0x00010001,0x0241bcbc\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #13",0x00010001,0x00008080\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #14",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #15",0x00010001,0x02a0dede\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #16",0x00010001,0x0241bcbc\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #17",0x00010001,0x0241bcbc\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #18",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #19",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #20",0x00010001,0x02d0eeee\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #21",0x00010001,0x02000000\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #22",0x00010001,0x02a0dede\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #23",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #24",0x00010001,0x00ffffff\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #25",0x00010001,0x02c0c0c0\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #26",0x00010001,0x02008080\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #27",0x00010001,0x0048b0c8\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #28",0x00010001,0x0080b8b8\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #29",0x00010001,0x00008080\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #30",0x00010001,0x00a0dede\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Contrast",0x00010001,0x00000000\r
+HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","LegacyName",0x00020000,"%DESKTOP_SCHEME_21%"\r
+HKCU,"Control Panel\Sound","Beep",2,"yes"\r
+HKCU,"Control Panel\Sound","ExtendedSounds",2,"yes"\r
+\r
+HKCU,"Environment",,0x00000012\r
+HKCU,"Environment","TEMP",0x00020000,"%TEMP_DIR%"\r
+HKCU,"Environment","TMP",0x00020000,"%TEMP_DIR%"\r
+\r
+HKCU,"SOFTWARE",,0x00000012\r
+HKCU,"SOFTWARE\Policies",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft",,0x00000012\r
+\r
+; DirectX version report as DirectX 9.0\r
+HKCU,"SOFTWARE\Microsoft\DirectX","Debug",0x00010001,0x00000000\r
+HKCU,"SOFTWARE\Microsoft\DirectX","InstalledVersion",0x00000001,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00\r
+HKCU,"SOFTWARE\Microsoft\DirectX","InstallMDX",0x00010001,0x00000001\r
+HKCU,"SOFTWARE\Microsoft\DirectX","RC",0x00010001,0x00000000\r
+HKCU,"SOFTWARE\Microsoft\DirectX","Version",0x00000000,"5.03.2600.2180"\r
+\r
+; Open With settings\r
+HKCU,"SOFTWARE\Classes",,0x00000012\r
+HKCU,"SOFTWARE\Classes\Applications",,0x00000012\r
+\r
+; Current user shell folder settings\r
+HKCU,"SOFTWARE\Microsoft\Windows",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","ListviewShadow",0x00010001,0x1\r
+\r
+; default shell\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe"\r
+\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",,0x00000012\r
+HKCU,"Software\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000012\r
+\r
+HKCU,"SOFTWARE\Microsoft\Windows NT",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\PrinterPorts",,0x00000012\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Program Manager",,0x00000012\r
+\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","DebugOptions",2,"2048"\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","device",2,""\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Documents",2,""\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","DosPrint",2,"no"\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","load",2,""\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","NetMessage",2,"no"\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","NullPort",2,"None"\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Programs",2,"com exe bat pif cmd"\r
+\r
+; Application compatibility settings for Windows 95\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MajorVersion",0x00010001,0x00000004\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MinorVersion",0x00010001,0x0000000A\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","BuildNumber",0x00010001,0x000003B6\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","PlatformId",0x00010001,0x00000001\r
+; Application compatibility settings for Windows 98/ME\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MajorVersion",0x00010001,0x00000004\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MinorVersion",0x00010001,0x00000000\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","BuildNumber",0x00010001,0x000008AE\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","PlatformId",0x00010001,0x00000001\r
+; Application compatibility settings for Windows NT 4 Service Pack 5\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MajorVersion",0x00010001,0x00000004\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MinorVersion",0x00010001,0x00000000\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","BuildNumber",0x00010001,0x00000565\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","PlatformId",0x00010001,0x00000002\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMajorVersion",0x00010001,0x00000005\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMinorVersion",0x00010001,0x00000000\r
+; Application compatibility settings for Windows 2000\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MajorVersion",0x00010001,0x00000005\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MinorVersion",0x00010001,0x00000000\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","BuildNumber",0x00010001,0x00000893\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","PlatformId",0x00010001,0x00000002\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMajorVersion",0x00010001,0x00000003\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMinorVersion",0x00010001,0x00000000\r
+; Application compatibility settings for Windows XP\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MajorVersion",0x00010001,0x00000005\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MinorVersion",0x00010001,0x00000001\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","BuildNumber",0x00010001,0x00000A28\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","PlatformId",0x00010001,0x00000002\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","SPMajorVersion",0x00010001,0x00000001\r
+HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","SPMinorVersion",0x00010001,0x00000000\r
+\r
+; DEBUG: Windows Messages SPY configuration\r
+HKCU,"SOFTWARE\ReactOS\Debug","SpyInclude",0x00020000,"INCLUDEALL"\r
+;HKCU,"SOFTWARE\ReactOS\Debug","SpyExclude",0x00020000,""\r
+;HKCU,"SOFTWARE\ReactOS\Debug","SpyExcludeDWP",0x00020000,""\r
+\r
+; Internet Explorer\r
+HKCU,Software\Wine\MSHTML,"GeckoUrl",,"http://source.winehq.org/winegecko.php"\r
+HKCU,Software\Wine\MSHTML,"GeckoCabDir",0x00020000,"%SystemRoot%\"\r
+\r
+HKCU,"SOFTWARE\Microsoft\Internet Explorer\Main","Start Page",0x00000000,"http://www.reactos.org"\r
+\r
+; Sound Schemes\r
+HKCU,"AppEvents",,0x00000012\r
+HKCU,"AppEvents\Schemes","",0x00000000,".Default"\r
+HKCU,"AppEvents\Schemes\Apps",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default","",0x00000000,"ReactOS"\r
+HKCU,"AppEvents\Schemes\Apps\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5856"\r
+HKCU,"AppEvents\Schemes\Apps\.Default\.Default",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Close",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Maximize",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Minimize",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Open",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Current","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav"\r
+HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Default","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav"\r
+HKCU,"AppEvents\Schemes\Apps\Explorer","",0x00000002,"ReactOS Explorer"\r
+HKCU,"AppEvents\Schemes\Apps\Explorer","DispFileName",0x00000000,"@mmsys.cpl,-5854"\r
+HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating",,0x00000012\r
+HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Current","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Default","",0x00020000,""\r
+HKCU,"AppEvents\Schemes\Names",,0x00000012\r
+HKCU,"AppEvents\Schemes\Names\.Default","",0x00000002,"ReactOS Default"\r
+HKCU,"AppEvents\Schemes\Names\.None","",0x00000002,"No sounds"\r
+\r
+HKCU,"AppEvents\EventLabels",,0x00000012\r
+HKCU,"AppEvents\EventLabels\.Default","",0x00000000,"Default Beep"\r
+HKCU,"AppEvents\EventLabels\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5824"\r
+HKCU,"AppEvents\EventLabels\AppGPFault","",0x00000000,"Program error"\r
+HKCU,"AppEvents\EventLabels\AppGPFault","DispFileName",0x00000000,"@mmsys.cpl,-5825"\r
+HKCU,"AppEvents\EventLabels\Close","",0x00000000,"Close program"\r
+HKCU,"AppEvents\EventLabels\Close","DispFileName",0x00000000,"@mmsys.cpl,-5826"\r
+HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","",0x00000000,"Critical Battery Alarm"\r
+HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5827"\r
+HKCU,"AppEvents\EventLabels\DeviceConnect","",0x00000000,"Device Connect"\r
+HKCU,"AppEvents\EventLabels\DeviceConnect","DispFileName",0x00000000,"@mmsys.cpl,-5828"\r
+HKCU,"AppEvents\EventLabels\DeviceDisconnect","",0x00000000,"Device Disconnect"\r
+HKCU,"AppEvents\EventLabels\DeviceDisconnect","DispFileName",0x00000000,"@mmsys.cpl,-5829"\r
+HKCU,"AppEvents\EventLabels\DeviceFail","",0x00000000,"Device Failed to Connect"\r
+HKCU,"AppEvents\EventLabels\DeviceFail","DispFileName",0x00000000,"@mmsys.cpl,-5830"\r
+HKCU,"AppEvents\EventLabels\EmptyRecycleBin","",0x00000000,"Empty Recycle Bin"\r
+HKCU,"AppEvents\EventLabels\EmptyRecycleBin","DispFileName",0x00000000,"@mmsys.cpl,-5831"\r
+HKCU,"AppEvents\EventLabels\LowBatteryAlarm","",0x00000000,"Low Battery Alarm"\r
+HKCU,"AppEvents\EventLabels\LowBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5832"\r
+HKCU,"AppEvents\EventLabels\Maximize","",0x00000000,"Maximize"\r
+HKCU,"AppEvents\EventLabels\Maximize","DispFileName",0x00000000,"@mmsys.cpl,-5833"\r
+HKCU,"AppEvents\EventLabels\MenuCommand","",0x00000000,"Menu command"\r
+HKCU,"AppEvents\EventLabels\MenuCommand","DispFileName",0x00000000,"@mmsys.cpl,-5834"\r
+HKCU,"AppEvents\EventLabels\MenuPopup","",0x00000000,"Menu popup"\r
+HKCU,"AppEvents\EventLabels\MenuPopup","DispFileName",0x00000000,"@mmsys.cpl,-5835"\r
+HKCU,"AppEvents\EventLabels\Minimize","",0x00000000,"Minimize"\r
+HKCU,"AppEvents\EventLabels\Minimize","DispFileName",0x00000000,"@mmsys.cpl,-5836"\r
+HKCU,"AppEvents\EventLabels\MailBeep","",0x00000000,"New Mail Notification"\r
+HKCU,"AppEvents\EventLabels\MailBeep","DispFileName",0x00000000,"@mmsys.cpl,-5837"\r
+HKCU,"AppEvents\EventLabels\Navigating","",0x00000000,"Start Navigation"\r
+HKCU,"AppEvents\EventLabels\Navigating","DispFileName",0x00000000,"@mmsys.cpl,-5838"\r
+HKCU,"AppEvents\EventLabels\Open","",0x00000000,"Open program"\r
+HKCU,"AppEvents\EventLabels\Open","DispFileName",0x00000000,"@mmsys.cpl,-5839"\r
+HKCU,"AppEvents\EventLabels\PrintComplete","",0x00000000,"Print Complete"\r
+HKCU,"AppEvents\EventLabels\PrintComplete","DispFileName",0x00000000,"@mmsys.cpl,-5840"\r
+HKCU,"AppEvents\EventLabels\RestoreDown","",0x00000000,"Restore Down"\r
+HKCU,"AppEvents\EventLabels\RestoreDown","DispFileName",0x00000000,"@mmsys.cpl,-5841"\r
+HKCU,"AppEvents\EventLabels\RestoreUp","",0x00000000,"Restore Up"\r
+HKCU,"AppEvents\EventLabels\RestoreUp","DispFileName",0x00000000,"@mmsys.cpl,-5842"\r
+HKCU,"AppEvents\EventLabels\SystemAsterisk","",0x00000000,"Asterisk"\r
+HKCU,"AppEvents\EventLabels\SystemAsterisk","DispFileName",0x00000000,"@mmsys.cpl,-5843"\r
+HKCU,"AppEvents\EventLabels\SystemExclamation","",0x00000000,"Exclamation"\r
+HKCU,"AppEvents\EventLabels\SystemExclamation","DispFileName",0x00000000,"@mmsys.cpl,-5845"\r
+HKCU,"AppEvents\EventLabels\SystemExit","",0x00000000,"Exit ReactOS"\r
+HKCU,"AppEvents\EventLabels\SystemExit","DispFileName",0x00000000,"@mmsys.cpl,-5846"\r
+HKCU,"AppEvents\EventLabels\SystemHand","",0x00000000,"Critical Stop"\r
+HKCU,"AppEvents\EventLabels\SystemHand","DispFileName",0x00000000,"@mmsys.cpl,-5847"\r
+HKCU,"AppEvents\EventLabels\SystemNotification","",0x00000000,"System Notification"\r
+HKCU,"AppEvents\EventLabels\SystemNotification","DispFileName",0x00000000,"@mmsys.cpl,-5848"\r
+HKCU,"AppEvents\EventLabels\SystemQuestion","",0x00000000,"Question"\r
+HKCU,"AppEvents\EventLabels\SystemQuestion","DispFileName",0x00000000,"@mmsys.cpl,-5849"\r
+HKCU,"AppEvents\EventLabels\SystemStart","",0x00000000,"Start ReactOS"\r
+HKCU,"AppEvents\EventLabels\SystemStart","DispFileName",0x00000000,"@mmsys.cpl,-5850"\r
+HKCU,"AppEvents\EventLabels\WindowsLogoff","",0x00000000,"ReactOS Logoff"\r
+HKCU,"AppEvents\EventLabels\WindowsLogoff","DispFileName",0x00000000,"@mmsys.cpl,-5852"\r
+HKCU,"AppEvents\EventLabels\WindowsLogon","",0x00000000,"ReactOS Logon"\r
+HKCU,"AppEvents\EventLabels\WindowsLogon","DispFileName",0x00000000,"@mmsys.cpl,-5853"\r
+\r
+;-------------------------------- STRINGS -------------------------------\r
+\r
+[Strings]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_BULGARIAN SUBLANG_NEUTRAL\r
+;[Strings.0002]\r
+;TEMP_DIR="%USERPROFILE%\..."\r
+\r
+\r
+; LANG_CZECH SUBLANG_NEUTRAL\r
+[Strings.0005]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_DANISH SUBLANG_NEUTRAL\r
+[Strings.0006]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Lokale Indstillinger\Temp"\r
+\r
+\r
+; LANG_GERMAN SUBLANG_NEUTRAL\r
+[Strings.0007]\r
+POWERCFG_NAME_0="Zuhause/Büro"\r
+POWERCFG_DESC_0="Dieses Schema ist für die meisten Computer Zuhause oder im Büro geeignet die durchgehend mit dem Stromnetz verbunden sind."\r
+POWERCFG_NAME_1="Portabel/Laptop"\r
+POWERCFG_DESC_1="Dieses Schema ist auf eine erweiterte Batterielebensdauer für unterwegs ausgelegt."\r
+POWERCFG_NAME_2="Präsentation"\r
+POWERCFG_DESC_2="Dieses Schema lässt den Bildschirm für Präsentationen eingeschaltet."\r
+POWERCFG_NAME_3="Immer an"\r
+POWERCFG_DESC_3="Dieses Schema lässt den Computer immer eingeschaltet, so dass er immer aus dem Netzwerk erreicht werden kann. Nutzen Sie dieses Schema, wenn Ihre Hardware nicht über das Netzwerk aufgeweckt werden kann."\r
+POWERCFG_NAME_4="Minimales Power Management"\r
+POWERCFG_DESC_4="Dieses Schema lässt den Computer immer eingeschaltet und ist auf hohe Leistung optimiert."\r
+POWERCFG_NAME_5="Maximale Batterie"\r
+POWERCFG_DESC_5="Dieses Schema spart extrem aggressiv Strom."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Backstein"\r
+DESKTOP_SCHEME_2="Aubergine"\r
+DESKTOP_SCHEME_3="Olivgrün"\r
+DESKTOP_SCHEME_4="Hoher Kontrast 1"\r
+DESKTOP_SCHEME_5="Hoher Kontrast 2"\r
+DESKTOP_SCHEME_6="Hoher Kontrast Schwarz"\r
+DESKTOP_SCHEME_7="Hoher Kontrast Weiß"\r
+DESKTOP_SCHEME_8="Flieder"\r
+DESKTOP_SCHEME_9="Ahorn"\r
+DESKTOP_SCHEME_10="Ozean"\r
+DESKTOP_SCHEME_11="Pflaume"\r
+DESKTOP_SCHEME_12="Kürbis"\r
+DESKTOP_SCHEME_13="Regentag"\r
+DESKTOP_SCHEME_14="ReactOS Klassisch"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Himmel"\r
+DESKTOP_SCHEME_18="Schiefer"\r
+DESKTOP_SCHEME_19="Sturm"\r
+DESKTOP_SCHEME_20="Türkis"\r
+DESKTOP_SCHEME_21="Gelbbraun"\r
+TEMP_DIR="%USERPROFILE%\Lokale Einstellungen\Temp"\r
+\r
+\r
+; LANG_GREEK SUBLANG_NEUTRAL\r
+[Strings.0008]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_SPANISH SUBLANG_NEUTRAL\r
+[Strings.000A]\r
+POWERCFG_NAME_0="Casa/Officina"\r
+POWERCFG_DESC_0="Esta combinación es ideal para la mayor pare de los usuarios home o desktop que dejan el equipo conectado todo el tiempo."\r
+POWERCFG_NAME_1="Portátil/Laptop"\r
+POWERCFG_DESC_1="Esta combinación está diseñada para aumentar la duración de la batería cuando se viaja."\r
+POWERCFG_NAME_2="Presentación"\r
+POWERCFG_DESC_2="Esta combinación mantiene el monitor encendido para hacer presentaciones."\r
+POWERCFG_NAME_3="Siempre activa"\r
+POWERCFG_DESC_3="Esta combinación mantiene la computadora encendida para que pueda ser accedida desde la red. Usar esta combinación si no se dispone de hardware WOL."\r
+POWERCFG_NAME_4="Administración mínima de la corriente"\r
+POWERCFG_DESC_4="Esta combinación mantiene la computadora encendida y la optimiza para una performance elevada."\r
+POWERCFG_NAME_5="Máxima Batería"\r
+POWERCFG_DESC_5="Esta combinación permite el máximo ahorro de la energía."\r
+DESKTOP_SCHEME_0="ReactOS Estandard"\r
+DESKTOP_SCHEME_1="Rojo ladrillo"\r
+DESKTOP_SCHEME_2="Berenjena"\r
+DESKTOP_SCHEME_3="Verde Olivo"\r
+DESKTOP_SCHEME_4="Alto Contraste 1"\r
+DESKTOP_SCHEME_5="Alto Contraste 2"\r
+DESKTOP_SCHEME_6="Alto Contraste Negro"\r
+DESKTOP_SCHEME_7="Alto Contraste Blanco"\r
+DESKTOP_SCHEME_8="Lila"\r
+DESKTOP_SCHEME_9="Arce"\r
+DESKTOP_SCHEME_10="Verde Marino"\r
+DESKTOP_SCHEME_11="Ciruela"\r
+DESKTOP_SCHEME_12="Calabaza"\r
+DESKTOP_SCHEME_13="Día lluvioso"\r
+DESKTOP_SCHEME_14="ReactOS Clásico"\r
+DESKTOP_SCHEME_15="Rosa"\r
+DESKTOP_SCHEME_16="Arena"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Gris"\r
+DESKTOP_SCHEME_19="Tormenta"\r
+DESKTOP_SCHEME_20="Verde agua"\r
+DESKTOP_SCHEME_21="Tabaco"\r
+TEMP_DIR="%USERPROFILE%\Configuración Local\Temp"\r
+\r
+\r
+; LANG_FINNISH SUBLANG_NEUTRAL\r
+[Strings.000B]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Paikalliset Asetukset\Temp"\r
+\r
+\r
+; LANG_FRENCH SUBLANG_NEUTRAL\r
+[Strings.000C]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_HUNGARIAN SUBLANG_NEUTRAL\r
+[Strings.000E]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_ITALIAN SUBLANG_NEUTRAL\r
+[Strings.0010]\r
+POWERCFG_NAME_0="Casa/Ufficio"\r
+POWERCFG_DESC_0="Questa combinazione è ottimale per la maggior parte degli utenti che sono collegati tutto il tempo."\r
+POWERCFG_NAME_1="Portatile/Laptop"\r
+POWERCFG_DESC_1="Questa combinazione è pensata per incrementare la durata della batteria quendo si è in viaggio."\r
+POWERCFG_NAME_2="Presentazione"\r
+POWERCFG_DESC_2="Questa combinazione mantiene il monitor acceso per presentazioni."\r
+POWERCFG_NAME_3="Sempre attivo"\r
+POWERCFG_DESC_3="Questa combinazione mantiene il computer in esecuzione di modo che sia accessibile dalla rete. Usate questa combinazione se non avete un hardware compatible WOL."\r
+POWERCFG_NAME_4="Gestione minima dell'alimentazione"\r
+POWERCFG_DESC_4="Questa combinazione mantiene il computer acceso e ottimizza la performance."\r
+POWERCFG_NAME_5="Batteria massima"\r
+POWERCFG_DESC_5="Questa combinazione risparmia il massimo dell'energia."\r
+DESKTOP_SCHEME_0="ReactOS standard"\r
+DESKTOP_SCHEME_1="Rosso mattone"\r
+DESKTOP_SCHEME_2="Melanzana"\r
+DESKTOP_SCHEME_3="Verde Oliva"\r
+DESKTOP_SCHEME_4="Contrasto elevato 1"\r
+DESKTOP_SCHEME_5="Contrasto elevato 2"\r
+DESKTOP_SCHEME_6="Nero a contrasto elevato"\r
+DESKTOP_SCHEME_7="Bianco a contrasto elevato"\r
+DESKTOP_SCHEME_8="Lilla"\r
+DESKTOP_SCHEME_9="Giallo cromo chiaro"\r
+DESKTOP_SCHEME_10="Verde mare"\r
+DESKTOP_SCHEME_11="Prugna"\r
+DESKTOP_SCHEME_12="Giallo cromo scuro"\r
+DESKTOP_SCHEME_13="Grigio antracite"\r
+DESKTOP_SCHEME_14="ReactOS classico"\r
+DESKTOP_SCHEME_15="Rosa"\r
+DESKTOP_SCHEME_16="Sabbia"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Lavagna"\r
+DESKTOP_SCHEME_19="Tempesta"\r
+DESKTOP_SCHEME_20="Verde acqua"\r
+DESKTOP_SCHEME_21="Tabacco"\r
+TEMP_DIR="%USERPROFILE%\Impostazioni locali\Temp"\r
+\r
+\r
+; LANG_JAPANESE SUBLANG_NEUTRAL\r
+[Strings.0011]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_DUTCH SUBLANG_NEUTRAL\r
+[Strings.0013]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_NORWEGIAN SUBLANG_NEUTRAL\r
+[Strings.0014]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Lokale innstillinger\Midlertidig"\r
+\r
+\r
+; LANG_POLISH SUBLANG_NEUTRAL\r
+[Strings.0015]\r
+POWERCFG_NAME_0="Dom/Biuro"\r
+POWERCFG_DESC_0="Ten profil przeznaczony jest dla komputerów domowych lub biurowych, które są cały czas podłączone do zasilania."\r
+POWERCFG_NAME_1="Przenośny/Laptop"\r
+POWERCFG_DESC_1="Ten profil umożliwia oszczędne gospodarowanie zasilaniem, co przydaje się podczas pracy na urządzeniach przenośnych, nie podłączonych do zasilania zewnętrznego."\r
+POWERCFG_NAME_2="Prezentacja"\r
+POWERCFG_DESC_2="Ten profil pozostawia monitor włączony cały czas, co jest przydatne podczas przeprowadzania prezentacji."\r
+POWERCFG_NAME_3="Zawsze włączony"\r
+POWERCFG_DESC_3="Ten schemat nigdy nie wyłącza komputera, co jest istotne gdy maszyna nie obsługuje wybudzania przez sieć."\r
+POWERCFG_NAME_4="Brak zarządzania energią"\r
+POWERCFG_DESC_4="Ten schemat nie korzysta z żadnych mechanizmów oszczędzania energii, przy jego maksymalnej wydajności."\r
+POWERCFG_NAME_5="Maks. oszczędzanie"\r
+POWERCFG_DESC_5="Ten profil minimalizuje zużycie energii, kosztem wydajności sprzętu."\r
+DESKTOP_SCHEME_0="Podstawowy ReactOS"\r
+DESKTOP_SCHEME_1="Cegła"\r
+DESKTOP_SCHEME_2="Bakłażan"\r
+DESKTOP_SCHEME_3="Zielona Oliwka"\r
+DESKTOP_SCHEME_4="Duży kontrast nr 1"\r
+DESKTOP_SCHEME_5="Duży kontrast nr 2"\r
+DESKTOP_SCHEME_6="Czerń o dużym kontraście"\r
+DESKTOP_SCHEME_7="Biel o dużym kontraście"\r
+DESKTOP_SCHEME_8="Lilak"\r
+DESKTOP_SCHEME_9="Klon"\r
+DESKTOP_SCHEME_10="Morski"\r
+DESKTOP_SCHEME_11="Śliwkowy"\r
+DESKTOP_SCHEME_12="Dynia"\r
+DESKTOP_SCHEME_13="Deszczowy Dzień"\r
+DESKTOP_SCHEME_14="Klasyczny ReactOS"\r
+DESKTOP_SCHEME_15="Róża"\r
+DESKTOP_SCHEME_16="Piasek"\r
+DESKTOP_SCHEME_17="Niebo"\r
+DESKTOP_SCHEME_18="Łupek"\r
+DESKTOP_SCHEME_19="Burza"\r
+DESKTOP_SCHEME_20="Morska Zieleń"\r
+DESKTOP_SCHEME_21="Pszenica"\r
+TEMP_DIR="%USERPROFILE%\Ustawienia lokalne\Temp"\r
+\r
+\r
+; LANG_PORTUGESE SUBLANG_NEUTRAL\r
+;[Strings.0016]\r
+;TEMP_DIR="%USERPROFILE%\..."\r
+\r
+\r
+; LANG_ROMANIAN SUBLANG_NEUTRAL\r
+[Strings.0018]\r
+POWERCFG_NAME_0="Acasă/Birou"\r
+POWERCFG_DESC_0="Aceas regim este potrivit calculatoarelor conectate permanent la rețeaua electrică."\r
+POWERCFG_NAME_1="Portabilitate"\r
+POWERCFG_DESC_1="Aceast regim a fost conceput pentru a spori perioada de alimentare a bateriei calculatoarelor portabile."\r
+POWERCFG_NAME_2="Prezentare"\r
+POWERCFG_DESC_2="Aceast regim menține ecranul în permanență deschis (util pentru prezentări)."\r
+POWERCFG_NAME_3="Conectat în permanență"\r
+POWERCFG_DESC_3="Aceast regim menține calculatorul disponibil pentru a putea fi accesat din rețea. Utilizați această opțiune în lipsa soluțiilor de autodeschidere pentru rețea."\r
+POWERCFG_NAME_4="Gestiune minimă"\r
+POWERCFG_DESC_4="Aceast regim menține calculatorul deschis și-i optimizează alimentarea pentru o înaltă performanță."\r
+POWERCFG_NAME_5="Alimentare maximă"\r
+POWERCFG_DESC_5="Aceasta este cel mai agresiv regim de reducere a consumului și de extindere a perioadei de alimentare."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Cărămiziu"\r
+DESKTOP_SCHEME_2="Vânăt"\r
+DESKTOP_SCHEME_3="Verde măsliniu"\r
+DESKTOP_SCHEME_4="Contrast sporit 1"\r
+DESKTOP_SCHEME_5="Contrast sporit 2"\r
+DESKTOP_SCHEME_6="Contrast sporit Negru"\r
+DESKTOP_SCHEME_7="Contrast sporit Alb"\r
+DESKTOP_SCHEME_8="Liliachiu"\r
+DESKTOP_SCHEME_9="Arțar"\r
+DESKTOP_SCHEME_10="Marin"\r
+DESKTOP_SCHEME_11="Prună"\r
+DESKTOP_SCHEME_12="Dovleac"\r
+DESKTOP_SCHEME_13="Zi ploioasă"\r
+DESKTOP_SCHEME_14="ReactOS Clasic"\r
+DESKTOP_SCHEME_15="Trandafiriu"\r
+DESKTOP_SCHEME_16="Nisip"\r
+DESKTOP_SCHEME_17="Cer"\r
+DESKTOP_SCHEME_18="Ardezie"\r
+DESKTOP_SCHEME_19="Furtună"\r
+DESKTOP_SCHEME_20="Turcoaz"\r
+DESKTOP_SCHEME_21="Grâu"\r
+TEMP_DIR="%USERPROFILE%\Preferințe locale\Temp"\r
+\r
+\r
+; LANG_RUSSIAN SUBLANG_NEUTRAL\r
+[Strings.0019]\r
+POWERCFG_NAME_0="Домашний/офисный настольный"\r
+POWERCFG_DESC_0="Эта схема подходит для большинства домашних и офисных настольных компьютеров, которые работают от электросети."\r
+POWERCFG_NAME_1="Переносный/ноутбук"\r
+POWERCFG_DESC_1="Эта схема предназначена для продления времени работы переносного компьютера от батареи в дороге."\r
+POWERCFG_NAME_2="Презентация"\r
+POWERCFG_DESC_2="Эта схема оставляет монитор включённым для ведения презентаций."\r
+POWERCFG_NAME_3="Всегда включён"\r
+POWERCFG_DESC_3="Эта схема оставляет компьютер работающим, так что он остаётся доступным из сети. Используйте эту схему, если оборудование не поддерживает включение компьютера через сеть."\r
+POWERCFG_NAME_4="Минимальное управление питанием"\r
+POWERCFG_DESC_4="Эта схема оставляет компьютер включённым и настраивает его на высокую производительность."\r
+POWERCFG_NAME_5="Продолжительная работа от батареи"\r
+POWERCFG_DESC_5="Эта схема предназначена для максимальной экономии энергии."\r
+DESKTOP_SCHEME_0="ReactOS стандартная"\r
+DESKTOP_SCHEME_1="Кирпич"\r
+DESKTOP_SCHEME_2="Баклажан"\r
+DESKTOP_SCHEME_3="Зелёная оливка"\r
+DESKTOP_SCHEME_4="Высокая контрастность–1"\r
+DESKTOP_SCHEME_5="Высокая контрастность–2"\r
+DESKTOP_SCHEME_6="Контрастная чёрная"\r
+DESKTOP_SCHEME_7="Контрастная белая"\r
+DESKTOP_SCHEME_8="Сирень"\r
+DESKTOP_SCHEME_9="Клён"\r
+DESKTOP_SCHEME_10="Морская"\r
+DESKTOP_SCHEME_11="Слива"\r
+DESKTOP_SCHEME_12="Тыква"\r
+DESKTOP_SCHEME_13="Дождливый день"\r
+DESKTOP_SCHEME_14="ReactOS классическая"\r
+DESKTOP_SCHEME_15="Роза"\r
+DESKTOP_SCHEME_16="Песок"\r
+DESKTOP_SCHEME_17="Небо"\r
+DESKTOP_SCHEME_18="Шифер"\r
+DESKTOP_SCHEME_19="Шторм"\r
+DESKTOP_SCHEME_20="Зеленовато-голубая"\r
+DESKTOP_SCHEME_21="Пшеница"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_SLOVAK SUBLANG_NEUTRAL\r
+[Strings.001B]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_SWEDISH SUBLANG_NEUTRAL\r
+;[Strings.001D]\r
+;TEMP_DIR="%USERPROFILE%\..."\r
+\r
+\r
+; LANG_THAI SUBLANG_NEUTRAL\r
+;[Strings.001E]\r
+;TEMP_DIR="%USERPROFILE%\..."\r
+\r
+\r
+; LANG_INDONESIAN SUBLANG_NEUTRAL\r
+[Strings.0021]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_UKRAINIAN SUBLANG_NEUTRAL\r
+[Strings.0022]\r
+POWERCFG_NAME_0="Домашній/Офісний Настільний"\r
+POWERCFG_DESC_0="Ця схема підходить для більшості домашніх або настільних комп'ютерів, які залишаються підключеними весь час."\r
+POWERCFG_NAME_1="Портативний/Ноутбук"\r
+POWERCFG_DESC_1="Ця схема призначена для більш тривалої роботи для портативних комп'ютерів в дорозі."\r
+POWERCFG_NAME_2="Презентація"\r
+POWERCFG_DESC_2="Ця схема утримує монітор ввімкненим для ведення презентацій."\r
+POWERCFG_NAME_3="Завжди ввімкнено"\r
+POWERCFG_DESC_3="Ця схема утримує комп'ютер в роботі, і він може бути доступний з мережі. Використовуйте цю схему, якщо у вас немає обладнання для мережевого пробудження."\r
+POWERCFG_NAME_4="Мінімальне Керування Електроживленням"\r
+POWERCFG_DESC_4="Ця схема утримує комп'ютер ввімкненим і оптимізує його для високої продуктивності."\r
+POWERCFG_NAME_5="Максимальна батарея"\r
+POWERCFG_DESC_5="Ця схема є вкрай агресивною для економії енергії."\r
+DESKTOP_SCHEME_0="ReactOS Стандартна"\r
+DESKTOP_SCHEME_1="Цегла"\r
+DESKTOP_SCHEME_2="Баклажан"\r
+DESKTOP_SCHEME_3="Зелена Оливка"\r
+DESKTOP_SCHEME_4="Висока Контрастність 1"\r
+DESKTOP_SCHEME_5="Висока Контрастність 2"\r
+DESKTOP_SCHEME_6="Контрастна Чорна"\r
+DESKTOP_SCHEME_7="Контрастна Біла"\r
+DESKTOP_SCHEME_8="Бузок"\r
+DESKTOP_SCHEME_9="Клен"\r
+DESKTOP_SCHEME_10="Морська"\r
+DESKTOP_SCHEME_11="Слива"\r
+DESKTOP_SCHEME_12="Гарбуз"\r
+DESKTOP_SCHEME_13="Дощовий День"\r
+DESKTOP_SCHEME_14="ReactOS Класична"\r
+DESKTOP_SCHEME_15="Троянда"\r
+DESKTOP_SCHEME_16="Пісок"\r
+DESKTOP_SCHEME_17="Небо"\r
+DESKTOP_SCHEME_18="Шифер"\r
+DESKTOP_SCHEME_19="Шторм"\r
+DESKTOP_SCHEME_20="Зеленовато-блакитна"\r
+DESKTOP_SCHEME_21="Пшениця"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+\r
+; LANG_LITHUANIAN SUBLANG_NEUTRAL\r
+[Strings.0027]\r
+POWERCFG_NAME_0="Home/Office Desk"\r
+POWERCFG_DESC_0="This scheme is suited to most home or desktop computers that are left plugged in all the time."\r
+POWERCFG_NAME_1="Portable/Laptop"\r
+POWERCFG_DESC_1="This scheme is designed for extended battery life for portable computers on the road."\r
+POWERCFG_NAME_2="Presentation"\r
+POWERCFG_DESC_2="This scheme keeps the monitor on for doing presentations."\r
+POWERCFG_NAME_3="Always On"\r
+POWERCFG_DESC_3="This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware."\r
+POWERCFG_NAME_4="Minimal Power Management"\r
+POWERCFG_DESC_4="This scheme keeps the computer on and optimizes it for high performance."\r
+POWERCFG_NAME_5="Max Battery"\r
+POWERCFG_DESC_5="This scheme is extremely aggressive for saving power."\r
+DESKTOP_SCHEME_0="ReactOS Standard"\r
+DESKTOP_SCHEME_1="Brick"\r
+DESKTOP_SCHEME_2="Eggplant"\r
+DESKTOP_SCHEME_3="Green Olive"\r
+DESKTOP_SCHEME_4="High Contrast 1"\r
+DESKTOP_SCHEME_5="High Contrast 2"\r
+DESKTOP_SCHEME_6="High Contrast Black"\r
+DESKTOP_SCHEME_7="High Contrast White"\r
+DESKTOP_SCHEME_8="Lilac"\r
+DESKTOP_SCHEME_9="Maple"\r
+DESKTOP_SCHEME_10="Marine"\r
+DESKTOP_SCHEME_11="Plum"\r
+DESKTOP_SCHEME_12="Pumpkin"\r
+DESKTOP_SCHEME_13="Rainy Day"\r
+DESKTOP_SCHEME_14="ReactOS Classic"\r
+DESKTOP_SCHEME_15="Rose"\r
+DESKTOP_SCHEME_16="Sand"\r
+DESKTOP_SCHEME_17="Sky"\r
+DESKTOP_SCHEME_18="Slate"\r
+DESKTOP_SCHEME_19="Storm"\r
+DESKTOP_SCHEME_20="Teal"\r
+DESKTOP_SCHEME_21="Wheat"\r
+TEMP_DIR="%USERPROFILE%\Local Settings\Temp"\r
+\r
+; EOF\r
arch/i386/hwapm.c
arch/i386/hwdisk.c
arch/i386/hwpci.c
+ arch/i386/i386bug.c
arch/i386/i386rtl.c
arch/i386/i386disk.c
arch/i386/i386vid.c
nop
+ PUBLIC Reboot
+ Reboot:
+ /* Set the function ID */
+ mov bx, FNID_Reboot
+
+ /* Switch to real mode (We don't return) */
+ jmp SwitchToReal
+
+
/* Internal function for realmode calls
* bx must be set to the ID of the realmode function to call. */
PUBLIC CallRealMode
{
PKGDTENTRY64 Entry;
KDESCRIPTOR GdtDesc;
+ TRACE("Amd64SetupGdt(GdtBase = %p, TssBase = %p)\n", GdtBase, TssBase);
/* Setup KGDT64_NULL */
Entry = KiGetGdtEntry(GdtBase, KGDT64_NULL);
/* Set the new Gdt */
__lgdt(&GdtDesc.Limit);
- TRACE("Gdtr.Base = %p, num = %ld\n", GdtDesc.Base, NUM_GDT);
-
+ TRACE("Leave Amd64SetupGdt()\n");
}
VOID
Amd64SetupIdt(PVOID IdtBase)
{
KDESCRIPTOR IdtDesc, OldIdt;
+ ULONG Size;
+ TRACE("Amd64SetupIdt(IdtBase = %p)\n", IdtBase);
/* Get old IDT */
- __sidt(&OldIdt);
+ __sidt(&OldIdt.Limit);
/* Copy the old IDT */
- RtlCopyMemory(IdtBase, (PVOID)OldIdt.Base, OldIdt.Limit + 1);
+ Size = min(OldIdt.Limit + 1, NUM_IDT * sizeof(KIDTENTRY));
+ //RtlCopyMemory(IdtBase, (PVOID)OldIdt.Base, Size);
/* Setup the new IDT descriptor */
IdtDesc.Base = IdtBase;
/* Set the new IDT */
__lidt(&IdtDesc.Limit);
- TRACE("Idtr.Base = %p\n", IdtDesc.Base);
-
+ TRACE("Leave Amd64SetupIdt()\n");
}
VOID
Amd64SetupGdt(GdtIdt, KSEG0_BASE | (TssBasePage << MM_PAGE_SHIFT));
/* Copy old Idt and set idtr */
- Amd64SetupIdt((PVOID)((ULONG64)GdtIdt + 2048)); // HACK!
+ Amd64SetupIdt((PVOID)((ULONG64)GdtIdt + NUM_GDT * sizeof(KGDTENTRY)));
/* LDT is unused */
// __lldt(0);
TssBasePage = Tss >> MM_PAGE_SHIFT;
/* Allocate space for new GDT + IDT */
- BlockSize = NUM_GDT*sizeof(KGDTENTRY) + NUM_IDT*sizeof(KIDTENTRY);//FIXME: Use GDT/IDT limits here?
+ BlockSize = NUM_GDT * sizeof(KGDTENTRY) + NUM_IDT * sizeof(KIDTENTRY);
NumPages = (BlockSize + MM_PAGE_SIZE - 1) >> MM_PAGE_SHIFT;
GdtIdt = (PKGDTENTRY)MmAllocateMemoryWithType(NumPages * MM_PAGE_SIZE, LoaderMemoryData);
if (GdtIdt == NULL)
#if DBG && !defined(_M_ARM)
//#define DEBUG_ALL
+ //#define DEBUG_WARN
+ //#define DEBUG_ERR
//#define DEBUG_INIFILE
//#define DEBUG_REACTOS
//#define DEBUG_CUSTOM
//ULONG DebugPort = SCREEN;
//ULONG DebugPort = BOCHS;
//ULONG DebugPort = SCREEN|BOCHS;
+ #ifdef _WINKD_
+ /* COM1 is the WinDbg port */
+ ULONG ComPort = COM2;
+ #else
ULONG ComPort = COM1;
+ #endif
//ULONG BaudRate = 19200;
ULONG BaudRate = 115200;
{
#if defined (DEBUG_ALL)
memset(DbgChannels, MAX_LEVEL, DBG_CHANNELS_COUNT);
+ #elif defined (DEBUG_WARN)
+ memset(DbgChannels, WARN_LEVEL|FIXME_LEVEL|ERR_LEVEL, DBG_CHANNELS_COUNT);
+ #elif defined (DEBUG_ERR)
+ memset(DbgChannels, ERR_LEVEL, DBG_CHANNELS_COUNT);
#else
memset(DbgChannels, 0, DBG_CHANNELS_COUNT);
#endif
#ifdef __GNUC__
#define FREELDR_SECTION_COUNT 3
#else
+ #ifdef _M_AMD64
+ /* .text and .pdata */
+ #define FREELDR_SECTION_COUNT 2
+ #else
#define FREELDR_SECTION_COUNT 1
#endif
+ #endif
typedef struct _FREELDR_MEMORY_DESCRIPTOR
{
NtHeaders = RtlImageNtHeader(&__ImageBase);
if (!NtHeaders)
{
- ERR("Coult not get NtHeaders!\n");
+ ERR("Could not get NtHeaders!\n");
return FALSE;
}
(FileHeader->NumberOfSections != FREELDR_SECTION_COUNT) ||
(FileHeader->PointerToSymbolTable != 0) ||
(FileHeader->NumberOfSymbols != 0) ||
- (FileHeader->SizeOfOptionalHeader != 0xE0))
+ (FileHeader->SizeOfOptionalHeader != sizeof(IMAGE_OPTIONAL_HEADER)))
{
+ ERR("FreeLdr FileHeader is invalid.\n");
+ BugCheckInfo[0] = FileHeader->Machine;
+ BugCheckInfo[1] = FileHeader->NumberOfSections;
+ BugCheckInfo[2] = FileHeader->PointerToSymbolTable;
+ BugCheckInfo[3] = FileHeader->NumberOfSymbols;
+ BugCheckInfo[4] = FileHeader->SizeOfOptionalHeader;
return FALSE;
}
(OptionalHeader->SizeOfImage > MAX_FREELDR_PE_SIZE) ||
(OptionalHeader->SectionAlignment != OptionalHeader->FileAlignment))
{
+ ERR("FreeLdr OptionalHeader is invalid.\n");
+ BugCheckInfo[0] = 0x80000000 | (OptionalHeader->Subsystem << 16) | OptionalHeader->Magic;
+ BugCheckInfo[1] = OptionalHeader->ImageBase;
+ BugCheckInfo[2] = OptionalHeader->SizeOfImage;
+ BugCheckInfo[3] = OptionalHeader->SectionAlignment;
+ BugCheckInfo[4] = OptionalHeader->FileAlignment;
return FALSE;
}
endforeach()
set(${OUTPUT_VAR} ${__tmp_var} PARENT_SCOPE)
endfunction()
+
+ if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
+ function(add_object_library _target)
+ add_library(${_target} OBJECT ${ARGN})
+ endfunction()
+ else()
+ function(add_object_library _target)
+ add_library(${_target} ${ARGN})
+ endfunction()
+ endif()
endif()
else()
- set(KDBG TRUE CACHE BOOL
- "Whether to compile in the integrated kernel debugger.")
- set(_WINKD_ FALSE CACHE BOOL
- "Whether to compile with the KD protocol.")
+ if(CMAKE_BUILD_TYPE STREQUAL "Release")
+ set(KDBG FALSE CACHE BOOL "Whether to compile in the integrated kernel debugger.")
+ else()
+ set(KDBG TRUE CACHE BOOL "Whether to compile in the integrated kernel debugger.")
+ endif()
+ set(_WINKD_ FALSE CACHE BOOL "Whether to compile with the KD protocol.")
endif()
set(_ELF_ FALSE CACHE BOOL
add_compile_flags("-mpreferred-stack-boundary=4")
endif()
+ # PSEH
+ if(GCC_VERSION VERSION_GREATER 4.7)
+ set(USE_PSEH3 1)
+ add_definitions(-D_USE_PSEH3=1)
+ endif()
+
# Other
if(ARCH STREQUAL "amd64")
add_definitions(-U_X86_ -UWIN32)
FONT 9, "MS UI Gothic", 0, 0, 0x0
BEGIN
GROUPBOX "固定キー機能",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
- LTEXT "固定キー機能 を使うと、キーを同時に押さなくても、Shift、Ctrl、Alt キーの機能 が使えます。",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
- AUTOCHECKBOX "固定キー機能 を使う(&U)",IDC_STICKY_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
+ LTEXT "固定キー機能を使うと、キーを同時に押さなくても、Shift、Ctrl、Alt キーの機能が使えます。",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
+ AUTOCHECKBOX "固定キー機能を使う(&U)",IDC_STICKY_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
PUSHBUTTON "設定(&S)",IDC_STICKY_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14
GROUPBOX "フィルタ キー機能",-1,PROPSHEETPADDING(1),LABELLINE(8)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(7)+2
- LTEXT "フィルタ キー機能 を使うと、速いキー入力や繰り返されたキー入力を無視したり、繰り返し入力の間隔を長くしたりすることができます。",-1,PROPSHEETPADDING(2),LABELLINE(10)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
- AUTOCHECKBOX "フィルタ キー機能 を使う(&F)",IDC_FILTER_BOX,PROPSHEETPADDING(2),LABELLINE(13)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
+ LTEXT "フィルタ キー機能を使うと、速いキー入力や繰り返されたキー入力を無視したり、繰り返し入力の間隔を長くしたりすることができます。",-1,PROPSHEETPADDING(2),LABELLINE(10)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
+ AUTOCHECKBOX "フィルタ キー機能を使う(&F)",IDC_FILTER_BOX,PROPSHEETPADDING(2),LABELLINE(13)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
PUSHBUTTON "設定(&E)",IDC_FILTER_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(13)+2,PROPSHEETPADDING(15),14
GROUPBOX "切り替えキー機能",-1,PROPSHEETPADDING(1),LABELLINE(16)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
- LTEXT "切り替えキー機能 を使うと、CapsLock、NumLock、ScrollLock キーを押したときに音を鳴らします。",-1,PROPSHEETPADDING(2),LABELLINE(18)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2)
- AUTOCHECKBOX "切り替えキー機能 を使う(&T)",IDC_TOGGLE_BOX,PROPSHEETPADDING(2),LABELLINE(20)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
+ LTEXT "切り替えキー機能を使うと、CapsLock、NumLock、ScrollLock キーを押したときに音を鳴らします。",-1,PROPSHEETPADDING(2),LABELLINE(18)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2)
+ AUTOCHECKBOX "切り替えキー機能を使う(&T)",IDC_TOGGLE_BOX,PROPSHEETPADDING(2),LABELLINE(20)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
PUSHBUTTON "設定(&N)",IDC_TOGGLE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(20)+2,PROPSHEETPADDING(15),14
- AUTOCHECKBOX "プログラムで追加のキーボード ヘルプを表 示する(&W)",IDC_KEYBOARD_EXTRA,PROPSHEETPADDING(1),LABELLINE(23)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),14
+ AUTOCHECKBOX "プログラムで追加のキーボード ヘルプを表示する(&W)",IDC_KEYBOARD_EXTRA,PROPSHEETPADDING(1),LABELLINE(23)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),14
END
COMBOBOX IDC_SENTRY_COMBO, PROPSHEETPADDING(2), LABELLINE(9), PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6), CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP
GROUPBOX "サウンド解説",-1,PROPSHEETPADDING(1),LABELLINE(12)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(7)+2
- LTEXT "プログラムが音を鳴らすとき、鳴らす音について解説を表 示します。",-1,PROPSHEETPADDING(2),LABELLINE(14)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
+ LTEXT "プログラムが音を鳴らすとき、鳴らす音について解説を表示します。",-1,PROPSHEETPADDING(2),LABELLINE(14)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
AUTOCHECKBOX "サウンド解説(&H)",IDC_SSHOW_BOX,PROPSHEETPADDING(2),LABELLINE(16)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14
END
FONT 9, "MS UI Gothic", 0, 0, 0x0
BEGIN
GROUPBOX "ハイコントラスト",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
- LTEXT "この機能 を使うと、画面表 示に読みやすい配色とフォントを使います。",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
+ LTEXT "この機能を使うと、画面表示に読みやすい配色とフォントを使います。",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
AUTOCHECKBOX "ハイコントラストを使う(&U)",IDC_CONTRAST_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
PUSHBUTTON "設定(&S)",IDC_CONTRAST_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14
FONT 9, "MS UI Gothic", 0, 0, 0x0
BEGIN
GROUPBOX "マウス キー機能",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
- LTEXT "マウス キー機能 を使うと、テンキーを使ってマウス ポインタを操作できます。",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
- AUTOCHECKBOX "マウス キー機能 (&M)",IDC_MOUSE_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
+ LTEXT "マウス キー機能を使うと、テンキーを使ってマウス ポインタを操作できます。",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
+ AUTOCHECKBOX "マウス キー機能(&M)",IDC_MOUSE_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
PUSHBUTTON "設定(&S)",IDC_MOUSE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14
END
STRINGTABLE
BEGIN
IDS_CPLSYSTEMNAME "ユーザー補助"
- IDS_CPLSYSTEMDESCRIPTION "視覚、聴覚、四肢の状態に合わせて、ユーザーを補助する機能 を調整します。"
+ IDS_CPLSYSTEMDESCRIPTION "視覚、聴覚、四肢の状態に合わせて、ユーザーを補助する機能を調整します。"
IDS_SENTRY_NONE "[None]"
IDS_SENTRY_TITLE "Flash the titlebar"
LTEXT "", IDC_MACHINELINE4, 130, 171, 118, 9
LTEXT "", IDC_MACHINELINE5, 130, 180, 118, 9
CONTROL "<A HREF=""http://www.reactos.org/"">ReactOS ホームページ</A>へ行く", IDC_ROSHOMEPAGE_LINK, "SysLink", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 200, 140, 10
- PUSHBUTTON "ライセンスを表 示(&L)...", IDC_LICENCE, 170, 199, 78, 13
+ PUSHBUTTON "ライセンスを表示(&L)...", IDC_LICENCE, 170, 199, 78, 13
END
BEGIN
GROUPBOX "デバイス マネージャ", IDC_STATIC, 6, 7, 244, 61
ICON IDI_DEVMGR, IDC_STATIC, 12, 18, 23, 21, SS_ICON
- LTEXT "デバイスマネージャはコンピュータに装着されているすべてのハードウェアを表 示 します。各デバイスのプロパティを変更するにはデバイスマネージャを使用 してください。", IDC_STATIC, 42, 18, 204, 24
+ LTEXT "デバイスマネージャはコンピュータに装着されているすべてのハードウェアを表示 します。各デバイスのプロパティを変更するにはデバイスマネージャを使用 してください。", IDC_STATIC, 42, 18, 204, 24
PUSHBUTTON "デバイス マネージャ(&D)...", IDC_HARDWARE_DEVICE_MANAGER, 154, 48, 90, 15
GROUPBOX "ハードウェア ウィザード", IDC_STATIC, 6, 79, 244, 61
GROUPBOX "ハードウェア プロファイル", IDC_STATIC, 6, 149, 244, 61
ICON IDI_HARDPROF, IDC_STATIC, 12, 160, 23, 21, SS_ICON
- LTEXT "ハードウェアプロファイルは別のハードウェアの構 成を設定し、格納する方法を 提供します。", IDC_STATIC, 42, 160, 204, 24
+ LTEXT "ハードウェアプロファイルは別のハードウェアの構成を設定し、格納する方法を 提供します。", IDC_STATIC, 42, 160, 204, 24
PUSHBUTTON "ハードウェア プロファイル(&W)...", IDC_HARDWARE_PROFILE, 154, 190, 90, 15
END
FONT 9, "MS UI Gothic"
BEGIN
ICON IDI_HARDPROF, IDC_STATIC, 8, 11, 18, 20, SS_ICON
- LTEXT "異なるハードウェア構 成に合わせたハードウェア プロファイルをセットアップできます。 起動時に使用するプロファイルを選択できます。", IDC_STATIC, 46, 11, 188, 25
- LTEXT "利用可能 なハードウェア プロファイル:", IDC_STATIC, 8, 41, 120, 8
+ LTEXT "異なるハードウェア構成に合わせたハードウェア プロファイルをセットアップできます。 起動時に使用するプロファイルを選択できます。", IDC_STATIC, 46, 11, 188, 25
+ LTEXT "利用可能なハードウェア プロファイル:", IDC_STATIC, 8, 41, 120, 8
LISTBOX IDC_HRDPROFLSTBOX, 8, 52, 215, 54, LBS_NOTIFY
PUSHBUTTON "", IDC_HRDPROFUP, 232, 59, 15, 14, BS_ICON | WS_DISABLED
PUSHBUTTON "", IDC_HRDPROFDWN, 232, 79, 15, 14, BS_ICON | WS_DISABLED
GROUPBOX "システムの起動", IDC_STATIC, 7, 12, 238, 95
LTEXT "既定のオペレーティング システム(&S):", IDC_STATIC, 14, 26, 100, 8
COMBOBOX IDC_STRECOSCOMBO, 14, 37, 224, 46, CBS_DROPDOWNLIST
- AUTOCHECKBOX "オペレーティング システムの一覧を表 示する時間(&T):", IDC_STRECLIST, 14, 56, 160, 8
+ AUTOCHECKBOX "オペレーティング システムの一覧を表示する時間(&T):", IDC_STRECLIST, 14, 56, 160, 8
EDITTEXT IDC_STRRECLISTEDIT, 185, 54, 30, 12, ES_NUMBER
CONTROL "", IDC_STRRECLISTUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13
LTEXT "秒", IDC_STATIC, 223, 56, 18, 8
- AUTOCHECKBOX "必要なときに修復オプションを表 示する時間(&D):", IDC_STRRECREC, 14, 70, 170, 8
+ AUTOCHECKBOX "必要なときに修復オプションを表示する時間(&D):", IDC_STRRECREC, 14, 70, 170, 8
EDITTEXT IDC_STRRECRECEDIT, 185, 68, 30, 12, ES_NUMBER
CONTROL "", IDC_STRRECRECUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13
LTEXT "秒", IDC_STATIC, 223, 70, 18, 8
STRINGTABLE
BEGIN
IDS_CPLSYSTEMNAME "電話とモデムのオプション"
- IDS_CPLSYSTEMDESCRIPTION "電話のダイヤル情報とモデムのプロパティを構 成します。"
+ IDS_CPLSYSTEMDESCRIPTION "電話のダイヤル情報とモデムのプロパティを構成します。"
END
CONTROL "", IDC_MONTHCALENDAR, "MonthCalWnd",
WS_CHILD | WS_VISIBLE | WS_TABSTOP,
11, 37, 108, 80, WS_EX_CLIENTEDGE
- GROUPBOX "&Time", -1, 132, 2, 113, 125
+ GROUPBOX "&Ora", -1, 132, 2, 113, 125
CONTROL "", IDC_TIMEPICKER, "SysDateTimePick32",
DTS_TIMEFORMAT | WS_CHILD | WS_VISIBLE | WS_TABSTOP,
144, 105, 90, 12
PUSHBUTTON "Aggiorna ora", IDC_UPDATEBUTTON, 187, 22, 49, 14
LTEXT "", IDC_SUCSYNC, 12, 54, 214, 23
LTEXT "", IDC_NEXTSYNC, 12, 96, 137, 12
- LTEXT "La sincronizzazione può avvenire solo quando il computer è connesso a Internet.", -1, 12, 114, 225, 25
+ LTEXT "La sincronizzazione può avvenire solo quando il computer è connesso a Internet.", -1, 12, 114, 225, 25
END
IDS_TIMEZONETEXT "Fuso orario corrente: %s"
IDS_TIMEZONEINVALID "Non valido"
IDS_TIMEZONEUNKNOWN "Sconosciuto"
- IDS_INETTIMESUCSYNC "L'ora è stata sincronizzata correttamente con %s %s alle %s"
+ IDS_INETTIMESUCSYNC "L'ora è stata sincronizzata correttamente con %s %s alle %s"
IDS_INETTIMENEXTSYNC "Prossima sincronizzazione: %s alle %s"
IDS_INETTIMESYNCING "Sincronizzazione ora con %s"
IDS_INETTIMEERROR "E' stato rilevato un errore mentre ReactOS si stava sincronizzando con %s"
#ifdef LANGUAGE_ID_ID
#include "lang/id-ID.rc"
#endif
- #ifdef LANGUAGE_IT_IT
- #include "lang/it-IT.rc"
- #endif
#ifdef LANGUAGE_JA_JP
#include "lang/ja-JP.rc"
#endif
// UTF-8
#pragma code_page(65001)
+
#ifdef LANGUAGE_HE_IL
#include "lang/he-IL.rc"
#endif
+ #ifdef LANGUAGE_IT_IT
+ #include "lang/it-IT.rc"
+ #endif
#ifdef LANGUAGE_PL_PL
#include "lang/pl-PL.rc"
#endif
--- /dev/null
+
+ spec2def(ddraw.dll ddraw.spec ADD_IMPORTLIB)
+
+ list(APPEND SOURCE
+ cleanup.c
+ main.c
+ startup.c
+ Clipper/clipper_main.c
+ Clipper/clipper_stubs.c
+ Color/color_stubs.c
+ d3d/DirectD3D_main.c
+ Ddraw/callbacks_dd_hel.c
+ Ddraw/ddraw_displaymode.c
+ Ddraw/ddraw_main.c
+ Ddraw/ddraw_setcooperativelevel.c
+ Ddraw/ddraw_stubs.c
+ Ddraw/GetCaps.c
+ Ddraw/GetDeviceIdentifier.c
+ Gamma/gamma_stubs.c
+ Kernel/kernel_stubs.c
+ Palette/createpalette.c
+ Palette/palette.c
+ Surface/callbacks_surf_hel.c
+ Surface/createsurface.c
+ Surface/surface_main.c
+ Surface/surface_stubs.c
+ Videoport/videoport_stubs.c
+ Vtable/DirectD3D_Vtable.c
+ Vtable/DirectD3D2_Vtable.c
+ Vtable/DirectD3D3_Vtable.c
+ Vtable/DirectD3D7_Vtable.c
+ Vtable/DirectDraw_Vtable.c
+ Vtable/DirectDraw2_Vtable.c
+ Vtable/DirectDraw4_Vtable.c
+ Vtable/DirectDraw7_Vtable.c
+ Vtable/DirectDrawSurface_Vtable.c
+ Vtable/DirectDrawSurface2_Vtable.c
+ Vtable/DirectDrawSurface3_Vtable.c
+ Vtable/DirectDrawSurface4_Vtable.c
+ Vtable/DirectDrawSurface7_Vtable.c
+ )
+
+ add_library(ddraw SHARED ${SOURCE})
+
+ set_module_type(ddraw win32dll)
+
+ target_link_libraries(ddraw
+ uuid
+ dxguid
+ ${PSEH_LIB}
+ )
+
+ add_importlibs(ddraw
+ advapi32
+ gdi32
+ user32
+ msvcrt
+ kernel32
+ ntdll)
+
+ add_cd_file(TARGET ddraw DESTINATION reactos/system32 FOR all)
assert(m_hPin != INVALID_HANDLE_VALUE);
// get all supported sets
- if (m_Plugins.size() == 0)
+ if (m_Plugins.empty())
{
if (GetSupportedSets(&pGuid, &NumGuids))
{
@ stdcall RtlAddVectoredExceptionHandler(long ptr)
;@ stdcall RtlAddressInSectionTable
@ stdcall RtlAdjustPrivilege(long long long ptr)
- @ stdcall RtlAllocateActivationContextStack(ptr) ; CHEKME
+ @ stdcall RtlAllocateActivationContextStack(ptr) ; CHECKME
@ stdcall RtlAllocateAndInitializeSid(ptr long long long long long long long long long ptr)
@ stdcall RtlAllocateHandle(ptr ptr)
@ stdcall RtlAllocateHeap(ptr long ptr)
@ stdcall RtlFormatCurrentUserKeyPath(ptr)
@ stdcall RtlFormatMessage(ptr long long long long ptr ptr long)
;@ stdcall RtlFormatMessageEx
- ;@ stdcall RtlFreeActivationContextStack
+ @ stdcall RtlFreeActivationContextStack(ptr)
@ stdcall RtlFreeAnsiString(long)
@ stdcall RtlFreeHandle(ptr ptr)
@ stdcall RtlFreeHeap(long long long)
/* Allocate an Activation Context Stack */
DPRINT("ActivationContextStack %p\n", NtCurrentTeb()->ActivationContextStackPointer);
- Status = RtlAllocateActivationContextStack((PVOID*)&NtCurrentTeb()->ActivationContextStackPointer);
+ Status = RtlAllocateActivationContextStack(&NtCurrentTeb()->ActivationContextStackPointer);
if (!NT_SUCCESS(Status))
{
DPRINT1("Warning: Unable to allocate ActivationContextStack\n");
}
/* Allocate an Activation Context Stack */
- Status = RtlAllocateActivationContextStack((PVOID *)&Teb->ActivationContextStackPointer);
+ Status = RtlAllocateActivationContextStack(&Teb->ActivationContextStackPointer);
if (!NT_SUCCESS(Status)) return Status;
// FIXME: Loader private heap is missing
-
spec2def(opengl32.dll opengl32.spec ADD_IMPORTLIB)
add_definitions(
${CMAKE_CURRENT_BINARY_DIR}/opengl32.def)
add_library(opengl32 SHARED ${SOURCE})
-
+ target_link_libraries(opengl32 wine)
set_module_type(opengl32 win32dll UNICODE)
-
- add_importlibs(opengl32
- msvcrt
- gdi32
- user32
- advapi32
- glu32
- kernel32
- ntdll)
-
+ add_importlibs(opengl32 gdi32 user32 advapi32 msvcrt kernel32 ntdll)
add_pch(opengl32 opengl32.h)
-
add_cd_file(TARGET opengl32 DESTINATION reactos/system32 FOR all)
-
- /****************************************************************************
- * Copyright (C) 1991-2004 SciTech Software, Inc. All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * SCITECH SOFTWARE INC BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
- * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- ****************************************************************************/
-
- #include "opengl32.h"
+ /* Window-specific OpenGL functions implementation.
+ *
+ * Copyright (c) 1999 Lionel Ulmer
+ * Copyright (c) 2005 Raphael Junqueira
+ *
+ * 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
+ */
+
+ #include <stdarg.h>
#include <math.h>
+ #include <GL/gl.h>
- #define LINE_BUF_QUANT 4000
- #define VERT_BUF_QUANT 4000
-
- static HFONT hNewFont, hOldFont;
- static FLOAT ScaleFactor;
- static FLOAT* LineBuf;
- static DWORD LineBufSize;
- static DWORD LineBufIndex;
- static FLOAT* VertBuf;
- static DWORD VertBufSize;
- static DWORD VertBufIndex;
- static GLenum TessErrorOccurred;
-
- /*****************************************************************************
- * AppendToLineBuf
- *
- * Appends one floating-point value to the global LineBuf array. Return value
- * is non-zero for success, zero for failure.
- *****************************************************************************/
-
- INT AppendToLineBuf(FLOAT value)
- {
- if (LineBufIndex >= LineBufSize)
- {
- FLOAT* f;
- LineBufSize += LINE_BUF_QUANT;
-
- f = (FLOAT*) HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, LineBuf, (LineBufSize) * sizeof(FLOAT));
- if (!f)
- return 0;
- LineBuf = f;
- }
- LineBuf[LineBufIndex++] = value;
- return 1;
- }
-
- /*****************************************************************************
- * AppendToVertBuf
- *
- * Appends one floating-point value to the global VertBuf array. Return value
- * is non-zero for success, zero for failure.
- *
- * Note that we can't realloc this one, because the tessellator is using
- * pointers into it.
- *****************************************************************************/
-
- INT AppendToVertBuf(FLOAT value)
- {
- if (VertBufIndex >= VertBufSize)
- return 0;
- VertBuf[VertBufIndex++] = value;
- return 1;
- }
-
- /*****************************************************************************
- * GetWord
- *
- * Fetch the next 16-bit word from a little-endian byte stream, and increment
- * the stream pointer to the next unscanned byte.
- *****************************************************************************/
+ #include <windef.h>
+ #include <winbase.h>
+ #include <wingdi.h>
- LONG GetWord(UCHAR** p)
- {
- LONG value;
+ #include "wine/debug.h"
- value = ((*p)[1] << 8) + (*p)[0];
- *p += 2;
- return value;
- }
+ WINE_DEFAULT_DEBUG_CHANNEL(wgl);
- /*****************************************************************************
- * GetDWord
- *
- * Fetch the next 32-bit word from a little-endian byte stream, and increment
- * the stream pointer to the next unscanned byte.
- *****************************************************************************/
-
- LONG GetDWord(UCHAR** p)
+ /***********************************************************************
+ * wglUseFontBitmaps_common
+ */
+ static BOOL wglUseFontBitmaps_common( HDC hdc, DWORD first, DWORD count, DWORD listBase, BOOL unicode )
{
- LONG value;
-
- value = ((*p)[3] << 24) + ((*p)[2] << 16) + ((*p)[1] << 8) + (*p)[0];
- *p += 4;
- return value;
- }
-
- /*****************************************************************************
- * GetFixed
- *
- * Fetch the next 32-bit fixed-point value from a little-endian byte stream,
- * convert it to floating-point, and increment the stream pointer to the next
- * unscanned byte.
- *****************************************************************************/
- double GetFixed(UCHAR** p)
- {
- LONG hiBits, loBits;
- double value;
+ GLYPHMETRICS gm;
+ unsigned int glyph, size = 0;
+ void *bitmap = NULL, *gl_bitmap = NULL;
+ int org_alignment;
+ BOOL ret = TRUE;
- loBits = GetWord(p);
- hiBits = GetWord(p);
- value = (double) ((hiBits << 16) | loBits) / 65536.0;
+ glGetIntegerv(GL_UNPACK_ALIGNMENT, &org_alignment);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
- return value * ScaleFactor;
- }
+ for (glyph = first; glyph < first + count; glyph++) {
+ static const MAT2 identity = { {0,1},{0,0},{0,0},{0,1} };
+ unsigned int needed_size, height, width, width_int;
+ if (unicode)
+ needed_size = GetGlyphOutlineW(hdc, glyph, GGO_BITMAP, &gm, 0, NULL, &identity);
+ else
+ needed_size = GetGlyphOutlineA(hdc, glyph, GGO_BITMAP, &gm, 0, NULL, &identity);
- /*****************************************************************************
- **
- ** InvertGlyphBitmap.
- **
- ** Invert the bitmap so that it suits OpenGL's representation.
- ** Each row starts on a double word boundary.
- **
- *****************************************************************************/
+ TRACE("Glyph: %3d / List: %d size %d\n", glyph, listBase, needed_size);
+ if (needed_size == GDI_ERROR) {
+ ret = FALSE;
+ break;
+ }
- VOID InvertGlyphBitmap(INT w, INT h, DWORD *fptr, DWORD *tptr)
- {
- INT dWordsInRow = (w+31)/32;
- INT i, j;
+ if (needed_size > size) {
+ size = needed_size;
+ HeapFree(GetProcessHeap(), 0, bitmap);
+ HeapFree(GetProcessHeap(), 0, gl_bitmap);
+ bitmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
+ gl_bitmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
+ }
+ if (unicode)
+ ret = (GetGlyphOutlineW(hdc, glyph, GGO_BITMAP, &gm, size, bitmap, &identity) != GDI_ERROR);
+ else
+ ret = (GetGlyphOutlineA(hdc, glyph, GGO_BITMAP, &gm, size, bitmap, &identity) != GDI_ERROR);
+ if (!ret) break;
+
+ if (TRACE_ON(wgl)) {
+ unsigned int bitmask;
+ unsigned char *bitmap_ = bitmap;
+
+ TRACE(" - bbox: %d x %d\n", gm.gmBlackBoxX, gm.gmBlackBoxY);
+ TRACE(" - origin: (%d, %d)\n", gm.gmptGlyphOrigin.x, gm.gmptGlyphOrigin.y);
+ TRACE(" - increment: %d - %d\n", gm.gmCellIncX, gm.gmCellIncY);
+ if (needed_size != 0) {
+ TRACE(" - bitmap:\n");
+ for (height = 0; height < gm.gmBlackBoxY; height++) {
+ TRACE(" ");
+ for (width = 0, bitmask = 0x80; width < gm.gmBlackBoxX; width++, bitmask >>= 1) {
+ if (bitmask == 0) {
+ bitmap_ += 1;
+ bitmask = 0x80;
+ }
+ if (*bitmap_ & bitmask)
+ TRACE("*");
+ else
+ TRACE(" ");
+ }
+ bitmap_ += (4 - ((UINT_PTR)bitmap_ & 0x03));
+ TRACE("\n");
+ }
+ }
+ }
- if (w <= 0 || h <= 0) {
- return;
- }
+ /* In OpenGL, the bitmap is drawn from the bottom to the top... So we need to invert the
+ * glyph for it to be drawn properly.
+ */
+ if (needed_size != 0) {
+ width_int = (gm.gmBlackBoxX + 31) / 32;
+ for (height = 0; height < gm.gmBlackBoxY; height++) {
+ for (width = 0; width < width_int; width++) {
+ ((int *) gl_bitmap)[(gm.gmBlackBoxY - height - 1) * width_int + width] =
+ ((int *) bitmap)[height * width_int + width];
+ }
+ }
+ }
- tptr += ((h-1)*dWordsInRow);
- for (i = 0; i < h; i++) {
- for (j = 0; j < dWordsInRow; j++) {
- *(tptr + j) = *(fptr + j);
+ glNewList(listBase++, GL_COMPILE);
+ if (needed_size != 0) {
+ glBitmap(gm.gmBlackBoxX, gm.gmBlackBoxY,
+ 0 - gm.gmptGlyphOrigin.x, (int) gm.gmBlackBoxY - gm.gmptGlyphOrigin.y,
+ gm.gmCellIncX, gm.gmCellIncY,
+ gl_bitmap);
+ } else {
+ /* This is the case of 'empty' glyphs like the space character */
+ glBitmap(0, 0, 0, 0, gm.gmCellIncX, gm.gmCellIncY, NULL);
}
- tptr -= dWordsInRow;
- fptr += dWordsInRow;
+ glEndList();
}
- }
- /*****************************************************************************
- * CreateHighResolutionFont
- *
- * Gets metrics for the current font and creates an equivalent font
- * scaled to the design units of the font.
- *
- *****************************************************************************/
+ glPixelStorei(GL_UNPACK_ALIGNMENT, org_alignment);
+ HeapFree(GetProcessHeap(), 0, bitmap);
+ HeapFree(GetProcessHeap(), 0, gl_bitmap);
+ return ret;
+ }
- HFONT CreateHighResolutionFont(HDC hDC)
+ /***********************************************************************
+ * wglUseFontBitmapsA (OPENGL32.@)
+ */
+ BOOL WINAPI wglUseFontBitmapsA(HDC hdc, DWORD first, DWORD count, DWORD listBase)
{
- UINT otmSize;
- OUTLINETEXTMETRIC *otm;
- LONG fontHeight, fontWidth, fontUnits;
- LOGFONTW logFont, logFontFaceName;
-
- otmSize = GetOutlineTextMetricsW(hDC, 0, NULL);
- if (!otmSize)
- return NULL;
-
- otm = (OUTLINETEXTMETRIC *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, otmSize);
- if (!otm)
- return NULL;
-
- otm->otmSize = otmSize;
- if (!GetOutlineTextMetricsW(hDC, otmSize, otm))
- return NULL;
-
- GetObjectW(GetCurrentObject(hDC, OBJ_FONT), sizeof(logFontFaceName), &logFontFaceName);
-
- fontHeight = otm->otmTextMetrics.tmHeight -
- otm->otmTextMetrics.tmInternalLeading;
- fontWidth = otm->otmTextMetrics.tmAveCharWidth;
- fontUnits = (LONG) otm->otmEMSquare;
-
- ScaleFactor = 1.0F / (FLOAT) fontUnits;
-
- logFont.lfHeight = - ((LONG) fontUnits);
- logFont.lfWidth = (LONG)((FLOAT) (fontWidth * fontUnits) / (FLOAT) fontHeight);
- logFont.lfEscapement = 0;
- logFont.lfOrientation = 0;
- logFont.lfWeight = otm->otmTextMetrics.tmWeight;
- logFont.lfItalic = otm->otmTextMetrics.tmItalic;
- logFont.lfUnderline = otm->otmTextMetrics.tmUnderlined;
- logFont.lfStrikeOut = otm->otmTextMetrics.tmStruckOut;
- logFont.lfCharSet = otm->otmTextMetrics.tmCharSet;
- logFont.lfOutPrecision = OUT_OUTLINE_PRECIS;
- logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
- logFont.lfQuality = DEFAULT_QUALITY;
- logFont.lfPitchAndFamily =
- otm->otmTextMetrics.tmPitchAndFamily & 0xf0;
- wcscpy(logFont.lfFaceName, logFontFaceName.lfFaceName);
-
- hNewFont = CreateFontIndirectW(&logFont);
-
- HeapFree(GetProcessHeap(), 0, otm);
-
- return hNewFont;
+ return wglUseFontBitmaps_common( hdc, first, count, listBase, FALSE );
}
- /*****************************************************************************
- * MakeLinesFromArc
- *
- * Subdivides one arc of a quadratic spline until the chordal deviation
- * tolerance requirement is met, then places the resulting set of line
- * segments in the global LineBuf.
- *****************************************************************************/
- INT MakeLinesFromArc(FLOAT x0, FLOAT y0, FLOAT x1, FLOAT y1, FLOAT x2, FLOAT y2,
- DWORD vertexCountIndex, FLOAT chordalDeviationSquared)
+ /***********************************************************************
+ * wglUseFontBitmapsW (OPENGL32.@)
+ */
+ BOOL WINAPI wglUseFontBitmapsW(HDC hdc, DWORD first, DWORD count, DWORD listBase)
{
- FLOAT x01;
- FLOAT y01;
- FLOAT x12;
- FLOAT y12;
- FLOAT midPointX;
- FLOAT midPointY;
- FLOAT deltaX;
- FLOAT deltaY;
-
- /*
- * Calculate midpoint of the curve by de Casteljau:
- */
- x01 = 0.5F * (x0 + x1);
- y01 = 0.5F * (y0 + y1);
- x12 = 0.5F * (x1 + x2);
- y12 = 0.5F * (y1 + y2);
- midPointX = 0.5F * (x01 + x12);
- midPointY = 0.5F * (y01 + y12);
-
-
- /*
- * Estimate chordal deviation by the distance from the midpoint
- * of the curve to its non-pointpolated control point. If this
- * distance is greater than the specified chordal deviation
- * constraint, then subdivide. Otherwise, generate polylines
- * from the three control points.
- */
- deltaX = midPointX - x1;
- deltaY = midPointY - y1;
-
- if (deltaX * deltaX + deltaY * deltaY > chordalDeviationSquared)
- {
- MakeLinesFromArc( x0, y0,
- x01, y01,
- midPointX, midPointY,
- vertexCountIndex,
- chordalDeviationSquared);
-
- MakeLinesFromArc( midPointX, midPointY,
- x12, y12,
- x2, y2,
- vertexCountIndex,
- chordalDeviationSquared);
- }
- else
- {
- /*
- * The "pen" is already at (x0, y0), so we don't need to
- * add that point to the LineBuf.
- */
- if (!AppendToLineBuf(x1)
- || !AppendToLineBuf(y1)
- || !AppendToLineBuf(x2)
- || !AppendToLineBuf(y2))
- return 0;
- LineBuf[vertexCountIndex] += 2.0F;
- }
-
- return 1;
+ return wglUseFontBitmaps_common( hdc, first, count, listBase, TRUE );
}
- /*****************************************************************************
- * MakeLinesFromTTQSpline
- *
- * Converts points from the poly quadratic spline in a TT_PRIM_QSPLINE
- * structure to polyline points in the global LineBuf.
- *****************************************************************************/
+ /* FIXME: should probably have a glu.h header */
- INT MakeLinesFromTTQSpline( UCHAR** pp, DWORD vertexCountIndex, WORD pointCount, FLOAT chordalDeviation)
- {
- FLOAT x0, y0, x1, y1, x2, y2;
- WORD point;
-
- /*
- * Process each of the non-pointpolated points in the outline.
- * To do this, we need to generate two pointpolated points (the
- * start and end of the arc) for each non-pointpolated point.
- * The first pointpolated point is always the one most recently
- * stored in LineBuf, so we just extract it from there. The
- * second pointpolated point is either the average of the next
- * two points in the QSpline, or the last point in the QSpline
- * if only one remains.
- */
- for (point = 0; point < pointCount - 1; ++point)
- {
- x0 = LineBuf[LineBufIndex - 2];
- y0 = LineBuf[LineBufIndex - 1];
+ typedef struct GLUtesselator GLUtesselator;
+ typedef void (WINAPI *_GLUfuncptr)(void);
- x1 = (FLOAT) GetFixed(pp);
- y1 = (FLOAT) GetFixed(pp);
+ #define GLU_TESS_BEGIN 100100
+ #define GLU_TESS_VERTEX 100101
+ #define GLU_TESS_END 100102
- if (point == pointCount - 2)
- {
- /*
- * This is the last arc in the QSpline. The final
- * point is the end of the arc.
- */
- x2 = (FLOAT) GetFixed(pp);
- y2 = (FLOAT) GetFixed(pp);
- }
- else
- {
- /*
- * Peek at the next point in the input to compute
- * the end of the arc:
- */
- x2 = 0.5F * (x1 + (FLOAT) GetFixed(pp));
- y2 = 0.5F * (y1 + (FLOAT) GetFixed(pp));
- /*
- * Push the point back onto the input so it will
- * be reused as the next off-curve point:
- */
- *pp -= 8;
- }
+ static GLUtesselator * (WINAPI *pgluNewTess)(void);
+ static void (WINAPI *pgluDeleteTess)(GLUtesselator *tess);
+ static void (WINAPI *pgluTessNormal)(GLUtesselator *tess, GLdouble x, GLdouble y, GLdouble z);
+ static void (WINAPI *pgluTessBeginPolygon)(GLUtesselator *tess, void *polygon_data);
+ static void (WINAPI *pgluTessEndPolygon)(GLUtesselator *tess);
+ static void (WINAPI *pgluTessCallback)(GLUtesselator *tess, GLenum which, _GLUfuncptr fn);
+ static void (WINAPI *pgluTessBeginContour)(GLUtesselator *tess);
+ static void (WINAPI *pgluTessEndContour)(GLUtesselator *tess);
+ static void (WINAPI *pgluTessVertex)(GLUtesselator *tess, GLdouble *location, GLvoid* data);
- if (!MakeLinesFromArc( x0, y0,
- x1, y1,
- x2, y2,
- vertexCountIndex,
- chordalDeviation * chordalDeviation))
- return 0;
- }
+ static HMODULE load_libglu(void)
+ {
+ static const WCHAR glu32W[] = {'g','l','u','3','2','.','d','l','l',0};
+ static int already_loaded;
+ static HMODULE module;
- return 1;
- }
+ if (already_loaded) return module;
+ already_loaded = 1;
- /*****************************************************************************
- * MakeLinesFromTTLine
- *
- * Converts points from the polyline in a TT_PRIM_LINE structure to
- * equivalent points in the global LineBuf.
- *****************************************************************************/
- INT MakeLinesFromTTLine(UCHAR** pp, DWORD vertexCountIndex, WORD pointCount)
- {
- /*
- * Just copy the line segments into the line buffer (converting
- * type as we go):
- */
- LineBuf[vertexCountIndex] += pointCount;
- while (pointCount--)
+ TRACE("Trying to load GLU library\n");
+ module = LoadLibraryW( glu32W );
+ if (!module)
{
- if (!AppendToLineBuf((FLOAT) GetFixed(pp)) /* X coord */
- || !AppendToLineBuf((FLOAT) GetFixed(pp))) /* Y coord */
- return 0;
+ WARN("Failed to load glu32\n");
+ return NULL;
}
-
- return 1;
+ #define LOAD_FUNCPTR(f) p##f = (void *)GetProcAddress( module, #f )
+ LOAD_FUNCPTR(gluNewTess);
+ LOAD_FUNCPTR(gluDeleteTess);
+ LOAD_FUNCPTR(gluTessBeginContour);
+ LOAD_FUNCPTR(gluTessNormal);
+ LOAD_FUNCPTR(gluTessBeginPolygon);
+ LOAD_FUNCPTR(gluTessCallback);
+ LOAD_FUNCPTR(gluTessEndContour);
+ LOAD_FUNCPTR(gluTessEndPolygon);
+ LOAD_FUNCPTR(gluTessVertex);
+ #undef LOAD_FUNCPTR
+ return module;
}
- /*****************************************************************************
- * MakeLinesFromTTPolyCurve
- *
- * Converts the lines and splines in a single TTPOLYCURVE structure to points
- * in the global LineBuf.
- *****************************************************************************/
-
- INT MakeLinesFromTTPolycurve(UCHAR** pp, DWORD vertexCountIndex, FLOAT chordalDeviation)
+ static void fixed_to_double(POINTFX fixed, UINT em_size, GLdouble vertex[3])
{
- WORD type;
- WORD pointCount;
-
- /*
- * Pick up the relevant fields of the TTPOLYCURVE structure:
- */
- type = (WORD) GetWord(pp);
- pointCount = (WORD) GetWord(pp);
-
- /*
- * Convert the "curve" to line segments:
- */
- if (type == TT_PRIM_LINE)
- return MakeLinesFromTTLine( pp,
- vertexCountIndex,
- pointCount);
- else if (type == TT_PRIM_QSPLINE)
- return MakeLinesFromTTQSpline( pp,
- vertexCountIndex,
- pointCount,
- chordalDeviation);
- else
- return 0;
+ vertex[0] = (fixed.x.value + (GLdouble)fixed.x.fract / (1 << 16)) / em_size;
+ vertex[1] = (fixed.y.value + (GLdouble)fixed.y.fract / (1 << 16)) / em_size;
+ vertex[2] = 0.0;
}
- /*****************************************************************************
- * MakeLinesFromTTPolygon
- *
- * Converts a TTPOLYGONHEADER and its associated curve structures into a
- * single polyline loop in the global LineBuf.
- *****************************************************************************/
-
- INT MakeLinesFromTTPolygon(UCHAR** pp, FLOAT chordalDeviation)
+ static void WINAPI tess_callback_vertex(GLvoid *vertex)
{
- DWORD polySize;
- UCHAR* polyStart;
- DWORD vertexCountIndex;
-
- /*
- * Record where the polygon data begins, and where the loop's
- * vertex count resides:
- */
- polyStart = *pp;
- vertexCountIndex = LineBufIndex;
- if (!AppendToLineBuf(0.0F))
- return 0;
-
- /*
- * Extract relevant data from the TTPOLYGONHEADER:
- */
- polySize = GetDWord(pp);
- if (GetDWord(pp) != TT_POLYGON_TYPE) /* polygon type */
- return 0;
- if (!AppendToLineBuf((FLOAT) GetFixed(pp))) /* first X coord */
- return 0;
- if (!AppendToLineBuf((FLOAT) GetFixed(pp))) /* first Y coord */
- return 0;
- LineBuf[vertexCountIndex] += 1.0F;
-
- /*
- * Process each of the TTPOLYCURVE structures in the polygon:
- */
- while (*pp < polyStart + polySize)
- if (!MakeLinesFromTTPolycurve( pp,
- vertexCountIndex,
- chordalDeviation))
- return 0;
-
- return 1;
+ GLdouble *dbl = vertex;
+ TRACE("%f, %f, %f\n", dbl[0], dbl[1], dbl[2]);
+ glVertex3dv(vertex);
}
- /*****************************************************************************
- * TessVertexOut
- *
- * Used by tessellator to handle output vertexes.
- *****************************************************************************/
-
- VOID CALLBACK TessVertexOutData(FLOAT p[3], GLfloat *pz)
+ static void WINAPI tess_callback_begin(GLenum which)
{
- GLfloat v[3];
- v[0] = (GLfloat) p[0];
- v[1] = (GLfloat) p[1];
- v[2] = *pz;
- glVertex3fv(v);
+ TRACE("%d\n", which);
+ glBegin(which);
}
- /*****************************************************************************
- * TessCombine
- *
- * Used by tessellator to handle self-pointsecting contours and degenerate
- * geometry.
- *****************************************************************************/
- VOID CALLBACK TessCombine(double coords[3], VOID* vertex_data[4], FLOAT weight[4], VOID** outData)
+ static void WINAPI tess_callback_end(void)
{
- if (!AppendToVertBuf((FLOAT) coords[0])
- || !AppendToVertBuf((FLOAT) coords[1])
- || !AppendToVertBuf((FLOAT) coords[2]))
- TessErrorOccurred = GL_OUT_OF_MEMORY;
-
- *outData = VertBuf + (VertBufIndex - 3);
+ TRACE("\n");
+ glEnd();
}
- /*****************************************************************************
- * TessError
- *
- * Saves the last tessellator error code in the global TessErrorOccurred.
- *****************************************************************************/
+ typedef struct _bezier_vector {
+ GLdouble x;
+ GLdouble y;
+ } bezier_vector;
- VOID CALLBACK TessError(GLenum error)
+ static double bezier_deviation_squared(const bezier_vector *p)
{
- TessErrorOccurred = error;
- }
+ bezier_vector deviation;
+ bezier_vector vertex;
+ bezier_vector base;
+ double base_length;
+ double dot;
- /*****************************************************************************
- * MakeLinesFromGlyph
- *
- * Converts the outline of a glyph from the TTPOLYGON format to a simple
- * array of floating-point values containing one or more loops.
- *
- * The first element of the output array is a count of the number of loops.
- * The loop data follows this count. Each loop consists of a count of the
- * number of vertices it contains, followed by the vertices. Each vertex
- * is an X and Y coordinate. For example, a single triangle might be
- * described by this array:
- *
- * 1., 3., 0., 0., 1., 0., 0., 1.
- * ^ ^ ^ ^ ^ ^ ^ ^
- * #loops #verts x1 y1 x2 y2 x3 y3
- *
- * A two-loop glyph would look like this:
- *
- * 2., 3., 0.,0., 1.,0., 0.,1., 3., .2,.2, .4,.2, .2,.4
- *
- * Line segments from the TTPOLYGON are transferred to the output array in
- * the obvious way. Quadratic splines in the TTPOLYGON are converted to
- * collections of line segments
- *****************************************************************************/
-
- INT MakeLinesFromGlyph(UCHAR* glyphBuf, DWORD glyphSize, FLOAT chordalDeviation)
- {
- UCHAR* p;
- INT status = 0;
+ vertex.x = (p[0].x + p[1].x*2 + p[2].x)/4 - p[0].x;
+ vertex.y = (p[0].y + p[1].y*2 + p[2].y)/4 - p[0].y;
- /*
- * Pick up all the polygons (aka loops) that make up the glyph:
- */
- if (!AppendToLineBuf(0.0F)) /* loop count at LineBuf[0] */
- goto exit;
+ base.x = p[2].x - p[0].x;
+ base.y = p[2].y - p[0].y;
- p = glyphBuf;
- while (p < glyphBuf + glyphSize)
- {
- if (!MakeLinesFromTTPolygon(&p, chordalDeviation))
- goto exit;
- LineBuf[0] += 1.0F; /* increment loop count */
- }
+ base_length = sqrt(base.x*base.x + base.y*base.y);
+ base.x /= base_length;
+ base.y /= base_length;
- status = 1;
+ dot = base.x*vertex.x + base.y*vertex.y;
+ dot = min(max(dot, 0.0), base_length);
+ base.x *= dot;
+ base.y *= dot;
- exit:
- return status;
+ deviation.x = vertex.x-base.x;
+ deviation.y = vertex.y-base.y;
+
+ return deviation.x*deviation.x + deviation.y*deviation.y;
}
- /*****************************************************************************
- * DrawGlyph
- *
- * Converts the outline of a glyph to OpenGL drawing primitives, tessellating
- * as needed, and then draws the glyph. Tessellation of the quadratic splines
- * in the outline is controlled by "chordalDeviation", and the drawing
- * primitives (lines or polygons) are selected by "format".
- *
- * Return value is nonzero for success, zero for failure.
- *
- * Does not check for OpenGL errors, so if the caller needs to know about them,
- * it should call glGetError().
- *****************************************************************************/
-
- INT DrawGlyph(UCHAR* glyphBuf, DWORD glyphSize, FLOAT chordalDeviation, FLOAT extrusion, INT format)
+ static int bezier_approximate(const bezier_vector *p, bezier_vector *points, FLOAT deviation)
{
- INT status = 0;
- FLOAT* p;
- DWORD loop;
- DWORD point;
- GLUtesselator* tess = NULL;
-
- /*
- * Initialize the global buffer into which we place the outlines:
- */
- LineBuf = (FLOAT*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (LINE_BUF_QUANT) * sizeof(FLOAT));
-
- if(!LineBuf)
- goto exit;
-
- LineBufSize = LINE_BUF_QUANT;
- LineBufIndex = 0;
-
- /*
- * Convert the glyph outlines to a set of polyline loops.
- * (See MakeLinesFromGlyph() for the format of the loop data
- * structure.)
- */
- if (!MakeLinesFromGlyph(glyphBuf, glyphSize, chordalDeviation))
- goto exit;
- p = LineBuf;
-
-
- /*
- * Now draw the loops in the appropriate format:
- */
- if (format == WGL_FONT_LINES)
- {
- /*
- * This is the easy case. Just draw the outlines.
- */
- for (loop = (DWORD) *p++; loop; --loop)
- {
- glBegin(GL_LINE_LOOP);
- for (point = (DWORD) *p++; point; --point)
- {
- glVertex2fv(p);
- p += 2;
- }
- glEnd();
- }
- status = 1;
- }
+ bezier_vector first_curve[3];
+ bezier_vector second_curve[3];
+ bezier_vector vertex;
+ int total_vertices;
- else if (format == WGL_FONT_POLYGONS)
+ if(bezier_deviation_squared(p) <= deviation*deviation)
{
- double v[3];
- FLOAT *save_p = p;
- GLfloat z_value;
-
- /*
- * This is the hard case. We have to set up a tessellator
- * to convert the outlines into a set of polygonal
- * primitives, which the tessellator passes to some
- * auxiliary routines for drawing.
- */
-
- VertBuf = (FLOAT*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (VERT_BUF_QUANT) * sizeof(FLOAT));
-
- if (!VertBuf)
- goto exit;
-
- VertBufSize = VERT_BUF_QUANT;
- VertBufIndex = 0;
-
- if (!(tess = gluNewTess()))
- goto exit;
-
- gluTessCallback(tess, GLU_BEGIN, (VOID(CALLBACK *)()) glBegin);
- gluTessCallback(tess, GLU_TESS_VERTEX_DATA, (VOID(CALLBACK *)()) TessVertexOutData);
- gluTessCallback(tess, GLU_END, (VOID(CALLBACK *)()) glEnd);
- gluTessCallback(tess, GLU_ERROR, (VOID(CALLBACK *)()) TessError);
- gluTessCallback(tess, GLU_TESS_COMBINE, (VOID(CALLBACK *)()) TessCombine);
- gluTessNormal(tess, 0.0F, 0.0F, 1.0F);
-
- TessErrorOccurred = 0;
- glNormal3f(0.0f, 0.0f, 1.0f);
- v[2] = 0.0;
- z_value = 0.0f;
-
- gluTessBeginPolygon(tess, &z_value);
-
- for (loop = (DWORD) *p++; loop; --loop)
- {
- gluTessBeginContour(tess);
-
- for (point = (DWORD) *p++; point; --point)
- {
- v[0] = p[0];
- v[1] = p[1];
- gluTessVertex(tess, v, p);
- p += 2;
- }
-
- gluTessEndContour(tess);
- }
- gluTessEndPolygon(tess);
-
- status = !TessErrorOccurred;
-
- /* Extrusion code */
- if (extrusion)
- {
- DWORD loops;
- GLfloat thickness = (GLfloat) - extrusion;
- FLOAT *vert, *vert2;
- DWORD count;
-
- p = save_p;
- loops = (DWORD) *p++;
-
- for (loop = 0; loop < loops; loop++)
- {
- GLfloat dx, dy, len;
- DWORD last;
-
- count = (DWORD) *p++;
- glBegin(GL_QUAD_STRIP);
-
- /* Check if the first and last vertex are identical
- * so we don't draw the same quad twice.
- */
- vert = p + (count-1)*2;
- last = (p[0] == vert[0] && p[1] == vert[1]) ? count-1 : count;
-
- for (point = 0; point <= last; point++)
- {
- vert = p + 2 * (point % last);
- vert2 = p + 2 * ((point+1) % last);
-
- dx = vert[0] - vert2[0];
- dy = vert[1] - vert2[1];
- len = (GLfloat)sqrt(dx * dx + dy * dy);
-
- glNormal3f(dy / len, -dx / len, 0.0f);
- glVertex3f((GLfloat) vert[0],
- (GLfloat) vert[1], thickness);
- glVertex3f((GLfloat) vert[0],
- (GLfloat) vert[1], 0.0f);
- }
-
- glEnd();
- p += count*2;
- }
-
- /* Draw the back face */
- p = save_p;
- v[2] = thickness;
- glNormal3f(0.0f, 0.0f, -1.0f);
- gluTessNormal(tess, 0.0F, 0.0F, -1.0F);
-
- gluTessBeginPolygon(tess, &thickness);
-
- for (loop = (DWORD) *p++; loop; --loop)
- {
- count = (DWORD) *p++;
-
- gluTessBeginContour(tess);
-
- for (point = 0; point < count; point++)
- {
- vert = p + ((count-point-1)<<1);
- v[0] = vert[0];
- v[1] = vert[1];
- gluTessVertex(tess, v, vert);
- }
- p += count*2;
-
- gluTessEndContour(tess);
- }
- gluTessEndPolygon(tess);
- }
-
- #if !defined(NDEBUG)
- if (TessErrorOccurred)
- DBGPRINT("Tessellation error %s\n", gluErrorString(TessErrorOccurred));
- #endif
+ if(points)
+ *points = p[2];
+ return 1;
}
+ vertex.x = (p[0].x + p[1].x*2 + p[2].x)/4;
+ vertex.y = (p[0].y + p[1].y*2 + p[2].y)/4;
- exit:
-
- if(LineBuf)
- HeapFree(GetProcessHeap(), 0, LineBuf);
-
- if(VertBuf)
- HeapFree(GetProcessHeap(), 0, VertBuf);
+ first_curve[0] = p[0];
+ first_curve[1].x = (p[0].x + p[1].x)/2;
+ first_curve[1].y = (p[0].y + p[1].y)/2;
+ first_curve[2] = vertex;
- if (tess)
- gluDeleteTess(tess);
+ second_curve[0] = vertex;
+ second_curve[1].x = (p[2].x + p[1].x)/2;
+ second_curve[1].y = (p[2].y + p[1].y)/2;
+ second_curve[2] = p[2];
- return status;
+ total_vertices = bezier_approximate(first_curve, points, deviation);
+ if(points)
+ points += total_vertices;
+ total_vertices += bezier_approximate(second_curve, points, deviation);
+ return total_vertices;
}
-
- /*****************************************************************************
- * MakeDisplayListFromGlyph
- *
- * Converts the outline of a glyph to an OpenGL display list.
- *
- * Return value is nonzero for success, zero for failure.
- *
- * Does not check for OpenGL errors, so if the caller needs to know about them,
- * it should call glGetError().
- *****************************************************************************/
-
- INT MakeDisplayListFromGlyph(DWORD listName, UCHAR* glyphBuf, DWORD glyphSize, LPGLYPHMETRICSFLOAT glyphMetricsFloat,
- FLOAT chordalDeviation, FLOAT extrusion, INT format)
+ /***********************************************************************
+ * wglUseFontOutlines_common
+ */
+ static BOOL wglUseFontOutlines_common(HDC hdc,
+ DWORD first,
+ DWORD count,
+ DWORD listBase,
+ FLOAT deviation,
+ FLOAT extrusion,
+ int format,
+ LPGLYPHMETRICSFLOAT lpgmf,
+ BOOL unicode)
{
- INT status;
+ UINT glyph;
+ const MAT2 identity = {{0,1},{0,0},{0,0},{0,1}};
+ GLUtesselator *tess = NULL;
+ LOGFONTW lf;
+ HFONT old_font, unscaled_font;
+ UINT em_size = 1024;
+ RECT rc;
- glNewList(listName, GL_COMPILE);
- status = DrawGlyph(glyphBuf, glyphSize, chordalDeviation, extrusion, format);
- glTranslatef(glyphMetricsFloat->gmfCellIncX, glyphMetricsFloat->gmfCellIncY, 0.0F);
- glEndList();
+ TRACE("(%p, %d, %d, %d, %f, %f, %d, %p, %s)\n", hdc, first, count,
+ listBase, deviation, extrusion, format, lpgmf, unicode ? "W" : "A");
- return status;
- }
+ if(deviation <= 0.0)
+ deviation = 1.0/em_size;
- // ***********************************************************************
-
- /*****************************************************************************
- * IntUseFontBitmaps
- *
- * Converts a subrange of the glyphs in a GDI font to OpenGL display
- * lists.
- *
- * Extended to support any GDI font, not just TrueType fonts. (DaveM)
- *
- *****************************************************************************/
-
- BOOL APIENTRY IntUseFontBitmapsW(HDC hDC, DWORD first, DWORD count, DWORD listBase)
- {
- INT i, ox, oy, ix, iy;
- INT w = 0, h = 0;
- INT iBufSize, iCurBufSize = 0;
- DWORD *bitmapBuffer = NULL;
- DWORD *invertedBitmapBuffer = NULL;
- BOOL bSuccessOrFail = TRUE;
- BOOL bTrueType = FALSE;
- TEXTMETRIC tm;
- GLYPHMETRICS gm;
- RASTERIZER_STATUS rs;
- MAT2 mat;
- SIZE size;
- RECT rect;
- HDC hDCMem;
- HBITMAP hBitmap;
- BITMAPINFO bmi;
- HFONT hFont;
-
- // Set up a unity matrix.
- ZeroMemory(&mat, sizeof(mat));
- mat.eM11.value = 1;
- mat.eM22.value = 1;
-
- // Test to see if selected font is TrueType or not
- ZeroMemory(&tm, sizeof(tm));
- if (!GetTextMetrics(hDC, &tm))
+ if(format == WGL_FONT_POLYGONS)
{
- DBGPRINT("Font metrics error\n");
- return FALSE;
- }
- bTrueType = (tm.tmPitchAndFamily & TMPF_TRUETYPE) ? TRUE : FALSE;
-
- // Test to see if TRUE-TYPE capabilities are installed
- // (only necessary if TrueType font selected)
- ZeroMemory(&rs, sizeof(rs));
-
- if (bTrueType)
- {
- if (!GetRasterizerCaps (&rs, sizeof (RASTERIZER_STATUS)) || !(rs.wFlags & TT_ENABLED))
+ if (!load_libglu())
{
- DBGPRINT("No TrueType caps\n");
- bTrueType = FALSE;
+ ERR("glu32 is required for this function but isn't available\n");
+ return FALSE;
}
- }
- // Trick to get the current font handle
- hFont = SelectObject(hDC, GetStockObject(SYSTEM_FONT));
- SelectObject(hDC, hFont);
+ tess = pgluNewTess();
+ if(!tess) return FALSE;
+ pgluTessCallback(tess, GLU_TESS_VERTEX, (_GLUfuncptr)tess_callback_vertex);
+ pgluTessCallback(tess, GLU_TESS_BEGIN, (_GLUfuncptr)tess_callback_begin);
+ pgluTessCallback(tess, GLU_TESS_END, tess_callback_end);
+ }
- // Have memory device context available for holding bitmaps of font glyphs
- hDCMem = CreateCompatibleDC(hDC);
- SelectObject(hDCMem, hFont);
- SetTextColor(hDCMem, RGB(0xFF, 0xFF, 0xFF));
- SetBkColor(hDCMem, 0);
+ GetObjectW(GetCurrentObject(hdc, OBJ_FONT), sizeof(lf), &lf);
+ rc.left = rc.right = rc.bottom = 0;
+ rc.top = em_size;
+ DPtoLP(hdc, (POINT*)&rc, 2);
+ lf.lfHeight = -abs(rc.top - rc.bottom);
+ lf.lfOrientation = lf.lfEscapement = 0;
+ unscaled_font = CreateFontIndirectW(&lf);
+ old_font = SelectObject(hdc, unscaled_font);
- for (i = first; (DWORD) i < (first + count); i++)
+ for (glyph = first; glyph < first + count; glyph++)
{
- // Find out how much space is needed for the bitmap so we can
- // Set the buffer size correctly.
- if (bTrueType)
- {
- // Use TrueType support to get bitmap size of glyph
- iBufSize = GetGlyphOutline(hDC, i, GGO_BITMAP, &gm, 0, NULL, &mat);
- if (iBufSize == GDI_ERROR)
- {
- bSuccessOrFail = FALSE;
- break;
- }
- }
+ DWORD needed;
+ GLYPHMETRICS gm;
+ BYTE *buf;
+ TTPOLYGONHEADER *pph;
+ TTPOLYCURVE *ppc;
+ GLdouble *vertices = NULL;
+ int vertex_total = -1;
+
+ if(unicode)
+ needed = GetGlyphOutlineW(hdc, glyph, GGO_NATIVE, &gm, 0, NULL, &identity);
else
- {
- // Use generic GDI support to compute bitmap size of glyph
- w = tm.tmMaxCharWidth;
- h = tm.tmHeight;
- if (GetTextExtentPoint32(hDC, (LPCTSTR)&i, 1, &size))
- {
- w = size.cx;
- h = size.cy;
- }
- iBufSize = w * h;
- // Use DWORD multiple for compatibility
- iBufSize += 3;
- iBufSize /= 4;
- iBufSize *= 4;
- }
-
- // If we need to allocate Larger Buffers, then do so - but allocate
- // An extra 50 % so that we don't do too many mallocs !
- if (iBufSize > iCurBufSize)
- {
- if (bitmapBuffer)
- {
- HeapFree(GetProcessHeap(), 0, bitmapBuffer);
- }
- if (invertedBitmapBuffer)
- {
- HeapFree(GetProcessHeap(), 0, invertedBitmapBuffer);
- }
+ needed = GetGlyphOutlineA(hdc, glyph, GGO_NATIVE, &gm, 0, NULL, &identity);
- iCurBufSize = iBufSize * 2;
- bitmapBuffer = (DWORD *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, iCurBufSize);
- invertedBitmapBuffer = (DWORD *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, iCurBufSize);
+ if(needed == GDI_ERROR)
+ goto error;
- if (bitmapBuffer == NULL || invertedBitmapBuffer == NULL)
- {
- bSuccessOrFail = FALSE;
- break;
- }
- }
-
- // If we fail to get the Glyph data, delete the display lists
- // Created so far and return FALSE.
- if (bTrueType)
- {
- // Use TrueType support to get bitmap of glyph
- if (GetGlyphOutline(hDC, i, GGO_BITMAP, &gm, iBufSize, bitmapBuffer, &mat) == GDI_ERROR)
- {
- bSuccessOrFail = FALSE;
- break;
- }
+ buf = HeapAlloc(GetProcessHeap(), 0, needed);
- // Setup glBitmap parameters for current font glyph
- w = gm.gmBlackBoxX;
- h = gm.gmBlackBoxY;
- ox = gm.gmptGlyphOrigin.x;
- oy = gm.gmptGlyphOrigin.y;
- ix = gm.gmCellIncX;
- iy = gm.gmCellIncY;
- }
+ if(unicode)
+ GetGlyphOutlineW(hdc, glyph, GGO_NATIVE, &gm, needed, buf, &identity);
else
- {
- // Use generic GDI support to create bitmap of glyph
- ZeroMemory(bitmapBuffer, iBufSize);
+ GetGlyphOutlineA(hdc, glyph, GGO_NATIVE, &gm, needed, buf, &identity);
- if (i >= tm.tmFirstChar && i <= tm.tmLastChar)
- {
- // Only create bitmaps for actual font glyphs
- hBitmap = CreateBitmap(w, h, 1, 1, NULL);
- SelectObject(hDCMem, hBitmap);
- // Make bitmap of current font glyph
- SetRect(&rect, 0, 0, w, h);
- DrawText(hDCMem, (LPCTSTR)&i, 1, &rect,
- DT_LEFT | DT_BOTTOM | DT_SINGLELINE | DT_NOCLIP);
- // Make copy of bitmap in our local buffer
- ZeroMemory(&bmi, sizeof(bmi));
- bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- bmi.bmiHeader.biWidth = w;
- bmi.bmiHeader.biHeight = -h;
- bmi.bmiHeader.biPlanes = 1;
- bmi.bmiHeader.biBitCount = 1;
- bmi.bmiHeader.biCompression = BI_RGB;
- GetDIBits(hDCMem, hBitmap, 0, h, bitmapBuffer, &bmi, 0);
- DeleteObject(hBitmap);
- }
- else
- {
- // Otherwise use empty display list for non-existing glyph
- iBufSize = 0;
- }
-
- // Setup glBitmap parameters for current font glyph
- ox = 0;
- oy = tm.tmDescent;
- ix = w;
- iy = 0;
- }
+ TRACE("glyph %d\n", glyph);
- // Create an OpenGL display list.
- glNewList((listBase + i), GL_COMPILE);
-
- // Some fonts have no data for the space character, yet advertise
- // a non-zero size.
- if (0 == iBufSize)
+ if(lpgmf)
{
- glBitmap(0, 0, 0.0f, 0.0f, (GLfloat) ix, (GLfloat) iy, NULL);
+ lpgmf->gmfBlackBoxX = (float)gm.gmBlackBoxX / em_size;
+ lpgmf->gmfBlackBoxY = (float)gm.gmBlackBoxY / em_size;
+ lpgmf->gmfptGlyphOrigin.x = (float)gm.gmptGlyphOrigin.x / em_size;
+ lpgmf->gmfptGlyphOrigin.y = (float)gm.gmptGlyphOrigin.y / em_size;
+ lpgmf->gmfCellIncX = (float)gm.gmCellIncX / em_size;
+ lpgmf->gmfCellIncY = (float)gm.gmCellIncY / em_size;
+
+ TRACE("%fx%f at %f,%f inc %f,%f\n", lpgmf->gmfBlackBoxX, lpgmf->gmfBlackBoxY,
+ lpgmf->gmfptGlyphOrigin.x, lpgmf->gmfptGlyphOrigin.y, lpgmf->gmfCellIncX, lpgmf->gmfCellIncY);
+ lpgmf++;
}
- else
+
+ glNewList(listBase++, GL_COMPILE);
+ glFrontFace(GL_CCW);
+ if(format == WGL_FONT_POLYGONS)
{
- // Invert the Glyph data.
- InvertGlyphBitmap(w, h, bitmapBuffer, invertedBitmapBuffer);
-
- // Render an OpenGL bitmap and invert the origin.
- glBitmap(w, h,
- (GLfloat) ox, (GLfloat) (h-oy),
- (GLfloat) ix, (GLfloat) iy,
- (GLubyte *) invertedBitmapBuffer);
+ glNormal3d(0.0, 0.0, 1.0);
+ pgluTessNormal(tess, 0, 0, 1);
+ pgluTessBeginPolygon(tess, NULL);
}
- // Close this display list.
- glEndList();
- }
-
- if (bSuccessOrFail == FALSE)
- {
- DBGPRINT("DGL_UseFontBitmaps: Get glyph failed\n");
- glDeleteLists((i+listBase), (i-first));
- }
-
- // Release resources used
- DeleteObject(hFont);
- DeleteDC(hDCMem);
-
- if (bitmapBuffer)
- HeapFree(GetProcessHeap(), 0, bitmapBuffer);
-
- if (invertedBitmapBuffer)
- HeapFree(GetProcessHeap(), 0, invertedBitmapBuffer);
-
- return(bSuccessOrFail);
- }
-
- BOOL APIENTRY IntUseFontBitmapsA(HDC hDC, DWORD first, DWORD count, DWORD listBase)
- {
- /* Just call IntUseFontBitmapsW for now */
- return IntUseFontBitmapsW(hDC, first, count, listBase);
- }
-
-
-
- /*****************************************************************************
- * IntUseFontOutlines
- *
- * Converts a subrange of the glyphs in a TrueType font to OpenGL display
- * lists.
- *****************************************************************************/
-
- BOOL APIENTRY IntUseFontOutlinesW(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT chordalDeviation,
- FLOAT extrusion, INT format, GLYPHMETRICSFLOAT *glyphMetricsFloatArray)
- {
- DWORD glyphIndex;
- UCHAR* glyphBuf;
- DWORD glyphBufSize;
-
- /*
- * Flush any previous OpenGL errors. This allows us to check for
- * new errors so they can be reported via the function return value.
- */
- while (glGetError() != GL_NO_ERROR);
-
- /*
- * Make sure that the current font can be sampled accurately.
- */
- hNewFont = CreateHighResolutionFont(hDC);
-
- if (!hNewFont)
- return FALSE;
-
- hOldFont = SelectObject(hDC, hNewFont);
- if (!hOldFont)
- return FALSE;
-
- /*
- * Preallocate a buffer for the outline data, and track its size:
- */
- glyphBuf = (UCHAR*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, glyphBufSize = 10240);
-
- if (!glyphBuf)
- return FALSE; /*WGL_STATUS_NOT_ENOUGH_MEMORY*/
-
- /*
- * Process each glyph in the given range:
- */
- for (glyphIndex = first; glyphIndex - first < count; ++glyphIndex)
- {
- GLYPHMETRICS glyphMetrics;
- DWORD glyphSize;
- static MAT2 matrix =
+ while(!vertices)
{
- {0, 1}, {0, 0},
- {0, 0}, {0, 1}
- };
- LPGLYPHMETRICSFLOAT glyphMetricsFloat = &glyphMetricsFloatArray[glyphIndex - first];
-
- /*
- * Determine how much space is needed to store the glyph's
- * outlines. If our glyph buffer isn't large enough,
- * resize it.
- */
+ if(vertex_total != -1)
+ vertices = HeapAlloc(GetProcessHeap(), 0, vertex_total * 3 * sizeof(GLdouble));
+ vertex_total = 0;
- glyphSize = GetGlyphOutline(hDC, glyphIndex, GGO_NATIVE, &glyphMetrics, 0, NULL, &matrix);
+ pph = (TTPOLYGONHEADER*)buf;
+ while((BYTE*)pph < buf + needed)
+ {
+ GLdouble previous[3];
+ fixed_to_double(pph->pfxStart, em_size, previous);
- if (glyphSize == GDI_ERROR)
- return FALSE; /*WGL_STATUS_FAILURE*/
+ if(vertices)
+ TRACE("\tstart %d, %d\n", pph->pfxStart.x.value, pph->pfxStart.y.value);
- if (glyphSize > glyphBufSize)
- {
- HeapFree(GetProcessHeap(), 0, glyphBuf);
- glyphBuf = (UCHAR*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, glyphBufSize = glyphSize);
- if (!glyphBuf)
- return FALSE; /*WGL_STATUS_NOT_ENOUGH_MEMORY*/
- }
+ if(format == WGL_FONT_POLYGONS)
+ pgluTessBeginContour(tess);
+ else
+ glBegin(GL_LINE_LOOP);
+ if(vertices)
+ {
+ fixed_to_double(pph->pfxStart, em_size, vertices);
+ if(format == WGL_FONT_POLYGONS)
+ pgluTessVertex(tess, vertices, vertices);
+ else
+ glVertex3d(vertices[0], vertices[1], vertices[2]);
+ vertices += 3;
+ }
+ vertex_total++;
- /*
- * Get the glyph's outlines.
- */
- if (GetGlyphOutline(hDC, glyphIndex, GGO_NATIVE, &glyphMetrics, glyphBufSize, glyphBuf, &matrix) == GDI_ERROR)
- {
- HeapFree(GetProcessHeap(), 0, glyphBuf);
- return FALSE; /*WGL_STATUS_FAILURE*/
+ ppc = (TTPOLYCURVE*)((char*)pph + sizeof(*pph));
+ while((char*)ppc < (char*)pph + pph->cb)
+ {
+ int i, j;
+ int num;
+
+ switch(ppc->wType) {
+ case TT_PRIM_LINE:
+ for(i = 0; i < ppc->cpfx; i++)
+ {
+ if(vertices)
+ {
+ TRACE("\t\tline to %d, %d\n",
+ ppc->apfx[i].x.value, ppc->apfx[i].y.value);
+ fixed_to_double(ppc->apfx[i], em_size, vertices);
+ if(format == WGL_FONT_POLYGONS)
+ pgluTessVertex(tess, vertices, vertices);
+ else
+ glVertex3d(vertices[0], vertices[1], vertices[2]);
+ vertices += 3;
+ }
+ fixed_to_double(ppc->apfx[i], em_size, previous);
+ vertex_total++;
+ }
+ break;
+
+ case TT_PRIM_QSPLINE:
+ for(i = 0; i < ppc->cpfx-1; i++)
+ {
+ bezier_vector curve[3];
+ bezier_vector *points;
+ GLdouble curve_vertex[3];
+
+ if(vertices)
+ TRACE("\t\tcurve %d,%d %d,%d\n",
+ ppc->apfx[i].x.value, ppc->apfx[i].y.value,
+ ppc->apfx[i + 1].x.value, ppc->apfx[i + 1].y.value);
+
+ curve[0].x = previous[0];
+ curve[0].y = previous[1];
+ fixed_to_double(ppc->apfx[i], em_size, curve_vertex);
+ curve[1].x = curve_vertex[0];
+ curve[1].y = curve_vertex[1];
+ fixed_to_double(ppc->apfx[i + 1], em_size, curve_vertex);
+ curve[2].x = curve_vertex[0];
+ curve[2].y = curve_vertex[1];
+ if(i < ppc->cpfx-2)
+ {
+ curve[2].x = (curve[1].x + curve[2].x)/2;
+ curve[2].y = (curve[1].y + curve[2].y)/2;
+ }
+ num = bezier_approximate(curve, NULL, deviation);
+ points = HeapAlloc(GetProcessHeap(), 0, num*sizeof(bezier_vector));
+ num = bezier_approximate(curve, points, deviation);
+ vertex_total += num;
+ if(vertices)
+ {
+ for(j=0; j<num; j++)
+ {
+ TRACE("\t\t\tvertex at %f,%f\n", points[j].x, points[j].y);
+ vertices[0] = points[j].x;
+ vertices[1] = points[j].y;
+ vertices[2] = 0.0;
+ if(format == WGL_FONT_POLYGONS)
+ pgluTessVertex(tess, vertices, vertices);
+ else
+ glVertex3d(vertices[0], vertices[1], vertices[2]);
+ vertices += 3;
+ }
+ }
+ HeapFree(GetProcessHeap(), 0, points);
+ previous[0] = curve[2].x;
+ previous[1] = curve[2].y;
+ }
+ break;
+ default:
+ ERR("\t\tcurve type = %d\n", ppc->wType);
+ if(format == WGL_FONT_POLYGONS)
+ pgluTessEndContour(tess);
+ else
+ glEnd();
+ goto error_in_list;
+ }
+
+ ppc = (TTPOLYCURVE*)((char*)ppc + sizeof(*ppc) +
+ (ppc->cpfx - 1) * sizeof(POINTFX));
+ }
+ if(format == WGL_FONT_POLYGONS)
+ pgluTessEndContour(tess);
+ else
+ glEnd();
+ pph = (TTPOLYGONHEADER*)((char*)pph + pph->cb);
+ }
}
- glyphMetricsFloat->gmfBlackBoxX =
- (FLOAT) glyphMetrics.gmBlackBoxX * ScaleFactor;
- glyphMetricsFloat->gmfBlackBoxY =
- (FLOAT) glyphMetrics.gmBlackBoxY * ScaleFactor;
- glyphMetricsFloat->gmfptGlyphOrigin.x =
- (FLOAT) glyphMetrics.gmptGlyphOrigin.x * ScaleFactor;
- glyphMetricsFloat->gmfptGlyphOrigin.y =
- (FLOAT) glyphMetrics.gmptGlyphOrigin.y * ScaleFactor;
- glyphMetricsFloat->gmfCellIncX =
- (FLOAT) glyphMetrics.gmCellIncX * ScaleFactor;
- glyphMetricsFloat->gmfCellIncY =
- (FLOAT) glyphMetrics.gmCellIncY * ScaleFactor;
-
- /*
- * Turn the glyph into a display list:
- */
- if (!MakeDisplayListFromGlyph((glyphIndex - first) + listBase, glyphBuf, glyphSize, glyphMetricsFloat,
- chordalDeviation + ScaleFactor, extrusion, format))
- {
- HeapFree(GetProcessHeap(), 0, glyphBuf);
- return FALSE; /*WGL_STATUS_FAILURE*/
- }
+ error_in_list:
+ if(format == WGL_FONT_POLYGONS)
+ pgluTessEndPolygon(tess);
+ glTranslated((GLdouble)gm.gmCellIncX / em_size, (GLdouble)gm.gmCellIncY / em_size, 0.0);
+ glEndList();
+ HeapFree(GetProcessHeap(), 0, buf);
+ HeapFree(GetProcessHeap(), 0, vertices);
}
- /*
- * Clean up temporary storage and return. If an error occurred,
- * clear all OpenGL error flags and return FAILURE status;
- * otherwise just return SUCCESS.
- */
- HeapFree(GetProcessHeap(), 0, glyphBuf);
-
- DeleteObject(SelectObject(hDC, hOldFont));
+ error:
+ DeleteObject(SelectObject(hdc, old_font));
+ if(format == WGL_FONT_POLYGONS)
+ pgluDeleteTess(tess);
+ return TRUE;
- if (glGetError() == GL_NO_ERROR)
- {
- return TRUE; /*WGL_STATUS_SUCCESS*/
- }
- else
- {
- while (glGetError() != GL_NO_ERROR);
-
- return FALSE; /*WGL_STATUS_FAILURE*/
- }
}
- BOOL APIENTRY IntUseFontOutlinesA(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT chordalDeviation,
- FLOAT extrusion, INT format, GLYPHMETRICSFLOAT *glyphMetricsFloatArray)
+ /***********************************************************************
+ * wglUseFontOutlinesA (OPENGL32.@)
+ */
+ BOOL WINAPI wglUseFontOutlinesA(HDC hdc,
+ DWORD first,
+ DWORD count,
+ DWORD listBase,
+ FLOAT deviation,
+ FLOAT extrusion,
+ int format,
+ LPGLYPHMETRICSFLOAT lpgmf)
{
- /* Just call IntUseFontOutlinesW for now */
- return IntUseFontOutlinesW(hDC, first, count, listBase, chordalDeviation, extrusion, format, glyphMetricsFloatArray);
+ return wglUseFontOutlines_common(hdc, first, count, listBase, deviation, extrusion, format, lpgmf, FALSE);
}
+
+ /***********************************************************************
+ * wglUseFontOutlinesW (OPENGL32.@)
+ */
+ BOOL WINAPI wglUseFontOutlinesW(HDC hdc,
+ DWORD first,
+ DWORD count,
+ DWORD listBase,
+ FLOAT deviation,
+ FLOAT extrusion,
+ int format,
+ LPGLYPHMETRICSFLOAT lpgmf)
+ {
+ return wglUseFontOutlines_common(hdc, first, count, listBase, deviation, extrusion, format, lpgmf, TRUE);
+ }
@ stdcall wglSwapBuffers(long) rosglSwapBuffers
@ stdcall wglSwapLayerBuffers(long long) rosglSwapLayerBuffers
@ stub wglSwapMultipleBuffers
- @ stdcall wglUseFontBitmapsA(long long long long) rosglUseFontBitmapsA
- @ stdcall wglUseFontBitmapsW(long long long long) rosglUseFontBitmapsW
- @ stdcall wglUseFontOutlinesA(long long long long long long long ptr) rosglUseFontOutlinesA
- @ stdcall wglUseFontOutlinesW(long long long long long long long ptr) rosglUseFontOutlinesW
+ @ stdcall wglUseFontBitmapsA(long long long long)
+ @ stdcall wglUseFontBitmapsW(long long long long)
+ @ stdcall wglUseFontOutlinesA(long long long long long long long ptr)
+ @ stdcall wglUseFontOutlinesW(long long long long long long long ptr)
return ret;
}
-
- BOOL
- APIENTRY
- rosglUseFontBitmapsA( HDC hdc, DWORD first, DWORD count, DWORD listBase )
- {
- return IntUseFontBitmapsA(hdc, first, count, listBase);
- }
-
-
- BOOL
- APIENTRY
- rosglUseFontBitmapsW( HDC hdc, DWORD first, DWORD count, DWORD listBase )
- {
- return IntUseFontBitmapsW(hdc, first, count, listBase);
- }
-
- BOOL
- APIENTRY
- rosglUseFontOutlinesA( HDC hdc, DWORD first, DWORD count, DWORD listBase,
- FLOAT deviation, FLOAT extrusion, int format,
- GLYPHMETRICSFLOAT *pgmf )
- {
- return IntUseFontOutlinesA(hdc, first, count, listBase, deviation, extrusion, format, pgmf);
- }
-
-
- BOOL
- APIENTRY
- rosglUseFontOutlinesW( HDC hdc, DWORD first, DWORD count, DWORD listBase,
- FLOAT deviation, FLOAT extrusion, int format,
- GLYPHMETRICSFLOAT *pgmf )
- {
- return IntUseFontOutlinesW(hdc, first, count, listBase, deviation, extrusion, format, pgmf);
- }
-
#ifdef __cplusplus
}; /* extern "C" */
#endif /* __cplusplus */
add_subdirectory(pidgen)
add_subdirectory(powrprof)
add_subdirectory(printui)
+ add_subdirectory(propsys)
add_subdirectory(psapi)
add_subdirectory(pstorec)
add_subdirectory(qmgr)
typedef struct _FIBER /* Field offsets: */
{ /* 32 bit 64 bit */
/* this must be the first field */
- LPVOID Parameter; /* 0x00 0x00 */
- struct _EXCEPTION_REGISTRATION_RECORD * ExceptionList; /* 0x04 0x08 */
- LPVOID StackBase; /* 0x08 0x10 */
- LPVOID StackLimit; /* 0x0C 0x18 */
- LPVOID DeallocationStack; /* 0x10 0x20 */
+ PVOID Parameter; /* 0x00 0x00 */
+ PEXCEPTION_REGISTRATION_RECORD ExceptionList; /* 0x04 0x08 */
+ PVOID StackBase; /* 0x08 0x10 */
+ PVOID StackLimit; /* 0x0C 0x18 */
+ PVOID DeallocationStack; /* 0x10 0x20 */
CONTEXT Context; /* 0x14 0x28 */
ULONG GuaranteedStackBytes; /* 0x2E0 */
PVOID FlsData; /* 0x2E4 */
- PVOID ActivationContextStack; /* 0x2E8 */
+ PACTIVATION_CONTEXT_STACK ActivationContextStack; /* 0x2E8 */
} FIBER, *PFIBER;
/* PRIVATE FUNCTIONS **********************************************************/
PFIBER Fiber;
NTSTATUS Status;
INITIAL_TEB InitialTeb;
- PVOID ActivationContextStack = NULL;
+ PACTIVATION_CONTEXT_STACK ActivationContextStack = NULL;
DPRINT("Creating Fiber\n");
/* Check for invalid flags */
Fiber = RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(FIBER));
if (!Fiber)
{
+ /* Free the activation context stack */
+ RtlFreeActivationContextStack(ActivationContextStack);
+
/* Fail */
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return NULL;
/* Free the fiber */
RtlFreeHeap(GetProcessHeap(), 0, Fiber);
- /* Free the activation context */
- DPRINT1("Leaking activation stack because nobody implemented free");
- //RtlFreeActivationContextStack(&ActivationContextStack);
+ /* Free the activation context stack */
+ RtlFreeActivationContextStack(ActivationContextStack);
/* Failure */
BaseSetLastNTError(Status);
/* Get rid of FLS */
if (Fiber->FlsData) BaseRundownFls(Fiber->FlsData);
- /* Get rid of the activation stack */
- DPRINT1("Leaking activation stack because nobody implemented free");
- //RtlFreeActivationContextStack(Fiber->ActivationContextStack);
+ /* Get rid of the activation context stack */
+ RtlFreeActivationContextStack(Fiber->ActivationContextStack);
/* Free the fiber data */
RtlFreeHeap(GetProcessHeap(), 0, lpFiber);
ULONG Dummy;
PTEB Teb;
THREAD_BASIC_INFORMATION ThreadBasicInfo;
- PVOID ActivationContextStack = NULL;
+ PACTIVATION_CONTEXT_STACK ActivationContextStack = NULL;
ACTIVATION_CONTEXT_BASIC_INFORMATION ActCtxInfo;
ULONG_PTR Cookie;
ULONG ReturnLength;
dwCreationFlags & STACK_SIZE_PARAM_IS_A_RESERVATION ?
dwStackSize : 0,
&InitialTeb);
- if(!NT_SUCCESS(Status))
+ if (!NT_SUCCESS(Status))
{
BaseSetLastNTError(Status);
return NULL;
Teb->ActivationContextStackPointer = ActivationContextStack;
/* Query the Context */
- // WARNING!!! THIS IS USING THE WIN32 FLAG BECAUSE REACTOS CONTINUES TO BE A POS!!! ///
+ // WARNING!!! THIS IS USING THE WIN32 FLAG BECAUSE REACTOS CONTINUES TO BE A POS!!! ///
Status = RtlQueryInformationActivationContext(QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX,
NULL,
0,
ERROR_DBGBREAK("SXS: %s - Failing thread create because "
"RtlQueryInformationActivationContext() failed with status %08lx\n",
__FUNCTION__, Status);
+
+ /* Free the activation context stack */
+ // RtlFreeThreadActivationContextStack();
+ RtlFreeActivationContextStack(Teb->ActivationContextStackPointer);
+
return NULL;
}
ERROR_DBGBREAK("SXS: %s - Failing thread create because "
"RtlActivateActivationContextEx() failed with status %08lx\n",
__FUNCTION__, Status);
+
+ /* Free the activation context stack */
+ // RtlFreeThreadActivationContextStack();
+ RtlFreeActivationContextStack(Teb->ActivationContextStackPointer);
+
return NULL;
}
}
/* Notify CSR */
if (!BaseRunningInServerProcess)
{
- /* Notify CSR */
Status = BasepNotifyCsrOfThread(hThread, &ClientId);
ASSERT(NT_SUCCESS(Status));
}
TRACE("Package Name: %s\n", Package->Name->Buffer);
Package->Id = *Id;
- *Id++;
+ (*Id)++;
InsertTailList(&PackageListHead, &Package->Entry);
/* FUNCTIONS ***************************************************************/
+ VOID
+ NTAPI
+ LsaIFree_LSAPR_POLICY_INFORMATION(IN POLICY_INFORMATION_CLASS InformationClass,
+ IN PLSAPR_POLICY_INFORMATION PolicyInformation)
+ {
+ if (PolicyInformation != NULL)
+ {
+ switch (InformationClass)
+ {
+ case PolicyAuditLogInformation: /* 1 */
+ break;
+
+ case PolicyAuditEventsInformation: /* 2 */
+ if (PolicyInformation->PolicyAuditEventsInfo.EventAuditingOptions != NULL)
+ midl_user_free(PolicyInformation->PolicyAuditEventsInfo.EventAuditingOptions);
+ break;
+
+ case PolicyPrimaryDomainInformation: /* 3 */
+ if (PolicyInformation->PolicyPrimaryDomInfo.Name.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyPrimaryDomInfo.Name.Buffer);
+
+ if (PolicyInformation->PolicyPrimaryDomInfo.Sid != NULL)
+ midl_user_free(PolicyInformation->PolicyPrimaryDomInfo.Sid);
+ break;
+
+ case PolicyPdAccountInformation: /* 4 */
+ if (PolicyInformation->PolicyPdAccountInfo.Name.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyPdAccountInfo.Name.Buffer);
+ break;
+
+ case PolicyAccountDomainInformation: /* 5 */
+ if (PolicyInformation->PolicyAccountDomainInfo.DomainName.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyAccountDomainInfo.DomainName.Buffer);
+
+ if (PolicyInformation->PolicyAccountDomainInfo.Sid != NULL)
+ midl_user_free(PolicyInformation->PolicyAccountDomainInfo.Sid);
+ break;
+
+ case PolicyLsaServerRoleInformation: /* 6 */
+ break;
+
+ case PolicyReplicaSourceInformation: /* 7 */
+ if (PolicyInformation->PolicyReplicaSourceInfo.ReplicaSource.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyReplicaSourceInfo.ReplicaSource.Buffer);
+
+ if (PolicyInformation->PolicyReplicaSourceInfo.ReplicaAccountName.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyReplicaSourceInfo.ReplicaAccountName.Buffer);
+ break;
+
+ case PolicyDefaultQuotaInformation: /* 8 */
+ break;
+
+ case PolicyModificationInformation: /* 9 */
+ break;
+
+ case PolicyAuditFullSetInformation: /* 10 (0xA) */
+ break;
+
+ case PolicyAuditFullQueryInformation: /* 11 (0xB) */
+ break;
+
+ case PolicyDnsDomainInformation: /* 12 (0xC) */
+ if (PolicyInformation->PolicyDnsDomainInfo.Name.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyDnsDomainInfo.Name.Buffer);
+
+ if (PolicyInformation->PolicyDnsDomainInfo.DnsDomainName.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyDnsDomainInfo.DnsDomainName.Buffer);
+
+ if (PolicyInformation->PolicyDnsDomainInfo.DnsForestName.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyDnsDomainInfo.DnsForestName.Buffer);
+
+ if (PolicyInformation->PolicyDnsDomainInfo.Sid != NULL)
+ midl_user_free(PolicyInformation->PolicyDnsDomainInfo.Sid);
+ break;
+
+ case PolicyDnsDomainInformationInt: /* 13 (0xD) */
+ if (PolicyInformation->PolicyDnsDomainInfoInt.Name.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyDnsDomainInfoInt.Name.Buffer);
+
+ if (PolicyInformation->PolicyDnsDomainInfoInt.DnsDomainName.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyDnsDomainInfoInt.DnsDomainName.Buffer);
+
+ if (PolicyInformation->PolicyDnsDomainInfoInt.DnsForestName.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyDnsDomainInfoInt.DnsForestName.Buffer);
+
+ if (PolicyInformation->PolicyDnsDomainInfoInt.Sid != NULL)
+ midl_user_free(PolicyInformation->PolicyDnsDomainInfoInt.Sid);
+ break;
+
+ case PolicyLocalAccountDomainInformation: /* 14 (0xE) */
+ if (PolicyInformation->PolicyLocalAccountDomainInfo.DomainName.Buffer != NULL)
+ midl_user_free(PolicyInformation->PolicyLocalAccountDomainInfo.DomainName.Buffer);
+
+ if (PolicyInformation->PolicyLocalAccountDomainInfo.Sid != NULL)
+ midl_user_free(PolicyInformation->PolicyLocalAccountDomainInfo.Sid);
+ break;
+
+ default:
+ ERR("Invalid InformationClass: %lu\n", InformationClass);
+ break;
+ }
+
+ midl_user_free(PolicyInformation);
+ }
+ }
+
+
NTSTATUS WINAPI
LsapInitLsa(VOID)
{
-
@ stub LsaIAuditNotifyPackageLoad
@ stub LsaIAuditSamEvent
@ stub LsaIEnumerateSecrets
@ stub LsaIFree_LSAI_SECRET_ENUM_BUFFER
@ stub LsaIFree_LSAPR_ACCOUNT_ENUM_BUFFER
@ stub LsaIFree_LSAPR_CR_CIPHER_VALUE
- @ stub LsaIFree_LSAPR_POLICY_INFORMATION
+ @ stdcall LsaIFree_LSAPR_POLICY_INFORMATION(long ptr)
@ stub LsaIFree_LSAPR_PRIVILEGE_ENUM_BUFFER
@ stub LsaIFree_LSAPR_PRIVILEGE_SET
@ stub LsaIFree_LSAPR_REFERENCED_DOMAIN_LIST
AuditData,
AttributeSize);
- if (AuditData != NULL)
- RtlFreeHeap(RtlGetProcessHeap(), 0, AuditData);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, AuditData);
return Status;
}
add_library(msv1_0 SHARED ${SOURCE})
set_module_type(msv1_0 win32dll UNICODE ENTRYPOINT 0)
target_link_libraries(msv1_0 wine ${PSEH_LIB})
+ add_delay_importlibs(msv1_0 samsrv lsasrv)
add_importlibs(msv1_0 kernel32 ntdll)
add_pch(msv1_0 msv1_0.h)
add_dependencies(msv1_0 psdk)
/* FUNCTIONS ***************************************************************/
+ static
+ NTSTATUS
+ GetDomainSid(PRPC_SID *Sid)
+ {
+ LSAPR_HANDLE PolicyHandle = NULL;
+ PLSAPR_POLICY_INFORMATION PolicyInfo = NULL;
+ ULONG Length = 0;
+ NTSTATUS Status;
+
+ Status = LsaIOpenPolicyTrusted(&PolicyHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("LsaIOpenPolicyTrusted() failed (Status 0x%08lx)\n", Status);
+ return Status;
+ }
+
+ Status = LsarQueryInformationPolicy(PolicyHandle,
+ PolicyAccountDomainInformation,
+ &PolicyInfo);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("LsarQueryInformationPolicy() failed (Status 0x%08lx)\n", Status);
+ goto done;
+ }
+
+ Length = RtlLengthSid(PolicyInfo->PolicyAccountDomainInfo.Sid);
+
+ *Sid = RtlAllocateHeap(RtlGetProcessHeap(), 0, Length);
+ if (*Sid == NULL)
+ {
+ ERR("Failed to allocate SID\n");
+ Status = STATUS_INSUFFICIENT_RESOURCES;
+ goto done;
+ }
+
+ memcpy(*Sid, PolicyInfo->PolicyAccountDomainInfo.Sid, Length);
+
+ done:
+ if (PolicyInfo != NULL)
+ LsaIFree_LSAPR_POLICY_INFORMATION(PolicyAccountDomainInformation,
+ PolicyInfo);
+
+ if (PolicyHandle != NULL)
+ LsarClose(&PolicyHandle);
+
+ return Status;
+ }
+
+
/*
* @unimplemented
*/
/* Get the dispatch table entries */
DispatchTable.AllocateLsaHeap = LsaDispatchTable->AllocateLsaHeap;
DispatchTable.FreeLsaHeap = LsaDispatchTable->FreeLsaHeap;
+ DispatchTable.AllocateClientBuffer = LsaDispatchTable->AllocateClientBuffer;
+ DispatchTable.FreeClientBuffer = LsaDispatchTable->FreeClientBuffer;
+ DispatchTable.CopyToClientBuffer = LsaDispatchTable->CopyToClientBuffer;
+ DispatchTable.CopyFromClientBuffer = LsaDispatchTable->CopyFromClientBuffer;
/* Return the package name */
OUT PLSA_UNICODE_STRING *AccountName,
OUT PLSA_UNICODE_STRING *AuthenticatingAuthority)
{
+ PMSV1_0_INTERACTIVE_LOGON LogonInfo;
+
+ SAMPR_HANDLE ServerHandle = NULL;
+ SAMPR_HANDLE DomainHandle = NULL;
+ PRPC_SID AccountDomainSid = NULL;
+ RPC_UNICODE_STRING Names[1];
+ SAMPR_ULONG_ARRAY RelativeIds = {0, NULL};
+ SAMPR_ULONG_ARRAY Use = {0, NULL};
+ NTSTATUS Status;
+
TRACE("()\n");
+
+ TRACE("LogonType: %lu\n", LogonType);
+ TRACE("AuthenticationInformation: %p\n", AuthenticationInformation);
+ TRACE("AuthenticationInformationLength: %lu\n", AuthenticationInformationLength);
+
+
+ *ProfileBuffer = NULL;
+ *ProfileBufferLength = 0;
+ *SubStatus = STATUS_SUCCESS;
+
+ if (LogonType == Interactive ||
+ LogonType == Batch ||
+ LogonType == Service)
+ {
+ ULONG_PTR PtrOffset;
+
+ LogonInfo = (PMSV1_0_INTERACTIVE_LOGON)AuthenticationInformation;
+
+ /* Fix-up pointers in the authentication info */
+ PtrOffset = (ULONG_PTR)AuthenticationInformation - (ULONG_PTR)ClientAuthenticationBase;
+
+ LogonInfo->LogonDomainName.Buffer = (PWSTR)((ULONG_PTR)LogonInfo->LogonDomainName.Buffer + PtrOffset);
+ LogonInfo->UserName.Buffer = (PWSTR)((ULONG_PTR)LogonInfo->UserName.Buffer + PtrOffset);
+ LogonInfo->Password.Buffer = (PWSTR)((ULONG_PTR)LogonInfo->Password.Buffer + PtrOffset);
+
+ TRACE("Domain: %S\n", LogonInfo->LogonDomainName.Buffer);
+ TRACE("User: %S\n", LogonInfo->UserName.Buffer);
+ TRACE("Password: %S\n", LogonInfo->Password.Buffer);
+ }
+ else
+ {
+ FIXME("LogonType %lu is not supported yet!\n", LogonType);
+ return STATUS_NOT_IMPLEMENTED;
+ }
+
+ Status = GetDomainSid(&AccountDomainSid);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("GetDomainSid() failed (Status 0x%08lx)\n", Status);
+ return Status;
+ }
+
+ /* Connect to the SAM server */
+ Status = SamIConnect(NULL,
+ &ServerHandle,
+ SAM_SERVER_CONNECT | SAM_SERVER_LOOKUP_DOMAIN,
+ TRUE);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("SamIConnect() failed (Status 0x%08lx)\n", Status);
+ goto done;
+ }
+
+ /* Open the account domain */
+ Status = SamrOpenDomain(ServerHandle,
+ DOMAIN_LOOKUP,
+ AccountDomainSid,
+ &DomainHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("SamrOpenDomain failed (Status %08lx)\n", Status);
+ goto done;
+ }
+
+ Names[0].Length = LogonInfo->UserName.Length;
+ Names[0].MaximumLength = LogonInfo->UserName.MaximumLength;
+ Names[0].Buffer = LogonInfo->UserName.Buffer;
+
+ /* Try to get the RID for the user name */
+ Status = SamrLookupNamesInDomain(DomainHandle,
+ 1,
+ Names,
+ &RelativeIds,
+ &Use);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("SamrLookupNamesInDomain failed (Status %08lx)\n", Status);
+ Status = STATUS_NO_SUCH_USER;
+ goto done;
+ }
+
+ /* Fail, if it is not a user account */
+ if (Use.Element[0] != SidTypeUser)
+ {
+ TRACE("Account is not a user account!\n");
+ Status = STATUS_NO_SUCH_USER;
+ goto done;
+ }
+
+
+
+ done:
+ SamIFree_SAMPR_ULONG_ARRAY(&RelativeIds);
+ SamIFree_SAMPR_ULONG_ARRAY(&Use);
+
+ if (DomainHandle != NULL)
+ SamrCloseHandle(&DomainHandle);
+
+ if (ServerHandle != NULL)
+ SamrCloseHandle(&ServerHandle);
+
+ if (AccountDomainSid != NULL)
+ RtlFreeHeap(RtlGetProcessHeap(), 0, AccountDomainSid);
+
+ TRACE("LsaApLogonUser done (Status %08lx)\n", Status);
+
+ return Status;
+ }
+
+
+ /*
+ * @unimplemented
+ */
+ NTSTATUS
+ NTAPI
+ LsaApLogonUserEx(IN PLSA_CLIENT_REQUEST ClientRequest,
+ IN SECURITY_LOGON_TYPE LogonType,
+ IN PVOID AuthenticationInformation,
+ IN PVOID ClientAuthenticationBase,
+ IN ULONG AuthenticationInformationLength,
+ OUT PVOID *ProfileBuffer,
+ OUT PULONG ProfileBufferLength,
+ OUT PLUID LogonId,
+ OUT PNTSTATUS SubStatus,
+ OUT PLSA_TOKEN_INFORMATION_TYPE TokenInformationType,
+ OUT PVOID *TokenInformation,
+ OUT PUNICODE_STRING *AccountName,
+ OUT PUNICODE_STRING *AuthenticatingAuthority,
+ OUT PUNICODE_STRING *MachineName)
+ {
+ TRACE("()\n");
+
+ TRACE("LogonType: %lu\n", LogonType);
+ TRACE("AuthenticationInformation: %p\n", AuthenticationInformation);
+ TRACE("AuthenticationInformationLength: %lu\n", AuthenticationInformationLength);
+
+ return STATUS_NOT_IMPLEMENTED;
+ }
+
+
+ /*
+ * @unimplemented
+ */
+ NTSTATUS
+ NTAPI
+ LsaApLogonUserEx2(IN PLSA_CLIENT_REQUEST ClientRequest,
+ IN SECURITY_LOGON_TYPE LogonType,
+ IN PVOID ProtocolSubmitBuffer,
+ IN PVOID ClientBufferBase,
+ IN ULONG SubmitBufferSize,
+ OUT PVOID *ProfileBuffer,
+ OUT PULONG ProfileBufferSize,
+ OUT PLUID LogonId,
+ OUT PNTSTATUS SubStatus,
+ OUT PLSA_TOKEN_INFORMATION_TYPE TokenInformationType,
+ OUT PVOID *TokenInformation,
+ OUT PUNICODE_STRING *AccountName,
+ OUT PUNICODE_STRING *AuthenticatingAuthority,
+ OUT PUNICODE_STRING *MachineName,
+ OUT PSECPKG_PRIMARY_CRED PrimaryCredentials,
+ OUT PSECPKG_SUPPLEMENTAL_CRED_ARRAY *SupplementalCredentials)
+ {
+ TRACE("()\n");
+
+ TRACE("LogonType: %lu\n", LogonType);
+ TRACE("ProtocolSubmitBuffer: %p\n", ProtocolSubmitBuffer);
+ TRACE("SubmitBufferSize: %lu\n", SubmitBufferSize);
+
+
return STATUS_NOT_IMPLEMENTED;
}
#include <sspi.h>
#include <ntsecapi.h>
#include <ntsecpkg.h>
+ #include <ntsam.h>
+ #include <ntlsa.h>
+
+ #include <samsrv/samsrv.h>
+ //#include <lsass/lsasrv.h>
#include <wine/debug.h>
+ typedef struct _RPC_SID
+ {
+ UCHAR Revision;
+ UCHAR SubAuthorityCount;
+ SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+ DWORD SubAuthority[];
+ } RPC_SID, *PRPC_SID;
+
+ typedef struct _RPC_UNICODE_STRING
+ {
+ unsigned short Length;
+ unsigned short MaximumLength;
+ wchar_t *Buffer;
+ } RPC_UNICODE_STRING, *PRPC_UNICODE_STRING;
+
+ typedef wchar_t *PSAMPR_SERVER_NAME;
+ typedef void *SAMPR_HANDLE;
+
+ typedef struct _SAMPR_ULONG_ARRAY
+ {
+ ULONG Count;
+ PULONG Element;
+ } SAMPR_ULONG_ARRAY, *PSAMPR_ULONG_ARRAY;
+
+ NTSTATUS
+ NTAPI
+ SamIConnect(IN PSAMPR_SERVER_NAME ServerName,
+ OUT SAMPR_HANDLE *ServerHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN BOOLEAN Trusted);
+
+ VOID
+ NTAPI
+ SamIFree_SAMPR_ULONG_ARRAY(PSAMPR_ULONG_ARRAY Ptr);
+
+ NTSTATUS
+ NTAPI
+ SamrCloseHandle(IN OUT SAMPR_HANDLE *SamHandle);
+
+ NTSTATUS
+ NTAPI
+ SamrOpenDomain(IN SAMPR_HANDLE ServerHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN PRPC_SID DomainId,
+ OUT SAMPR_HANDLE *DomainHandle);
+
+ NTSTATUS
+ NTAPI
+ SamrLookupNamesInDomain(IN SAMPR_HANDLE DomainHandle,
+ IN ULONG Count,
+ IN RPC_UNICODE_STRING Names[],
+ OUT PSAMPR_ULONG_ARRAY RelativeIds,
+ OUT PSAMPR_ULONG_ARRAY Use);
+
+ typedef PVOID LSAPR_HANDLE;
+
+ typedef struct _LSAPR_POLICY_AUDIT_EVENTS_INFO
+ {
+ BOOLEAN AuditingMode;
+ DWORD *EventAuditingOptions;
+ DWORD MaximumAuditEventCount;
+ } LSAPR_POLICY_AUDIT_EVENTS_INFO, *PLSAPR_POLICY_AUDIT_EVENTS_INFO;
+
+ typedef struct _LSAPR_POLICY_PRIMARY_DOM_INFO
+ {
+ RPC_UNICODE_STRING Name;
+ PRPC_SID Sid;
+ } LSAPR_POLICY_PRIMARY_DOM_INFO, *PLSAPR_POLICY_PRIMARY_DOM_INFO;
+
+ typedef struct _LSAPR_POLICY_ACCOUNT_DOM_INFO
+ {
+ RPC_UNICODE_STRING DomainName;
+ PRPC_SID Sid;
+ } LSAPR_POLICY_ACCOUNT_DOM_INFO, *PLSAPR_POLICY_ACCOUNT_DOM_INFO;
+
+ typedef struct _LSAPR_POLICY_PD_ACCOUNT_INFO
+ {
+ RPC_UNICODE_STRING Name;
+ } LSAPR_POLICY_PD_ACCOUNT_INFO, *PLSAPR_POLICY_PD_ACCOUNT_INFO;
+
+ typedef struct _POLICY_LSA_REPLICA_SRCE_INFO
+ {
+ RPC_UNICODE_STRING ReplicaSource;
+ RPC_UNICODE_STRING ReplicaAccountName;
+ } POLICY_LSA_REPLICA_SRCE_INFO, *PPOLICY_LSA_REPLICA_SRCE_INFO;
+
+ typedef struct _LSAPR_POLICY_DNS_DOMAIN_INFO
+ {
+ RPC_UNICODE_STRING Name;
+ RPC_UNICODE_STRING DnsDomainName;
+ RPC_UNICODE_STRING DnsForestName;
+ GUID DomainGuid;
+ PRPC_SID Sid;
+ } LSAPR_POLICY_DNS_DOMAIN_INFO, *PLSAPR_POLICY_DNS_DOMAIN_INFO;
+
+ typedef union _LSAPR_POLICY_INFORMATION
+ {
+ POLICY_AUDIT_LOG_INFO PolicyAuditLogInfo;
+ LSAPR_POLICY_AUDIT_EVENTS_INFO PolicyAuditEventsInfo;
+ LSAPR_POLICY_PRIMARY_DOM_INFO PolicyPrimaryDomInfo;
+ LSAPR_POLICY_PD_ACCOUNT_INFO PolicyPdAccountInfo;
+ LSAPR_POLICY_ACCOUNT_DOM_INFO PolicyAccountDomainInfo;
+ POLICY_LSA_SERVER_ROLE_INFO PolicyServerRoleInfo;
+ POLICY_LSA_REPLICA_SRCE_INFO PolicyReplicaSourceInfo;
+ POLICY_DEFAULT_QUOTA_INFO PolicyDefaultQuotaInfo;
+ POLICY_MODIFICATION_INFO PolicyModificationInfo;
+ POLICY_AUDIT_FULL_SET_INFO PolicyAuditFullSetInfo;
+ POLICY_AUDIT_FULL_QUERY_INFO PolicyAuditFullQueryInfo;
+ LSAPR_POLICY_DNS_DOMAIN_INFO PolicyDnsDomainInfo;
+ LSAPR_POLICY_DNS_DOMAIN_INFO PolicyDnsDomainInfoInt;
+ LSAPR_POLICY_ACCOUNT_DOM_INFO PolicyLocalAccountDomainInfo;
+ } LSAPR_POLICY_INFORMATION, *PLSAPR_POLICY_INFORMATION;
+
+ VOID
+ NTAPI
+ LsaIFree_LSAPR_POLICY_INFORMATION(IN POLICY_INFORMATION_CLASS InformationClass,
+ IN PLSAPR_POLICY_INFORMATION PolicyInformation);
+
+ NTSTATUS
+ WINAPI
+ LsaIOpenPolicyTrusted(OUT LSAPR_HANDLE *PolicyHandle);
+
+ NTSTATUS
+ WINAPI
+ LsarClose(IN OUT LSAPR_HANDLE *ObjectHandle);
+
+ NTSTATUS
+ WINAPI
+ LsarQueryInformationPolicy(IN LSAPR_HANDLE PolicyHandle,
+ IN POLICY_INFORMATION_CLASS InformationClass,
+ OUT PLSAPR_POLICY_INFORMATION *PolicyInformation);
+
+
/* EOF */
@ stdcall LsaApInitializePackage(long ptr ptr ptr ptr)
@ stdcall LsaApLogonTerminated(ptr)
@ stdcall LsaApLogonUser(ptr long ptr ptr long ptr ptr ptr ptr ptr ptr ptr ptr)
- @ stub LsaApLogonUserEx
- @ stub LsaApLogonUserEx2
+ #@ stdcall LsaApLogonUserEx(ptr long ptr ptr long ptr ptr ptr ptr ptr ptr ptr ptr ptr)
+ #@ stdcall LsaApLogonUserEx2(ptr long ptr ptr long ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr)
@ stub Msv1_0ExportSubAuthenticationRoutine
@ stub Msv1_0SubAuthenticationPresent
@ stub MsvGetLogonAttemptCount
TRACE("(%p)->(%s)\n", This, debugstr_variant(&value));
- return node_put_value(&This->node, &value);
+ return node_put_value_escaped(&This->node, &value);
}
static const struct IXMLDOMAttributeVtbl domattr_vtbl =
IXMLDOMNode** outOldNode)
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
-
- FIXME("(%p)->(%p %s %p) needs test\n", This, newNode, debugstr_variant(&refChild), outOldNode);
-
- return node_insert_before(&This->node, newNode, &refChild, outOldNode);
+ TRACE("(%p)->(%p %s %p)\n", This, newNode, debugstr_variant(&refChild), outOldNode);
+ if (outOldNode) *outOldNode = NULL;
+ return E_FAIL;
}
static HRESULT WINAPI domcdata_replaceChild(
IXMLDOMNode** outOldNode)
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
-
- FIXME("(%p)->(%p %p %p) needs tests\n", This, newNode, oldNode, outOldNode);
-
- return node_replace_child(&This->node, newNode, oldNode, outOldNode);
+ TRACE("(%p)->(%p %p %p)\n", This, newNode, oldNode, outOldNode);
+ if (outOldNode) *outOldNode = NULL;
+ return E_FAIL;
}
static HRESULT WINAPI domcdata_removeChild(
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
TRACE("(%p)->(%p %p)\n", This, child, oldChild);
- return node_remove_child(&This->node, child, oldChild);
+ if (oldChild) *oldChild = NULL;
+ return E_FAIL;
}
static HRESULT WINAPI domcdata_appendChild(
{
domcdata *This = impl_from_IXMLDOMCDATASection( iface );
TRACE("(%p)->(%p %p)\n", This, child, outChild);
- return node_append_child(&This->node, child, outChild);
+ if (outChild) *outChild = NULL;
+ return E_FAIL;
}
static HRESULT WINAPI domcdata_hasChildNodes(
hres = IUnknown_QueryInterface(This->outer, get_riid_from_tid(data->funcs[n].tid), (void**)&unk);
if(FAILED(hres)) {
ERR("Could not get iface: %08x\n", hres);
+ ITypeInfo_Release(ti);
return E_FAIL;
}
bsc_t *bsc;
HRESULT error;
- /* IPersistStream */
- IStream *stream;
-
/* IObjectWithSite*/
IUnknown *site;
priv_from_xmlDocPtr(doc)->properties = create_properties(version);
}
- LONG xmldoc_add_ref(xmlDocPtr doc)
+ LONG xmldoc_add_refs(xmlDocPtr doc, LONG refs)
{
- LONG ref = InterlockedIncrement(&priv_from_xmlDocPtr(doc)->refs);
+ LONG ref = InterlockedExchangeAdd(&priv_from_xmlDocPtr(doc)->refs, refs) + refs;
TRACE("(%p)->(%d)\n", doc, ref);
return ref;
}
- LONG xmldoc_release(xmlDocPtr doc)
+ LONG xmldoc_add_ref(xmlDocPtr doc)
+ {
+ return xmldoc_add_refs(doc, 1);
+ }
+
+ LONG xmldoc_release_refs(xmlDocPtr doc, LONG refs)
{
xmldoc_priv *priv = priv_from_xmlDocPtr(doc);
- LONG ref = InterlockedDecrement(&priv->refs);
+ LONG ref = InterlockedExchangeAdd(&priv->refs, -refs) - refs;
TRACE("(%p)->(%d)\n", doc, ref);
- if(ref == 0)
+
+ if (ref < 0)
+ WARN("negative refcount, expect troubles\n");
+
+ if (ref == 0)
{
orphan_entry *orphan, *orphan2;
TRACE("freeing docptr %p\n", doc);
return ref;
}
+ LONG xmldoc_release(xmlDocPtr doc)
+ {
+ return xmldoc_release_refs(doc, 1);
+ }
+
HRESULT xmldoc_add_orphan(xmlDocPtr doc, xmlNodePtr node)
{
xmldoc_priv *priv = priv_from_xmlDocPtr(doc);
static inline xmlDocPtr get_doc( domdoc *This )
{
- return (xmlDocPtr)This->node.node;
+ return This->node.node->doc;
}
static HRESULT attach_xmldoc(domdoc *This, xmlDocPtr xml )
return S_FALSE;
}
- static HRESULT WINAPI PersistStreamInit_Load(
- IPersistStreamInit *iface, LPSTREAM pStm)
+ static HRESULT domdoc_load_from_stream(domdoc *doc, ISequentialStream *stream)
{
- domdoc *This = impl_from_IPersistStreamInit(iface);
- HRESULT hr;
- HGLOBAL hglobal;
DWORD read, written, len;
+ xmlDocPtr xmldoc = NULL;
+ IStream *hstream;
+ HGLOBAL hglobal;
BYTE buf[4096];
+ HRESULT hr;
char *ptr;
- xmlDocPtr xmldoc = NULL;
- TRACE("(%p)->(%p)\n", This, pStm);
-
- if (!pStm)
- return E_INVALIDARG;
-
- hr = CreateStreamOnHGlobal(NULL, TRUE, &This->stream);
+ hstream = NULL;
+ hr = CreateStreamOnHGlobal(NULL, TRUE, &hstream);
if (FAILED(hr))
return hr;
do
{
- IStream_Read(pStm, buf, sizeof(buf), &read);
- hr = IStream_Write(This->stream, buf, read, &written);
+ ISequentialStream_Read(stream, buf, sizeof(buf), &read);
+ hr = IStream_Write(hstream, buf, read, &written);
} while(SUCCEEDED(hr) && written != 0 && read != 0);
if (FAILED(hr))
{
- ERR("Failed to copy stream\n");
+ ERR("failed to copy stream 0x%08x\n", hr);
+ IStream_Release(hstream);
return hr;
}
- hr = GetHGlobalFromStream(This->stream, &hglobal);
+ hr = GetHGlobalFromStream(hstream, &hglobal);
if (FAILED(hr))
return hr;
len = GlobalSize(hglobal);
ptr = GlobalLock(hglobal);
- if (len != 0)
- xmldoc = doparse(This, ptr, len, XML_CHAR_ENCODING_NONE);
+ if (len)
+ xmldoc = doparse(doc, ptr, len, XML_CHAR_ENCODING_NONE);
GlobalUnlock(hglobal);
if (!xmldoc)
xmldoc->_private = create_priv();
- return attach_xmldoc(This, xmldoc);
+ return attach_xmldoc(doc, xmldoc);
+ }
+
+ static HRESULT WINAPI PersistStreamInit_Load(IPersistStreamInit *iface, IStream *stream)
+ {
+ domdoc *This = impl_from_IPersistStreamInit(iface);
+
+ TRACE("(%p)->(%p)\n", This, stream);
+
+ if (!stream)
+ return E_INVALIDARG;
+
+ return domdoc_load_from_stream(This, (ISequentialStream*)stream);
}
static HRESULT WINAPI PersistStreamInit_Save(
IPersistStreamInit *iface, ULARGE_INTEGER *pcbSize)
{
domdoc *This = impl_from_IPersistStreamInit(iface);
- TRACE("(%p)->(%p): stub!\n", This, pcbSize);
+ TRACE("(%p)->(%p)\n", This, pcbSize);
return E_NOTIMPL;
}
if (This->site)
IUnknown_Release( This->site );
destroy_xmlnode(&This->node);
- if (This->stream)
- IStream_Release(This->stream);
for (eid = 0; eid < EVENTID_LAST; eid++)
if (This->events[eid]) IDispatch_Release(This->events[eid]);
IXMLDOMNode** outNewChild )
{
domdoc *This = impl_from_IXMLDOMDocument3( iface );
+ DOMNodeType type;
+ HRESULT hr;
TRACE("(%p)->(%p %s %p)\n", This, newChild, debugstr_variant(&refChild), outNewChild);
- return node_insert_before(&This->node, newChild, &refChild, outNewChild);
- }
+ hr = IXMLDOMNode_get_nodeType(newChild, &type);
+ if (hr != S_OK) return hr;
+ TRACE("new node type %d\n", type);
+ switch (type)
+ {
+ case NODE_ATTRIBUTE:
+ case NODE_DOCUMENT:
+ case NODE_CDATA_SECTION:
+ if (outNewChild) *outNewChild = NULL;
+ return E_FAIL;
+ default:
+ return node_insert_before(&This->node, newChild, &refChild, outNewChild);
+ }
+ }
static HRESULT WINAPI domdoc_replaceChild(
IXMLDOMDocument3 *iface,
domdoc *This = impl_from_IXMLDOMDocument3( iface );
IXMLDOMNode *elementNode;
xmlNodePtr oldRoot;
+ xmlDocPtr old_doc;
xmlnode *xmlNode;
+ int refcount = 0;
HRESULT hr;
TRACE("(%p)->(%p)\n", This, DOMElement);
if(xmldoc_remove_orphan(xmlNode->node->doc, xmlNode->node) != S_OK)
WARN("%p is not an orphan of %p\n", xmlNode->node->doc, xmlNode->node);
+ old_doc = xmlNode->node->doc;
+ if (old_doc != get_doc(This))
+ refcount = xmlnode_get_inst_cnt(xmlNode);
+
+ /* old root is still orphaned by its document, update refcount from new root */
+ if (refcount) xmldoc_add_refs(get_doc(This), refcount);
oldRoot = xmlDocSetRootElement( get_doc(This), xmlNode->node);
+ if (refcount) xmldoc_release_refs(old_doc, refcount);
IXMLDOMNode_Release( elementNode );
if(oldRoot)
domdoc *This = impl_from_IXMLDOMDocument3( iface );
LPWSTR filename = NULL;
HRESULT hr = S_FALSE;
- IXMLDOMDocument3 *pNewDoc = NULL;
- IStream *pStream = NULL;
xmlDocPtr xmldoc;
TRACE("(%p)->(%s)\n", This, debugstr_variant(&source));
}
break;
case VT_UNKNOWN:
+ {
+ ISequentialStream *stream = NULL;
+ IXMLDOMDocument3 *newdoc = NULL;
+
if (!V_UNKNOWN(&source)) return E_INVALIDARG;
- hr = IUnknown_QueryInterface(V_UNKNOWN(&source), &IID_IXMLDOMDocument3, (void**)&pNewDoc);
+
+ hr = IUnknown_QueryInterface(V_UNKNOWN(&source), &IID_IXMLDOMDocument3, (void**)&newdoc);
if(hr == S_OK)
{
- if(pNewDoc)
+ if(newdoc)
{
- domdoc *newDoc = impl_from_IXMLDOMDocument3( pNewDoc );
+ domdoc *newDoc = impl_from_IXMLDOMDocument3( newdoc );
xmldoc = xmlCopyDoc(get_doc(newDoc), 1);
xmldoc->_private = create_priv();
return hr;
}
}
- hr = IUnknown_QueryInterface(V_UNKNOWN(&source), &IID_IStream, (void**)&pStream);
- if(hr == S_OK)
- {
- IPersistStream *pDocStream;
- hr = IXMLDOMDocument3_QueryInterface(iface, &IID_IPersistStream, (void**)&pDocStream);
- if(hr == S_OK)
- {
- hr = IPersistStream_Load(pDocStream, pStream);
- IStream_Release(pStream);
- if(hr == S_OK)
- {
- *isSuccessful = VARIANT_TRUE;
- TRACE("Using IStream to load Document\n");
- return S_OK;
- }
- else
- {
- ERR("xmldoc_IPersistStream_Load failed (%d)\n", hr);
- }
- }
- else
- {
- ERR("QueryInterface IID_IPersistStream failed (%d)\n", hr);
- }
- }
- else
+ hr = IUnknown_QueryInterface(V_UNKNOWN(&source), &IID_IStream, (void**)&stream);
+ if (FAILED(hr))
+ hr = IUnknown_QueryInterface(V_UNKNOWN(&source), &IID_ISequentialStream, (void**)&stream);
+
+ if (hr == S_OK)
{
- /* ISequentialStream */
- FIXME("Unknown type not supported (%d) (%p)(%p)\n", hr, pNewDoc, V_UNKNOWN(&source)->lpVtbl);
+ hr = domdoc_load_from_stream(This, stream);
+ if (hr == S_OK)
+ *isSuccessful = VARIANT_TRUE;
+ ISequentialStream_Release(stream);
+ return hr;
}
+
+ FIXME("unsupported IUnknown type (0x%08x) (%p)\n", hr, V_UNKNOWN(&source)->lpVtbl);
break;
- default:
- FIXME("VT type not supported (%d)\n", V_VT(&source));
+ }
+ default:
+ FIXME("VT type not supported (%d)\n", V_VT(&source));
}
if ( filename )
return S_OK;
}
- static HRESULT WINAPI ConnectionPoint_Advise(IConnectionPoint *iface, IUnknown *pUnkSink,
- DWORD *pdwCookie)
+ static HRESULT WINAPI ConnectionPoint_Advise(IConnectionPoint *iface, IUnknown *unk_sink,
+ DWORD *cookie)
{
ConnectionPoint *This = impl_from_IConnectionPoint(iface);
- FIXME("(%p)->(%p %p): stub\n", This, pUnkSink, pdwCookie);
- return E_NOTIMPL;
+ IUnknown *sink;
+ HRESULT hr;
+ DWORD i;
+
+ TRACE("(%p)->(%p %p)\n", This, unk_sink, cookie);
+
+ hr = IUnknown_QueryInterface(unk_sink, This->iid, (void**)&sink);
+ if(FAILED(hr) && !IsEqualGUID(&IID_IPropertyNotifySink, This->iid))
+ hr = IUnknown_QueryInterface(unk_sink, &IID_IDispatch, (void**)&sink);
+ if(FAILED(hr))
+ return CONNECT_E_CANNOTCONNECT;
+
+ if(This->sinks)
+ {
+ for (i = 0; i < This->sinks_size; i++)
+ if (!This->sinks[i].unk)
+ break;
+
+ if (i == This->sinks_size)
+ This->sinks = heap_realloc(This->sinks,(++This->sinks_size)*sizeof(*This->sinks));
+ }
+ else
+ {
+ This->sinks = heap_alloc(sizeof(*This->sinks));
+ This->sinks_size = 1;
+ i = 0;
+ }
+
+ This->sinks[i].unk = sink;
+ if (cookie)
+ *cookie = i+1;
+
+ return S_OK;
}
static HRESULT WINAPI ConnectionPoint_Unadvise(IConnectionPoint *iface, DWORD cookie)
doc->resolving = 0;
doc->properties = properties_from_xmlDocPtr(xmldoc);
doc->error = S_OK;
- doc->stream = NULL;
doc->site = NULL;
doc->safeopt = 0;
doc->bsc = NULL;
static HRESULT WINAPI domelem_insertBefore(
IXMLDOMElement *iface,
IXMLDOMNode* newNode, VARIANT refChild,
- IXMLDOMNode** outOldNode)
+ IXMLDOMNode** old_node)
{
domelem *This = impl_from_IXMLDOMElement( iface );
+ DOMNodeType type;
+ HRESULT hr;
- TRACE("(%p)->(%p %s %p)\n", This, newNode, debugstr_variant(&refChild), outOldNode);
+ TRACE("(%p)->(%p %s %p)\n", This, newNode, debugstr_variant(&refChild), old_node);
+
+ hr = IXMLDOMNode_get_nodeType(newNode, &type);
+ if (hr != S_OK) return hr;
- return node_insert_before(&This->node, newNode, &refChild, outOldNode);
+ TRACE("new node type %d\n", type);
+ switch (type)
+ {
+ case NODE_DOCUMENT:
+ case NODE_DOCUMENT_TYPE:
+ case NODE_ENTITY:
+ case NODE_NOTATION:
+ if (old_node) *old_node = NULL;
+ return E_FAIL;
+ default:
+ return node_insert_before(&This->node, newNode, &refChild, old_node);
+ }
}
static HRESULT WINAPI domelem_replaceChild(
{
static const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
const BYTE *d = buf;
- int bytes, pad_bytes, div, i;
+ int bytes, pad_bytes, div;
DWORD needed;
WCHAR *ptr;
div = len / 3;
ptr = *ret;
- i = 0;
while (div > 0)
{
/* first char is the first 6 bits of the first byte*/
*ptr++ = b64[ ((d[1] << 2) & 0x3c) | (d[2] >> 6 & 0x03)];
/* fourth char is the remaining 6 bits of the third byte */
*ptr++ = b64[ d[2] & 0x3f];
- i += 4;
d += 3;
div--;
}
domelem *This = impl_from_IXMLDOMElement( iface );
xmlChar *xml_name, *xml_value, *local, *prefix;
xmlNodePtr element;
- HRESULT hr;
- VARIANT var;
+ HRESULT hr = S_OK;
TRACE("(%p)->(%s %s)\n", This, debugstr_w(name), debugstr_variant(&value));
if ( !element )
return E_FAIL;
- VariantInit(&var);
- hr = VariantChangeType(&var, &value, 0, VT_BSTR);
- if(hr != S_OK)
+ if (V_VT(&value) != VT_BSTR)
{
- FIXME("VariantChangeType failed\n");
- return hr;
+ VARIANT var;
+
+ VariantInit(&var);
+ hr = VariantChangeType(&var, &value, 0, VT_BSTR);
+ if (hr != S_OK)
+ {
+ FIXME("VariantChangeType failed\n");
+ return hr;
+ }
+
+ xml_value = xmlchar_from_wchar(V_BSTR(&var));
+ VariantClear(&var);
}
+ else
+ xml_value = xmlchar_from_wchar(V_BSTR(&value));
xml_name = xmlchar_from_wchar( name );
- xml_value = xmlchar_from_wchar( V_BSTR(&var) );
if ((local = xmlSplitQName2(xml_name, &prefix)))
{
heap_free(xml_value);
heap_free(xml_name);
- VariantClear(&var);
return hr;
}
static MSXML_VERSION get_msxml_version(const GUID *clsid)
{
- int i;
+ unsigned int i;
for (i = 0; i < sizeof(clsid_versions_table)/sizeof(struct clsid_version_t); i++)
if (IsEqualGUID(clsid, clsid_versions_table[i].clsid))
/* request */
BINDVERB verb;
BSTR custom;
- BSTR siteurl;
- BSTR url;
+ IUri *uri;
+ IUri *base_uri;
BOOL async;
struct list reqheaders;
/* cached resulting custom request headers string length in WCHARs */
static void httprequest_setreadystate(httprequest *This, READYSTATE state)
{
READYSTATE last = This->state;
+ static const char* readystates[] = {
+ "READYSTATE_UNINITIALIZED",
+ "READYSTATE_LOADING",
+ "READYSTATE_LOADED",
+ "READYSTATE_INTERACTIVE",
+ "READYSTATE_COMPLETE"};
This->state = state;
+ TRACE("state %s\n", readystates[state]);
+
if (This->sink && last != state)
{
DISPPARAMS params;
if (bsc)
{
if (bsc->binding) IBinding_Abort(bsc->binding);
+ bsc->request->bsc = NULL;
bsc->request = NULL;
IBindStatusCallback_Release(&bsc->IBindStatusCallback_iface);
}
}
if (hr == S_OK)
+ {
+ BindStatusCallback_Detach(This->request->bsc);
+ This->request->bsc = This;
httprequest_setreadystate(This->request, READYSTATE_COMPLETE);
+ }
return S_OK;
}
case VT_ARRAY|VT_UI1:
{
sa = V_ARRAY(body);
- if ((hr = SafeArrayAccessData(sa, (void **)&ptr)) != S_OK) return hr;
+ if ((hr = SafeArrayAccessData(sa, (void **)&ptr)) != S_OK)
+ {
+ heap_free(bsc);
+ return hr;
+ }
if ((hr = SafeArrayGetUBound(sa, 1, &size) != S_OK))
{
SafeArrayUnaccessData(sa);
+ heap_free(bsc);
return hr;
}
size++;
break;
}
+ default:
+ FIXME("unsupported body data type %d\n", V_VT(body));
+ /* fall through */
case VT_EMPTY:
case VT_ERROR:
ptr = NULL;
size = 0;
break;
- default:
- FIXME("unsupported body data type %d\n", V_VT(body));
- break;
}
bsc->body = GlobalAlloc(GMEM_FIXED, size);
{
IMoniker *moniker;
- hr = CreateURLMoniker(NULL, This->url, &moniker);
+ hr = CreateURLMonikerEx2(NULL, This->uri, &moniker, URL_MK_UNIFORM);
if (hr == S_OK)
{
IStream *stream;
return hr;
}
+ static HRESULT verify_uri(httprequest *This, IUri *uri)
+ {
+ DWORD scheme, base_scheme;
+ BSTR host, base_host;
+ HRESULT hr;
+
+ if(!(This->safeopt & INTERFACESAFE_FOR_UNTRUSTED_DATA))
+ return S_OK;
+
+ if(!This->base_uri)
+ return E_ACCESSDENIED;
+
+ hr = IUri_GetScheme(uri, &scheme);
+ if(FAILED(hr))
+ return hr;
+
+ hr = IUri_GetScheme(This->base_uri, &base_scheme);
+ if(FAILED(hr))
+ return hr;
+
+ if(scheme != base_scheme) {
+ WARN("Schemes don't match\n");
+ return E_ACCESSDENIED;
+ }
+
+ if(scheme == INTERNET_SCHEME_UNKNOWN) {
+ FIXME("Unknown scheme\n");
+ return E_ACCESSDENIED;
+ }
+
+ hr = IUri_GetHost(uri, &host);
+ if(FAILED(hr))
+ return hr;
+
+ hr = IUri_GetHost(This->base_uri, &base_host);
+ if(SUCCEEDED(hr)) {
+ if(strcmpiW(host, base_host)) {
+ WARN("Hosts don't match\n");
+ hr = E_ACCESSDENIED;
+ }
+ SysFreeString(base_host);
+ }
+
+ SysFreeString(host);
+ return hr;
+ }
+
static HRESULT httprequest_open(httprequest *This, BSTR method, BSTR url,
VARIANT async, VARIANT user, VARIANT password)
{
static const WCHAR MethodDeleteW[] = {'D','E','L','E','T','E',0};
static const WCHAR MethodPropFindW[] = {'P','R','O','P','F','I','N','D',0};
VARIANT str, is_async;
+ IUri *uri;
HRESULT hr;
if (!method || !url) return E_INVALIDARG;
/* free previously set data */
- SysFreeString(This->url);
+ if(This->uri) {
+ IUri_Release(This->uri);
+ This->uri = NULL;
+ }
+
SysFreeString(This->user);
SysFreeString(This->password);
- This->url = This->user = This->password = NULL;
+ This->user = This->password = NULL;
if (!strcmpiW(method, MethodGetW))
{
return E_FAIL;
}
- /* try to combine with site url */
- if (This->siteurl && PathIsRelativeW(url))
- {
- DWORD len = INTERNET_MAX_URL_LENGTH;
- WCHAR *fullW = heap_alloc(len*sizeof(WCHAR));
+ if(This->base_uri)
+ hr = CoInternetCombineUrlEx(This->base_uri, url, 0, &uri, 0);
+ else
+ hr = CreateUri(url, 0, 0, &uri);
+ if(FAILED(hr)) {
+ WARN("Could not create IUri object: %08x\n", hr);
+ return hr;
+ }
- hr = UrlCombineW(This->siteurl, url, fullW, &len, 0);
- if (hr == S_OK)
- {
- TRACE("combined url %s\n", debugstr_w(fullW));
- This->url = SysAllocString(fullW);
- }
- heap_free(fullW);
+ hr = verify_uri(This, uri);
+ if(FAILED(hr)) {
+ IUri_Release(uri);
+ return hr;
}
- else
- This->url = SysAllocString(url);
+
+ This->uri = uri;
VariantInit(&is_async);
hr = VariantChangeType(&is_async, &async, 0, VT_BOOL);
{
struct httpheader *entry;
- if (!header || !value) return E_INVALIDARG;
+ if (!header) return E_INVALIDARG;
+ if (!value) return E_POINTER;
if (This->raw_respheaders && list_empty(&This->respheaders))
{
static HRESULT httprequest_getAllResponseHeaders(httprequest *This, BSTR *respheaders)
{
- if (!respheaders) return E_INVALIDARG;
+ if (!respheaders) return E_POINTER;
*respheaders = SysAllocString(This->raw_respheaders);
if (This->state != READYSTATE_LOADING) return E_FAIL;
hr = BindStatusCallback_create(This, &bsc, &body);
- if (FAILED(hr)) return hr;
-
- BindStatusCallback_Detach(This->bsc);
- This->bsc = bsc;
+ if (FAILED(hr))
+ /* success path to detach it is OnStopBinding call */
+ BindStatusCallback_Detach(bsc);
return hr;
}
static HRESULT httprequest_abort(httprequest *This)
{
BindStatusCallback_Detach(This->bsc);
- This->bsc = NULL;
httprequest_setreadystate(This, READYSTATE_UNINITIALIZED);
static HRESULT httprequest_get_status(httprequest *This, LONG *status)
{
- if (!status) return E_INVALIDARG;
- if (This->state != READYSTATE_COMPLETE) return E_FAIL;
+ if (!status) return E_POINTER;
*status = This->status;
- return S_OK;
+ return This->state == READYSTATE_COMPLETE ? S_OK : E_FAIL;
}
static HRESULT httprequest_get_statusText(httprequest *This, BSTR *status)
{
- if (!status) return E_INVALIDARG;
+ if (!status) return E_POINTER;
if (This->state != READYSTATE_COMPLETE) return E_FAIL;
*status = SysAllocString(This->status_text);
HGLOBAL hglobal;
HRESULT hr;
- if (!body) return E_INVALIDARG;
+ if (!body) return E_POINTER;
if (This->state != READYSTATE_COMPLETE) return E_FAIL;
hr = GetHGlobalFromStream(This->bsc->stream, &hglobal);
static HRESULT httprequest_get_readyState(httprequest *This, LONG *state)
{
- if (!state) return E_INVALIDARG;
+ if (!state) return E_POINTER;
*state = This->state;
return S_OK;
if (This->site)
IUnknown_Release( This->site );
+ if (This->uri)
+ IUri_Release(This->uri);
+ if (This->base_uri)
+ IUri_Release(This->base_uri);
SysFreeString(This->custom);
- SysFreeString(This->siteurl);
- SysFreeString(This->url);
SysFreeString(This->user);
SysFreeString(This->password);
return IUnknown_QueryInterface( This->site, iid, ppvSite );
}
- static HRESULT WINAPI httprequest_ObjectWithSite_SetSite( IObjectWithSite *iface, IUnknown *punk )
+ static void get_base_uri(httprequest *This)
{
- httprequest *This = impl_from_IObjectWithSite(iface);
IServiceProvider *provider;
+ IHTMLDocument2 *doc;
+ IUri *uri;
+ BSTR url;
HRESULT hr;
- TRACE("(%p)->(%p)\n", iface, punk);
+ hr = IUnknown_QueryInterface(This->site, &IID_IServiceProvider, (void**)&provider);
+ if(FAILED(hr))
+ return;
- if (punk)
- IUnknown_AddRef( punk );
+ hr = IServiceProvider_QueryService(provider, &SID_SContainerDispatch, &IID_IHTMLDocument2, (void**)&doc);
+ IServiceProvider_Release(provider);
+ if(FAILED(hr))
+ return;
+
+ hr = IHTMLDocument2_get_URL(doc, &url);
+ IHTMLDocument2_Release(doc);
+ if(FAILED(hr) || !url || !*url)
+ return;
+
+ TRACE("host url %s\n", debugstr_w(url));
+
+ hr = CreateUri(url, 0, 0, &uri);
+ SysFreeString(url);
+ if(FAILED(hr))
+ return;
+
+ This->base_uri = uri;
+ }
+
+ static HRESULT WINAPI httprequest_ObjectWithSite_SetSite( IObjectWithSite *iface, IUnknown *punk )
+ {
+ httprequest *This = impl_from_IObjectWithSite(iface);
+
+ TRACE("(%p)->(%p)\n", This, punk);
if(This->site)
IUnknown_Release( This->site );
+ if(This->base_uri)
+ IUri_Release(This->base_uri);
This->site = punk;
- hr = IUnknown_QueryInterface(This->site, &IID_IServiceProvider, (void**)&provider);
- if (hr == S_OK)
+ if (punk)
{
- IHTMLDocument2 *doc;
-
- hr = IServiceProvider_QueryService(provider, &SID_SContainerDispatch, &IID_IHTMLDocument2, (void**)&doc);
- if (hr == S_OK)
- {
- SysFreeString(This->siteurl);
-
- hr = IHTMLDocument2_get_URL(doc, &This->siteurl);
- IHTMLDocument2_Release(doc);
- TRACE("host url %s, 0x%08x\n", debugstr_w(This->siteurl), hr);
- }
- IServiceProvider_Release(provider);
+ IUnknown_AddRef( punk );
+ get_base_uri(This);
}
return S_OK;
req->async = FALSE;
req->verb = -1;
req->custom = NULL;
- req->url = req->siteurl = req->user = req->password = NULL;
+ req->uri = req->base_uri = NULL;
+ req->user = req->password = NULL;
req->state = READYSTATE_UNINITIALIZED;
req->sink = NULL;
return wine_dbg_sprintf("{VT_I2: %d}", V_I2(v));
case VT_I4:
return wine_dbg_sprintf("{VT_I4: %d}", V_I4(v));
+ case VT_INT:
+ return wine_dbg_sprintf("{VT_INT: %d}", V_INT(v));
case VT_R8:
return wine_dbg_sprintf("{VT_R8: %lf}", V_R8(v));
case VT_BSTR:
size = (strlenW(str)+1)*sizeof(WCHAR);
ret = heap_alloc(size);
- memcpy(ret, str, size);
+ if(ret)
+ memcpy(ret, str, size);
}
return ret;
extern void xmldoc_init( xmlDocPtr doc, MSXML_VERSION version ) DECLSPEC_HIDDEN;
extern LONG xmldoc_add_ref( xmlDocPtr doc ) DECLSPEC_HIDDEN;
extern LONG xmldoc_release( xmlDocPtr doc ) DECLSPEC_HIDDEN;
+ extern LONG xmldoc_add_refs( xmlDocPtr doc, LONG refs ) DECLSPEC_HIDDEN;
+ extern LONG xmldoc_release_refs ( xmlDocPtr doc, LONG refs ) DECLSPEC_HIDDEN;
+ extern int xmlnode_get_inst_cnt( xmlnode *node ) DECLSPEC_HIDDEN;
extern HRESULT xmldoc_add_orphan( xmlDocPtr doc, xmlNodePtr node ) DECLSPEC_HIDDEN;
extern HRESULT xmldoc_remove_orphan( xmlDocPtr doc, xmlNodePtr node ) DECLSPEC_HIDDEN;
extern void xmldoc_link_xmldecl(xmlDocPtr doc, xmlNodePtr node) DECLSPEC_HIDDEN;
return xmlchar_from_wcharn(str, -1);
}
+ static inline xmlChar *heap_strdupxmlChar(const xmlChar *str)
+ {
+ xmlChar *ret = NULL;
+
+ if(str) {
+ DWORD size;
+
+ size = (xmlStrlen(str)+1)*sizeof(xmlChar);
+ ret = heap_alloc(size);
+ memcpy(ret, str, size);
+ }
+
+ return ret;
+ }
+
#endif
static inline HRESULT return_bstr(const WCHAR *value, BSTR *p)
return hr;
}
- if (ret->code_page == CP_UTF8) {
+ /* currently we always create a default output buffer that is UTF-16 only,
+ but it's possible to allocate with specific encoding too */
+ if (encoding != XmlEncoding_UTF16) {
hr = init_encoded_buffer(&ret->encoded);
if (hr != S_OK) {
free_encoded_buffer(&ret->utf16);
HRESULT node_put_value(xmlnode *This, VARIANT *value)
{
- VARIANT string_value;
HRESULT hr;
- VariantInit(&string_value);
- hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
- if(FAILED(hr)) {
- WARN("Couldn't convert to VT_BSTR\n");
- return hr;
- }
+ if (V_VT(value) != VT_BSTR)
+ {
+ VARIANT string_value;
- hr = node_set_content(This, V_BSTR(&string_value));
- VariantClear(&string_value);
+ VariantInit(&string_value);
+ hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
+ if(FAILED(hr)) {
+ WARN("Couldn't convert to VT_BSTR\n");
+ return hr;
+ }
+
+ hr = node_set_content(This, V_BSTR(&string_value));
+ VariantClear(&string_value);
+ }
+ else
+ hr = node_set_content(This, V_BSTR(value));
return hr;
}
HRESULT node_put_value_escaped(xmlnode *This, VARIANT *value)
{
- VARIANT string_value;
HRESULT hr;
- VariantInit(&string_value);
- hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
- if(FAILED(hr)) {
- WARN("Couldn't convert to VT_BSTR\n");
- return hr;
- }
+ if (V_VT(value) != VT_BSTR)
+ {
+ VARIANT string_value;
- hr = node_set_content_escaped(This, V_BSTR(&string_value));
- VariantClear(&string_value);
+ VariantInit(&string_value);
+ hr = VariantChangeType(&string_value, value, 0, VT_BSTR);
+ if(FAILED(hr)) {
+ WARN("Couldn't convert to VT_BSTR\n");
+ return hr;
+ }
+
+ hr = node_set_content_escaped(This, V_BSTR(&string_value));
+ VariantClear(&string_value);
+ }
+ else
+ hr = node_set_content_escaped(This, V_BSTR(value));
return hr;
}
return get_node(This, "next", This->node->next, ret);
}
+ static int node_get_inst_cnt(xmlNodePtr node)
+ {
+ int ret = *(LONG *)&node->_private;
+ xmlNodePtr child;
+
+ /* add attribute counts */
+ if (node->type == XML_ELEMENT_NODE)
+ {
+ xmlAttrPtr prop = node->properties;
+
+ while (prop)
+ {
+ ret += node_get_inst_cnt((xmlNodePtr)prop);
+ prop = prop->next;
+ }
+ }
+
+ /* add children counts */
+ child = node->children;
+ while (child)
+ {
+ ret += node_get_inst_cnt(child);
+ child = child->next;
+ }
+
+ return ret;
+ }
+
+ int xmlnode_get_inst_cnt(xmlnode *node)
+ {
+ return node_get_inst_cnt(node->node);
+ }
+
HRESULT node_insert_before(xmlnode *This, IXMLDOMNode *new_child, const VARIANT *ref_child,
IXMLDOMNode **ret)
{
IXMLDOMNode *before = NULL;
xmlnode *node_obj;
+ int refcount = 0;
xmlDocPtr doc;
HRESULT hr;
if(xmldoc_remove_orphan(node_obj->node->doc, node_obj->node) != S_OK)
WARN("%p is not an orphan of %p\n", node_obj->node, node_obj->node->doc);
+ refcount = xmlnode_get_inst_cnt(node_obj);
+
if(before)
{
xmlnode *before_node_obj = get_node_obj(before);
hr = IXMLDOMNode_removeChild(node_obj->parent, node_obj->iface, NULL);
if (hr == S_OK) xmldoc_remove_orphan(node_obj->node->doc, node_obj->node);
}
+
doc = node_obj->node->doc;
- xmldoc_add_ref(before_node_obj->node->doc);
+
+ /* refs count including subtree */
+ if (doc != before_node_obj->node->doc)
+ refcount = xmlnode_get_inst_cnt(node_obj);
+
+ if (refcount) xmldoc_add_refs(before_node_obj->node->doc, refcount);
xmlAddPrevSibling(before_node_obj->node, node_obj->node);
- xmldoc_release(doc);
+ if (refcount) xmldoc_release_refs(doc, refcount);
node_obj->parent = This->parent;
}
else
if (hr == S_OK) xmldoc_remove_orphan(node_obj->node->doc, node_obj->node);
}
doc = node_obj->node->doc;
- xmldoc_add_ref(This->node->doc);
+
+ if (doc != This->node->doc)
+ refcount = xmlnode_get_inst_cnt(node_obj);
+
+ if (refcount) xmldoc_add_refs(This->node->doc, refcount);
/* xmlAddChild doesn't unlink node from previous parent */
xmlUnlinkNode(node_obj->node);
xmlAddChild(This->node, node_obj->node);
- xmldoc_release(doc);
+ if (refcount) xmldoc_release_refs(doc, refcount);
node_obj->parent = This->iface;
}
xmlnode *old_child, *new_child;
xmlDocPtr leaving_doc;
xmlNode *my_ancestor;
+ int refcount = 0;
/* Do not believe any documentation telling that newChild == NULL
means removal. It does certainly *not* apply to msxml3! */
WARN("%p is not an orphan of %p\n", new_child->node, new_child->node->doc);
leaving_doc = new_child->node->doc;
- xmldoc_add_ref(old_child->node->doc);
+
+ if (leaving_doc != old_child->node->doc)
+ refcount = xmlnode_get_inst_cnt(new_child);
+
+ if (refcount) xmldoc_add_refs(old_child->node->doc, refcount);
xmlReplaceNode(old_child->node, new_child->node);
- xmldoc_release(leaving_doc);
+ if (refcount) xmldoc_release_refs(leaving_doc, refcount);
new_child->parent = old_child->parent;
old_child->parent = NULL;
clone = xmlCopyNode(This->node, deep ? 1 : 2);
if (clone)
{
- clone->doc = This->node->doc;
+ xmlSetTreeDoc(clone, This->node->doc);
xmldoc_add_orphan(clone->doc, clone);
node = create_node(clone);
return *ret ? S_OK : E_OUTOFMEMORY;
}
+ static void htmldtd_dumpcontent(xmlOutputBufferPtr buf, xmlDocPtr doc)
+ {
+ xmlDtdPtr cur = doc->intSubset;
+
+ xmlOutputBufferWriteString(buf, "<!DOCTYPE ");
+ xmlOutputBufferWriteString(buf, (const char *)cur->name);
+ if (cur->ExternalID)
+ {
+ xmlOutputBufferWriteString(buf, " PUBLIC ");
+ xmlBufferWriteQuotedString(buf->buffer, cur->ExternalID);
+ if (cur->SystemID)
+ {
+ xmlOutputBufferWriteString(buf, " ");
+ xmlBufferWriteQuotedString(buf->buffer, cur->SystemID);
+ }
+ }
+ else if (cur->SystemID)
+ {
+ xmlOutputBufferWriteString(buf, " SYSTEM ");
+ xmlBufferWriteQuotedString(buf->buffer, cur->SystemID);
+ }
+ xmlOutputBufferWriteString(buf, ">\n");
+ }
+
+ static void htmldoc_dumpcontent(xmlOutputBufferPtr buf, xmlDocPtr doc)
+ {
+ xmlElementType type;
+
+ /* force HTML output */
+ type = doc->type;
+ doc->type = XML_HTML_DOCUMENT_NODE;
+ if (doc->intSubset)
+ htmldtd_dumpcontent(buf, doc);
+ if (doc->children)
+ {
+ xmlNodePtr cur = doc->children;
+
+ while (cur)
+ {
+ htmlNodeDumpFormatOutput(buf, doc, cur, NULL, 1);
+ cur = cur->next;
+ }
+
+ }
+ doc->type = type;
+ }
+
HRESULT node_transform_node(const xmlnode *This, IXMLDOMNode *stylesheet, BSTR *p)
{
#ifdef SONAME_LIBXSLT
xmlOutputBufferPtr output = xmlAllocOutputBuffer(NULL);
if (output)
{
- htmlDocContentDumpOutput(output, result->doc, NULL);
+ htmldoc_dumpcontent(output, result->doc);
content = xmlBufferContent(output->buffer);
*p = bstr_from_xmlChar(content);
xmlOutputBufferClose(output);
return S_OK;
}
+ /* _private field holds a number of COM instances spawned from this libxml2 node */
+ static void xmlnode_add_ref(xmlNodePtr node)
+ {
+ if (node->type == XML_DOCUMENT_NODE) return;
+ InterlockedIncrement((LONG*)&node->_private);
+ }
+
+ static void xmlnode_release(xmlNodePtr node)
+ {
+ if (node->type == XML_DOCUMENT_NODE) return;
+ InterlockedDecrement((LONG*)&node->_private);
+ }
+
void destroy_xmlnode(xmlnode *This)
{
if(This->node)
+ {
+ xmlnode_release(This->node);
xmldoc_release(This->node->doc);
+ }
release_dispex(&This->dispex);
}
void init_xmlnode(xmlnode *This, xmlNodePtr node, IXMLDOMNode *node_iface, dispex_static_data_t *dispex_data)
{
if(node)
- xmldoc_add_ref( node->doc );
+ {
+ xmlnode_add_ref(node);
+ xmldoc_add_ref(node->doc);
+ }
This->node = node;
This->iface = node_iface;
TRACE("(%p)->(%x %x %x %p %p %p)\n", This, id, lcid, flags, params, res, ei);
- V_VT(res) = VT_DISPATCH;
- V_DISPATCH(res) = NULL;
-
- if (id < DISPID_DOM_COLLECTION_BASE || id > DISPID_DOM_COLLECTION_MAX)
- return DISP_E_UNKNOWNNAME;
-
- switch(flags)
+ if (id >= DISPID_DOM_COLLECTION_BASE && id <= DISPID_DOM_COLLECTION_MAX)
{
- case INVOKE_PROPERTYGET:
+ switch(flags)
{
- IXMLDOMNode *disp = NULL;
-
- IXMLDOMNodeList_get_item(&This->IXMLDOMNodeList_iface, id - DISPID_DOM_COLLECTION_BASE, &disp);
- V_DISPATCH(res) = (IDispatch*)disp;
- break;
+ case DISPATCH_PROPERTYGET:
+ {
+ IXMLDOMNode *disp = NULL;
+
+ V_VT(res) = VT_DISPATCH;
+ IXMLDOMNodeList_get_item(&This->IXMLDOMNodeList_iface, id - DISPID_DOM_COLLECTION_BASE, &disp);
+ V_DISPATCH(res) = (IDispatch*)disp;
+ break;
+ }
+ default:
+ {
+ FIXME("unimplemented flags %x\n", flags);
+ break;
+ }
}
- default:
+ }
+ else if (id == DISPID_VALUE)
+ {
+ switch(flags)
{
- FIXME("unimplemented flags %x\n", flags);
- break;
+ case DISPATCH_METHOD|DISPATCH_PROPERTYGET:
+ case DISPATCH_PROPERTYGET:
+ case DISPATCH_METHOD:
+ {
+ IXMLDOMNode *item;
+ VARIANT index;
+ HRESULT hr;
+
+ if (params->cArgs - params->cNamedArgs != 1) return DISP_E_BADPARAMCOUNT;
+
+ VariantInit(&index);
+ hr = VariantChangeType(&index, params->rgvarg, 0, VT_I4);
+ if(FAILED(hr))
+ {
+ FIXME("failed to convert arg, %s\n", debugstr_variant(params->rgvarg));
+ return hr;
+ }
+
+ IXMLDOMNodeList_get_item(&This->IXMLDOMNodeList_iface, V_I4(&index), &item);
+ V_VT(res) = VT_DISPATCH;
+ V_DISPATCH(res) = (IDispatch*)item;
+ break;
+ }
+ default:
+ {
+ FIXME("DISPID_VALUE: unimplemented flags %x\n", flags);
+ break;
+ }
}
}
+ else
+ return DISP_E_UNKNOWNNAME;
TRACE("ret %p\n", V_DISPATCH(res));
SAXContentHandler = 0,
SAXDeclHandler,
SAXDTDHandler,
+ SAXEntityResolver,
SAXErrorHandler,
SAXLexicalHandler,
SAXHandler_Last
};
- struct saxhandler_iface
+ struct saxanyhandler_iface
{
IUnknown *handler;
IUnknown *vbhandler;
IVBSAXLexicalHandler *vbhandler;
};
+ struct saxentityresolver_iface
+ {
+ ISAXEntityResolver *handler;
+ IVBSAXEntityResolver *vbhandler;
+ };
+
+ struct saxhandler_iface
+ {
+ union {
+ struct saxcontenthandler_iface content;
+ struct saxentityresolver_iface entityresolver;
+ struct saxerrorhandler_iface error;
+ struct saxlexicalhandler_iface lexical;
+ struct saxanyhandler_iface anyhandler;
+ } u;
+ };
+
typedef struct
{
DispatchEx dispex;
static HRESULT saxreader_put_handler(saxreader *reader, enum saxhandler_type type, void *ptr, BOOL vb)
{
- struct saxhandler_iface *iface = &reader->saxhandlers[type];
+ struct saxanyhandler_iface *iface = &reader->saxhandlers[type].u.anyhandler;
IUnknown *unk = (IUnknown*)ptr;
if (unk)
static HRESULT saxreader_get_handler(const saxreader *reader, enum saxhandler_type type, BOOL vb, void **ret)
{
- const struct saxhandler_iface *iface = &reader->saxhandlers[type];
+ const struct saxanyhandler_iface *iface = &reader->saxhandlers[type].u.anyhandler;
if (!ret) return E_POINTER;
static struct saxcontenthandler_iface *saxreader_get_contenthandler(saxreader *reader)
{
- return (struct saxcontenthandler_iface*)&reader->saxhandlers[SAXContentHandler];
+ return &reader->saxhandlers[SAXContentHandler].u.content;
}
static struct saxerrorhandler_iface *saxreader_get_errorhandler(saxreader *reader)
{
- return (struct saxerrorhandler_iface*)&reader->saxhandlers[SAXErrorHandler];
+ return &reader->saxhandlers[SAXErrorHandler].u.error;
}
static struct saxlexicalhandler_iface *saxreader_get_lexicalhandler(saxreader *reader)
{
- return (struct saxlexicalhandler_iface*)&reader->saxhandlers[SAXLexicalHandler];
+ return &reader->saxhandlers[SAXLexicalHandler].u.lexical;
}
typedef struct
saxreader *saxreader;
HRESULT ret;
xmlParserCtxtPtr pParserCtxt;
- WCHAR *publicId;
- WCHAR *systemId;
+ BSTR publicId;
+ BSTR systemId;
int line;
int column;
BOOL vbInterface;
static inline int saxreader_has_handler(const saxlocator *locator, enum saxhandler_type type)
{
- return (locator->vbInterface && locator->saxreader->saxhandlers[type].vbhandler) ||
- (!locator->vbInterface && locator->saxreader->saxhandlers[type].handler);
+ struct saxanyhandler_iface *iface = &locator->saxreader->saxhandlers[type].u.anyhandler;
+ return (locator->vbInterface && iface->vbhandler) || (!locator->vbInterface && iface->handler);
+ }
+
+ static HRESULT saxreader_saxcharacters(saxlocator *locator, BSTR chars)
+ {
+ struct saxcontenthandler_iface *content = saxreader_get_contenthandler(locator->saxreader);
+ HRESULT hr;
+
+ if (!saxreader_has_handler(locator, SAXContentHandler)) return S_OK;
+
+ if (locator->vbInterface)
+ hr = IVBSAXContentHandler_characters(content->vbhandler, &chars);
+ else
+ hr = ISAXContentHandler_characters(content->handler, chars, SysStringLen(chars));
+
+ return hr;
}
/* property names */
int len)
{
saxlocator *This = ctx;
- struct saxcontenthandler_iface *handler = saxreader_get_contenthandler(This->saxreader);
BSTR Chars;
HRESULT hr;
xmlChar *cur, *end;
}
Chars = pooled_bstr_from_xmlCharN(&This->saxreader->pool, cur, end-cur);
- if(This->vbInterface)
- hr = IVBSAXContentHandler_characters(handler->vbhandler, &Chars);
- else
- hr = ISAXContentHandler_characters(handler->handler, Chars, SysStringLen(Chars));
+ hr = saxreader_saxcharacters(This, Chars);
if (sax_callback_failed(This, hr))
{
This->ret = E_FAIL;
}
- static void libxmlCDataBlock(void *ctx, const xmlChar *value, int len)
+ /* The only reason this helper exists is that CDATA section are reported by chunks,
+ newlines are used as delimiter. More than that, reader even alters input data before reporting.
+
+ This helper should be called for substring with trailing newlines.
+ */
+ static BSTR saxreader_get_cdata_chunk(const xmlChar *str, int len)
{
- saxlocator *This = ctx;
- struct saxcontenthandler_iface *content = saxreader_get_contenthandler(This->saxreader);
- struct saxlexicalhandler_iface *lexical = saxreader_get_lexicalhandler(This->saxreader);
- HRESULT hr = S_OK;
- xmlChar *beg = (xmlChar*)This->pParserCtxt->input->cur-len;
- xmlChar *cur, *end;
- int realLen;
- BSTR Chars;
- BOOL lastEvent = FALSE, change;
+ BSTR bstr = bstr_from_xmlCharN(str, len), ret;
+ WCHAR *ptr;
- update_position(This, FALSE);
- while(beg-9>=This->pParserCtxt->input->base
- && memcmp(beg-9, "<![CDATA[", sizeof(char[9])))
+ ptr = bstr + len - 1;
+ while ((*ptr == '\r' || *ptr == '\n') && ptr >= bstr)
+ ptr--;
+
+ while (*++ptr)
{
- if(*beg=='\n' || (*beg=='\r' && *(beg+1)!='\n'))
- This->line--;
- beg--;
+ /* replace returns as:
+
+ - "\r<char>" -> "\n<char>"
+ - "\r\r" -> "\r"
+ - "\r\n" -> "\n"
+ */
+ if (*ptr == '\r')
+ {
+ if (*(ptr+1) == '\r' || *(ptr+1) == '\n')
+ {
+ /* shift tail */
+ memmove(ptr, ptr+1, len-- - (ptr-bstr));
+ }
+ else
+ *ptr = '\n';
+ }
}
- This->column = 0;
- for(; beg>=This->pParserCtxt->input->base && *beg!='\n' && *beg!='\r'; beg--)
- This->column++;
- if (saxreader_has_handler(This, SAXLexicalHandler))
+ ret = SysAllocStringLen(bstr, len);
+ SysFreeString(bstr);
+ return ret;
+ }
+
+ static void libxml_cdatablock(void *ctx, const xmlChar *value, int len)
+ {
+ const xmlChar *start, *end;
+ saxlocator *locator = ctx;
+ struct saxlexicalhandler_iface *lexical = saxreader_get_lexicalhandler(locator->saxreader);
+ HRESULT hr = S_OK;
+ BSTR chars;
+ int i;
+
+ update_position(locator, FALSE);
+ if (saxreader_has_handler(locator, SAXLexicalHandler))
{
- if (This->vbInterface)
+ if (locator->vbInterface)
hr = IVBSAXLexicalHandler_startCDATA(lexical->vbhandler);
else
hr = ISAXLexicalHandler_startCDATA(lexical->handler);
if(FAILED(hr))
{
- format_error_message_from_id(This, hr);
+ format_error_message_from_id(locator, hr);
return;
}
- realLen = This->pParserCtxt->input->cur-beg-3;
- cur = beg;
- end = beg;
+ start = value;
+ end = NULL;
+ i = 0;
- while(1)
+ while (i < len)
{
- while(end-beg<realLen && *end!='\r') end++;
- if(end-beg==realLen)
+ /* scan for newlines */
+ if (value[i] == '\r' || value[i] == '\n')
{
- end--;
- lastEvent = TRUE;
- }
- else if(end-beg==realLen-1 && *end=='\r' && *(end+1)=='\n')
- lastEvent = TRUE;
-
- if(*end == '\r') change = TRUE;
- else change = FALSE;
+ /* skip newlines/linefeeds */
+ while (i < len)
+ {
+ if (value[i] != '\r' && value[i] != '\n') break;
+ i++;
+ }
+ end = &value[i];
- if(change) *end = '\n';
+ /* report */
+ chars = saxreader_get_cdata_chunk(start, end-start);
+ TRACE("(chunk %s)\n", debugstr_w(chars));
+ hr = saxreader_saxcharacters(locator, chars);
+ SysFreeString(chars);
- if (saxreader_has_handler(This, SAXContentHandler))
- {
- Chars = pooled_bstr_from_xmlCharN(&This->saxreader->pool, cur, end-cur+1);
- if (This->vbInterface)
- hr = IVBSAXContentHandler_characters(content->vbhandler, &Chars);
- else
- hr = ISAXContentHandler_characters(content->handler, Chars, SysStringLen(Chars));
+ start = &value[i];
+ end = NULL;
}
+ i++;
+ locator->column++;
+ }
- if(change) *end = '\r';
-
- if(lastEvent)
- break;
-
- This->column += end-cur+2;
- end += 2;
- cur = end;
+ /* no newline chars (or last chunk) report as a whole */
+ if (!end && start == value)
+ {
+ /* report */
+ chars = bstr_from_xmlCharN(start, len-(start-value));
+ TRACE("(%s)\n", debugstr_w(chars));
+ hr = saxreader_saxcharacters(locator, chars);
+ SysFreeString(chars);
}
- if (saxreader_has_handler(This, SAXLexicalHandler))
+ if (saxreader_has_handler(locator, SAXLexicalHandler))
{
- if (This->vbInterface)
+ if (locator->vbInterface)
hr = IVBSAXLexicalHandler_endCDATA(lexical->vbhandler);
else
hr = ISAXLexicalHandler_endCDATA(lexical->handler);
}
if(FAILED(hr))
- format_error_message_from_id(This, hr);
+ format_error_message_from_id(locator, hr);
+ }
- This->column += 4+end-cur;
+ static xmlParserInputPtr libxmlresolveentity(void *ctx, const xmlChar *publicid, const xmlChar *systemid)
+ {
+ FIXME("entity resolving not implemented, %s, %s\n", publicid, systemid);
+ return xmlSAX2ResolveEntity(ctx, publicid, systemid);
}
/*** IVBSAXLocator interface ***/
publicId = bstr_from_xmlChar(xmlSAX2GetPublicId(This->pParserCtxt));
if(SysStringLen(publicId))
- This->publicId = (WCHAR*)&publicId;
+ This->publicId = publicId;
else
{
SysFreeString(publicId);
systemId = bstr_from_xmlChar(xmlSAX2GetSystemId(This->pParserCtxt));
if(SysStringLen(systemId))
- This->systemId = (WCHAR*)&systemId;
+ This->systemId = systemId;
else
{
SysFreeString(systemId);
return hr;
}
- static HRESULT internal_getEntityResolver(
- saxreader *This,
- void *pEntityResolver,
- BOOL vbInterface)
- {
- FIXME("(%p)->(%p) stub\n", This, pEntityResolver);
- return E_NOTIMPL;
- }
-
- static HRESULT internal_putEntityResolver(
- saxreader *This,
- void *pEntityResolver,
- BOOL vbInterface)
- {
- FIXME("(%p)->(%p) stub\n", This, pEntityResolver);
- return E_NOTIMPL;
- }
-
static HRESULT internal_parse(
saxreader* This,
VARIANT varInput,
for (i = 0; i < SAXHandler_Last; i++)
{
- struct saxhandler_iface *iface = &This->saxhandlers[i];
+ struct saxanyhandler_iface *iface = &This->saxhandlers[i].u.anyhandler;
if (iface->handler)
IUnknown_Release(iface->handler);
static HRESULT WINAPI saxxmlreader_get_entityResolver(
IVBSAXXMLReader* iface,
- IVBSAXEntityResolver **pEntityResolver)
+ IVBSAXEntityResolver **resolver)
{
saxreader *This = impl_from_IVBSAXXMLReader( iface );
- return internal_getEntityResolver(This, pEntityResolver, TRUE);
+ return saxreader_get_handler(This, SAXEntityResolver, TRUE, (void**)resolver);
}
static HRESULT WINAPI saxxmlreader_put_entityResolver(
IVBSAXXMLReader* iface,
- IVBSAXEntityResolver *pEntityResolver)
+ IVBSAXEntityResolver *resolver)
{
saxreader *This = impl_from_IVBSAXXMLReader( iface );
- return internal_putEntityResolver(This, pEntityResolver, TRUE);
+ return saxreader_put_handler(This, SAXEntityResolver, resolver, TRUE);
}
static HRESULT WINAPI saxxmlreader_get_contentHandler(
static HRESULT WINAPI isaxxmlreader_getEntityResolver(
ISAXXMLReader* iface,
- ISAXEntityResolver **ppEntityResolver)
+ ISAXEntityResolver **resolver)
{
saxreader *This = impl_from_ISAXXMLReader( iface );
- return internal_getEntityResolver(This, ppEntityResolver, FALSE);
+ return saxreader_get_handler(This, SAXEntityResolver, FALSE, (void**)resolver);
}
static HRESULT WINAPI isaxxmlreader_putEntityResolver(
ISAXXMLReader* iface,
- ISAXEntityResolver *pEntityResolver)
+ ISAXEntityResolver *resolver)
{
saxreader *This = impl_from_ISAXXMLReader( iface );
- return internal_putEntityResolver(This, pEntityResolver, FALSE);
+ return saxreader_put_handler(This, SAXEntityResolver, resolver, FALSE);
}
static HRESULT WINAPI isaxxmlreader_getContentHandler(
reader->sax.comment = libxmlComment;
reader->sax.error = libxmlFatalError;
reader->sax.fatalError = libxmlFatalError;
- reader->sax.cdataBlock = libxmlCDataBlock;
+ reader->sax.cdataBlock = libxml_cdatablock;
+ reader->sax.resolveEntity = libxmlresolveentity;
*ppObj = &reader->IVBSAXXMLReader_iface;
MSXML_VERSION version;
xmlHashTablePtr cache;
+ xmlChar **uris;
+ int allocated;
+ int count;
VARIANT_BOOL validateOnLoad;
int read_only;
LONG ref;
} cache_entry;
- typedef struct
- {
- LONG index;
- BSTR* out;
- } cache_index_data;
-
/* datatypes lookup stuff
* generated with help from gperf */
#define DT_MIN_STR_LEN 2
return;
}
buf = LockResource(datatypes_handle);
- datatypes_len = SizeofResource(MSXML_hInstance, datatypes_rsrc) - 1;
+ datatypes_len = SizeofResource(MSXML_hInstance, datatypes_rsrc);
/* Resource is loaded as raw data,
* need a null-terminated string */
xmlNodePtr root, next, child;
xmlNsPtr ns;
- assert((void*)xmlGetExternalEntityLoader() == (void*)external_entity_loader);
+ assert(xmlGetExternalEntityLoader() == external_entity_loader);
root = xmlDocGetRootElement(schema);
if (!root)
return FALSE;
cache_entry_release((cache_entry*)data);
}
+ /* returns index or -1 if not found */
+ static int cache_free_uri(schema_cache *cache, const xmlChar *uri)
+ {
+ int i;
+
+ for (i = 0; i < cache->count; i++)
+ if (xmlStrEqual(cache->uris[i], uri))
+ {
+ heap_free(cache->uris[i]);
+ return i;
+ }
+
+ return -1;
+ }
+
+ static void cache_add_entry(schema_cache *cache, const xmlChar *uri, cache_entry *entry)
+ {
+ int i;
+
+ /* meaning no entry found with this name */
+ if (xmlHashRemoveEntry(cache->cache, uri, cache_free))
+ {
+ if (cache->count == cache->allocated)
+ {
+ cache->allocated *= 2;
+ cache->uris = heap_realloc(cache->uris, cache->allocated*sizeof(xmlChar*));
+ }
+ i = cache->count++;
+ }
+ else
+ i = cache_free_uri(cache, uri);
+
+ cache->uris[i] = heap_strdupxmlChar(uri);
+ xmlHashAddEntry(cache->cache, uri, entry);
+ }
+
+ static void cache_remove_entry(schema_cache *cache, const xmlChar *uri)
+ {
+ /* adjust index if entry was really removed */
+ if (xmlHashRemoveEntry(cache->cache, uri, cache_free) == 0)
+ {
+ int i = cache_free_uri(cache, uri);
+ if (i == -1) return;
+ /* shift array */
+ if (i != --cache->count)
+ memmove(&cache->uris[i], &cache->uris[i+1], (cache->count-i)*sizeof(xmlChar*));
+ }
+ }
+
/* This one adds all namespaces defined in document to a cache, without anything
associated with uri obviously.
Unfortunately namespace:: axis implementation in libxml2 differs from what we need,
entry->schema = NULL;
entry->doc = NULL;
- xmlHashRemoveEntry(This->cache, ns->href, cache_free);
- xmlHashAddEntry(This->cache, ns->href, entry);
+ cache_add_entry(This, ns->href, entry);
}
pos++;
}
if (ref == 0)
{
+ int i;
+
+ for (i = 0; i < This->count; i++)
+ heap_free(This->uris[i]);
+ heap_free(This->uris);
xmlHashFree(This->cache, cache_free);
release_dispex(&This->dispex);
heap_free(This);
{
case VT_NULL:
{
- xmlHashRemoveEntry(This->cache, name, cache_free);
+ cache_remove_entry(This, name);
}
break;
return E_FAIL;
}
- xmlHashRemoveEntry(This->cache, name, cache_free);
- xmlHashAddEntry(This->cache, name, entry);
+ cache_add_entry(This, name, entry);
}
break;
return E_FAIL;
}
- xmlHashRemoveEntry(This->cache, name, cache_free);
- xmlHashAddEntry(This->cache, name, entry);
+ cache_add_entry(This, name, entry);
}
break;
if (This->version == MSXML6) return E_NOTIMPL;
- xmlHashRemoveEntry(This->cache, name, cache_free);
+ cache_remove_entry(This, name);
heap_free(name);
return S_OK;
}
if (!length)
return E_POINTER;
- *length = xmlHashSize(This->cache);
- return S_OK;
- }
- static void cache_index(void* data /* ignored */, void* index, xmlChar* name)
- {
- cache_index_data* index_data = (cache_index_data*)index;
-
- if (index_data->index-- == 0)
- *index_data->out = bstr_from_xmlChar(name);
+ *length = This->count;
+ return S_OK;
}
static HRESULT WINAPI schema_cache_get_namespaceURI(IXMLDOMSchemaCollection2* iface,
- LONG index, BSTR* len)
+ LONG index, BSTR* uri)
{
schema_cache* This = impl_from_IXMLDOMSchemaCollection2(iface);
- cache_index_data data = {index, len};
- TRACE("(%p)->(%i %p)\n", This, index, len);
- if (!len)
+ TRACE("(%p)->(%i %p)\n", This, index, uri);
+
+ if (!uri)
return E_POINTER;
- if (index >= xmlHashSize(This->cache))
+ if (index >= This->count)
return E_FAIL;
- *len = NULL;
- xmlHashScan(This->cache, cache_index, &data);
+ *uri = bstr_from_xmlChar(This->uris[index]);
return S_OK;
}
if (xmlHashLookup(This->cache, name) == NULL)
{
cache_entry_add_ref(entry);
- xmlHashAddEntry(This->cache, name, entry);
+ cache_add_entry(This, name, entry);
}
}
This->IXMLDOMSchemaCollection2_iface.lpVtbl = &XMLDOMSchemaCollection2Vtbl;
This->cache = xmlHashCreate(DEFAULT_HASHTABLE_SIZE);
+ This->allocated = 10;
+ This->count = 0;
+ This->uris = heap_alloc(This->allocated*sizeof(xmlChar*));
This->ref = 1;
This->version = version;
This->validateOnLoad = VARIANT_TRUE;
//#include <stdarg.h>
#ifdef HAVE_LIBXML2
# include <libxml/parser.h>
+ # include <libxml/parserInternals.h>
//# include <libxml/xmlerror.h>
#endif
return CONTAINING_RECORD(iface, domtext, IXMLDOMText_iface);
}
+ static void domtext_reset_noenc(domtext *This)
+ {
+ This->node.node->name = NULL;
+ }
+
static HRESULT WINAPI domtext_QueryInterface(
IXMLDOMText *iface,
REFIID riid,
TRACE("(%p)->(%s)\n", This, debugstr_variant(&value));
+ domtext_reset_noenc(This);
return node_put_value(&This->node, &value);
}
{
domtext *This = impl_from_IXMLDOMText( iface );
TRACE("(%p)->(%s)\n", This, debugstr_w(p));
+ domtext_reset_noenc(This);
return node_put_text( &This->node, p );
}
BSTR data)
{
domtext *This = impl_from_IXMLDOMText( iface );
+ static WCHAR rnW[] = {'\r','\n',0};
+
TRACE("(%p)->(%s)\n", This, debugstr_w(data));
+
+ if (data && !strcmpW(rnW, data))
+ This->node.node->name = xmlStringTextNoenc;
+ else
+ domtext_reset_noenc(This);
return node_set_content(&This->node, data);
}
typedef struct _xmlparser
{
IXMLParser IXMLParser_iface;
+ IXMLNodeFactory *nodefactory;
+ IUnknown *input;
LONG ref;
int flags;
TRACE("(%p)->(%d)\n", This, ref);
if ( ref == 0 )
{
+ if(This->input)
+ IUnknown_Release(This->input);
+
+ if(This->nodefactory)
+ IXMLNodeFactory_Release(This->nodefactory);
+
heap_free( This );
}
{
xmlparser *This = impl_from_IXMLParser( iface );
- FIXME("(%p %p)\n", This, pNodeFactory);
+ TRACE("(%p %p)\n", This, pNodeFactory);
- return E_NOTIMPL;
+ if(This->nodefactory)
+ IXMLNodeFactory_Release(This->nodefactory);
+
+ This->nodefactory = pNodeFactory;
+ if(This->nodefactory)
+ IXMLNodeFactory_AddRef(This->nodefactory);
+
+ return S_OK;
}
static HRESULT WINAPI xmlparser_GetFactory(IXMLParser *iface, IXMLNodeFactory **ppNodeFactory)
{
xmlparser *This = impl_from_IXMLParser( iface );
- FIXME("(%p, %p)\n", This, ppNodeFactory);
+ TRACE("(%p, %p)\n", This, ppNodeFactory);
- return E_NOTIMPL;
+ if(!ppNodeFactory)
+ return E_INVALIDARG;
+
+ *ppNodeFactory = This->nodefactory;
+
+ if(*ppNodeFactory)
+ IXMLNodeFactory_AddRef(*ppNodeFactory);
+
+ return S_OK;
}
static HRESULT WINAPI xmlparser_Abort(IXMLParser *iface, BSTR bstrErrorInfo)
{
xmlparser *This = impl_from_IXMLParser( iface );
- FIXME("(%p %p)\n", This, pStm);
+ TRACE("(%p %p)\n", This, pStm);
- return E_NOTIMPL;
+ if(!pStm)
+ return E_INVALIDARG;
+
+ if(This->input)
+ IUnknown_Release(This->input);
+
+ This->input = pStm;
+ IUnknown_AddRef(This->input);
+
+ return S_OK;
}
static HRESULT WINAPI xmlparser_PushData(IXMLParser *iface, const char *pData,
return E_OUTOFMEMORY;
This->IXMLParser_iface.lpVtbl = &xmlparser_vtbl;
+ This->nodefactory = NULL;
+ This->input = NULL;
This->flags = 0;
This->ref = 1;
%option reentrant bison-bridge
%option noyywrap
%option prefix="xslpattern_"
- %option noinput nounput
+ %option noinput nounput never-interactive
/* From the w3c XML standard
* <http://www.w3.org/TR/REC-xml/> */
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 138 );
+ while ( yy_current_state != 95 );
+ yy_cp = yyg->yy_last_accepting_cpos;
+ yy_current_state = yyg->yy_last_accepting_state;
yy_find_action:
yy_act = yy_accept[yy_current_state];
- if ( yy_act == 0 )
- { /* have to back up */
- yy_cp = yyg->yy_last_accepting_cpos;
- yy_current_state = yyg->yy_last_accepting_state;
- yy_act = yy_accept[yy_current_state];
- }
YY_DO_BEFORE_ACTION;
#line 153 "xslpattern.l"
ECHO;
YY_BREAK
- #line 1092 "xslpattern.yy.c"
+ #line 1088 "xslpattern.yy.c"
case YY_STATE_EOF(INITIAL):
yyterminate();
else
{
- yy_cp = yyg->yy_c_buf_p;
+ yy_cp = yyg->yy_last_accepting_cpos;
+ yy_current_state = yyg->yy_last_accepting_state;
goto yy_find_action;
}
}
xslpattern_free((void *) b ,yyscanner );
}
- #ifndef __cplusplus
- extern int isatty (int );
- #endif /* __cplusplus */
-
/* Initializes or reinitializes a buffer.
* This function is sometimes called more than once on the same buffer,
* such as during a xslpattern_restart() or at EOF.
b->yy_bs_column = 0;
}
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+ b->yy_is_interactive = 0;
errno = oerrno;
}
CAPTION "全般"
FONT 9, "MS UI Gothic"
BEGIN
- LTEXT "ネットワークでこの機能 がサポートされている場合は、IP 設定を自動的に取得することができます。サポートされていない場合は、ネットワーク管理者に適切な IP 設定を問い合わせてください。", -1, 9, 9, 228, 27
+ LTEXT "ネットワークでこの機能がサポートされている場合は、IP 設定を自動的に取得することができます。サポートされていない場合は、ネットワーク管理者に適切な IP 設定を問い合わせてください。", -1, 9, 9, 228, 27
CONTROL "IP アドレスを自動的に取得する", IDC_USEDHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP, 14, 43, 210, 12
GROUPBOX "", -1, 9, 61, 228, 70, BS_GROUPBOX
CONTROL "次の IP アドレスを使う(&U):", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON, 14, 59, 105, 12
22 "%1 ワークグループへようこそ。"
23 "%1 ドメインへようこそ。"
24 "変更を有効にするには、コンピュータを再起動してください。"
- 25 "このコンピュータの名前とメンバシップを変更できます。変更するとネットワーク リソ ースへのアクセスに影響する可能 性があります。"
+ 25 "このコンピュータの名前とメンバシップを変更できます。変更するとネットワーク リソースへのアクセスに影響する可能性があります。"
1021 "注意: このコンピュータの ID を変更できるのは管理者のみです。"
1022 "注意: 次の理由により、このコンピュータの ID を変更できません:"
1030 "新しいコンピュータ名 ""%s"" には、使用できないな文字が含まれています。使用できない文字は ` ~ ! @ # $ %% ^ & * ( ) = + _ [ ] { } \\ | ; : ' "" , . < > / ? です。"
IDC_STATIC,120,21,195,30
LTEXT "続行するには、[次へ] をクリックしてください。",IDC_STATIC,120,169,195,17
LTEXT "不明なデバイス",IDC_DEVICE,134,52,164,11
- LTEXT "警告! カスタム デバイスをインストールすると、コンピュータがフリーズしたり、起動不能 になる可能 性があります!",IDC_STATIC,120,67,195,34
+ LTEXT "警告! カスタム デバイスをインストールすると、コンピュータがフリーズしたり、起動不能になる可能性があります!",IDC_STATIC,120,67,195,34
CONTROL "ドライバを自動的にインストールする",IDC_RADIO_AUTO,"Button",
BS_AUTORADIOBUTTON,120,112,178,13
CONTROL "ドライバを特定の場所からインストールする",IDC_RADIO_MANUAL,
IDC_STATIC,120,40,195,19
LTEXT "ドライバのディスクを持っていたり、ドライバへのパスを知っている場合は、[戻る] をクリックしてください。",
IDC_STATIC,120,98,181,24
- CONTROL "このダイアログを今後表 示しない",IDC_DONOTSHOWDLG,"Button",
+ CONTROL "このダイアログを今後表示しない",IDC_DONOTSHOWDLG,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,120,170,180,11
END
FONT 9, "MS UI Gothic"
BEGIN
LTEXT "インストール失敗",IDC_FINISHTITLE,120,8,195,24
- LTEXT "予 期せぬエラーが発生したため、デバイスはインストールされませんでした。",
+ LTEXT "予期せぬエラーが発生したため、デバイスはインストールされませんでした。",
IDC_STATIC,120,40,195,19
LTEXT "不明なデバイス",IDC_DEVICE,134,55,164,11
END
break;
}
- return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
+ return FALSE;
}
static void
break;
}
- return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
+ return FALSE;
}
static INT_PTR CALLBACK
break;
}
- return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
+ return FALSE;
}
static INT_PTR CALLBACK
break;
}
- return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
+ return FALSE;
}
static INT_PTR CALLBACK
break;
}
- return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
+ return FALSE;
}
static INT_PTR CALLBACK
break;
}
- return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
+ return FALSE;
}
static INT_PTR CALLBACK
break;
}
- return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
+ return FALSE;
}
static INT_PTR CALLBACK
break;
}
- return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
+ return FALSE;
}
static HFONT
real_delay = 0;
}
- if (!real_delay || (entry->unload_time && (entry->unload_time < GetTickCount())))
+ if (!real_delay || (entry->unload_time && ((int)(GetTickCount() - entry->unload_time) > 0)))
{
list_remove(&entry->entry);
COMPOBJ_DllList_ReleaseRef(entry->dll, TRUE);
HeapFree(GetProcessHeap(), 0, entry);
}
else
+ {
entry->unload_time = GetTickCount() + real_delay;
+ if (!entry->unload_time) entry->unload_time = 1;
+ }
}
else if (entry->unload_time)
entry->unload_time = 0;
*ppszProgID = CoTaskMemAlloc(progidlen * sizeof(WCHAR));
if (*ppszProgID)
{
- if (RegQueryValueW(hkey, NULL, *ppszProgID, &progidlen))
+ if (RegQueryValueW(hkey, NULL, *ppszProgID, &progidlen)) {
ret = REGDB_E_CLASSNOTREG;
+ CoTaskMemFree(*ppszProgID);
+ *ppszProgID = NULL;
+ }
}
else
ret = E_OUTOFMEMORY;
* CoGetClassObject()
*/
HRESULT WINAPI CoCreateInstance(
- REFCLSID rclsid,
- LPUNKNOWN pUnkOuter,
- DWORD dwClsContext,
- REFIID iid,
- LPVOID *ppv)
- {
- HRESULT hres;
- LPCLASSFACTORY lpclf = 0;
- APARTMENT *apt;
+ REFCLSID rclsid,
+ LPUNKNOWN pUnkOuter,
+ DWORD dwClsContext,
+ REFIID iid,
+ LPVOID *ppv)
+ {
+ HRESULT hres;
+ LPCLASSFACTORY lpclf = 0;
+ APARTMENT *apt;
- TRACE("(rclsid=%s, pUnkOuter=%p, dwClsContext=%08x, riid=%s, ppv=%p)\n", debugstr_guid(rclsid),
- pUnkOuter, dwClsContext, debugstr_guid(iid), ppv);
+ TRACE("(rclsid=%s, pUnkOuter=%p, dwClsContext=%08x, riid=%s, ppv=%p)\n", debugstr_guid(rclsid),
+ pUnkOuter, dwClsContext, debugstr_guid(iid), ppv);
- /*
- * Sanity check
- */
- if (ppv==0)
- return E_POINTER;
+ if (ppv==0)
+ return E_POINTER;
- /*
- * Initialize the "out" parameter
- */
- *ppv = 0;
+ *ppv = 0;
- if (!(apt = COM_CurrentApt()))
- {
- if (!(apt = apartment_find_multi_threaded()))
+ if (!(apt = COM_CurrentApt()))
{
- ERR("apartment not initialised\n");
- return CO_E_NOTINITIALIZED;
+ if (!(apt = apartment_find_multi_threaded()))
+ {
+ ERR("apartment not initialised\n");
+ return CO_E_NOTINITIALIZED;
+ }
+ apartment_release(apt);
}
- apartment_release(apt);
- }
- /*
- * The Standard Global Interface Table (GIT) object is a process-wide singleton.
- * Rather than create a class factory, we can just check for it here
- */
- if (IsEqualIID(rclsid, &CLSID_StdGlobalInterfaceTable)) {
- if (StdGlobalInterfaceTableInstance == NULL)
- StdGlobalInterfaceTableInstance = StdGlobalInterfaceTable_Construct();
- hres = IGlobalInterfaceTable_QueryInterface( (IGlobalInterfaceTable*) StdGlobalInterfaceTableInstance, iid, ppv);
- if (hres) return hres;
+ /*
+ * The Standard Global Interface Table (GIT) object is a process-wide singleton.
+ * Rather than create a class factory, we can just check for it here
+ */
+ if (IsEqualIID(rclsid, &CLSID_StdGlobalInterfaceTable))
+ {
+ if (StdGlobalInterfaceTableInstance == NULL)
+ StdGlobalInterfaceTableInstance = StdGlobalInterfaceTable_Construct();
+ hres = IGlobalInterfaceTable_QueryInterface((IGlobalInterfaceTable*)StdGlobalInterfaceTableInstance,
+ iid,
+ ppv);
+ if (hres) return hres;
- TRACE("Retrieved GIT (%p)\n", *ppv);
- return S_OK;
- }
+ TRACE("Retrieved GIT (%p)\n", *ppv);
+ return S_OK;
+ }
- if (IsEqualCLSID(rclsid, &CLSID_ManualResetEvent))
- return ManualResetEvent_Construct(pUnkOuter, iid, ppv);
+ if (IsEqualCLSID(rclsid, &CLSID_ManualResetEvent))
+ return ManualResetEvent_Construct(pUnkOuter, iid, ppv);
- /*
- * Get a class factory to construct the object we want.
- */
- hres = CoGetClassObject(rclsid,
- dwClsContext,
- NULL,
- &IID_IClassFactory,
- (LPVOID)&lpclf);
+ /*
+ * Get a class factory to construct the object we want.
+ */
+ hres = CoGetClassObject(rclsid,
+ dwClsContext,
+ NULL,
+ &IID_IClassFactory,
+ (LPVOID)&lpclf);
- if (FAILED(hres))
- return hres;
+ if (FAILED(hres))
+ return hres;
- /*
- * Create the object and don't forget to release the factory
- */
- hres = IClassFactory_CreateInstance(lpclf, pUnkOuter, iid, ppv);
- IClassFactory_Release(lpclf);
- if(FAILED(hres))
- {
- if (hres == CLASS_E_NOAGGREGATION && pUnkOuter)
- FIXME("Class %s does not support aggregation\n", debugstr_guid(rclsid));
- else
- FIXME("no instance created for interface %s of class %s, hres is 0x%08x\n", debugstr_guid(iid), debugstr_guid(rclsid),hres);
- }
+ /*
+ * Create the object and don't forget to release the factory
+ */
+ hres = IClassFactory_CreateInstance(lpclf, pUnkOuter, iid, ppv);
+ IClassFactory_Release(lpclf);
+ if (FAILED(hres))
+ {
+ if (hres == CLASS_E_NOAGGREGATION && pUnkOuter)
+ FIXME("Class %s does not support aggregation\n", debugstr_guid(rclsid));
+ else
+ FIXME("no instance created for interface %s of class %s, hres is 0x%08x\n",
+ debugstr_guid(iid),
+ debugstr_guid(rclsid),hres);
+ }
- return hres;
+ return hres;
}
/***********************************************************************
if (res == WAIT_OBJECT_0 + cHandles) /* messages available */
{
MSG msg;
+ int count = 0;
/* call message filter */
}
}
- while (COM_PeekMessage(apt, &msg))
+ /* some apps (e.g. Visio 2010) don't handle WM_PAINT properly and loop forever,
+ * so after processing 100 messages we go back to checking the wait handles */
+ while (count++ < 100 && COM_PeekMessage(apt, &msg))
{
TRACE("received message whilst waiting for RPC: 0x%04x\n", msg.message);
TranslateMessage(&msg);
******************************************************************************/
static HRESULT
EnumMonikerImpl_CreateEnumMoniker(IMoniker** tabMoniker, ULONG tabSize,
- ULONG currentPos, BOOL leftToRigth, IEnumMoniker ** ppmk)
+ ULONG currentPos, BOOL leftToRight, IEnumMoniker ** ppmk)
{
EnumMonikerImpl* newEnumMoniker;
- int i;
+ ULONG i;
if (currentPos > tabSize)
return E_INVALIDARG;
return E_OUTOFMEMORY;
}
- if (leftToRigth)
+ if (leftToRight)
for (i=0;i<tabSize;i++){
newEnumMoniker->tabMoniker[i]=tabMoniker[i];
IMoniker_AddRef(tabMoniker[i]);
}
else
- for (i=tabSize-1;i>=0;i--){
+ for (i = tabSize; i > 0; i--){
- newEnumMoniker->tabMoniker[tabSize-i-1]=tabMoniker[i];
- IMoniker_AddRef(tabMoniker[i]);
+ newEnumMoniker->tabMoniker[tabSize-i]=tabMoniker[i - 1];
+ IMoniker_AddRef(tabMoniker[i - 1]);
}
*ppmk=&newEnumMoniker->IEnumMoniker_iface;
release_delegates(This);
- hr = CoCreateInstance(&This->clsid, NULL, CLSCTX_ALL,
+ hr = CoCreateInstance(&This->clsid, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
&IID_IOleObject, (void **)&This->pOleDelegate);
if (FAILED(hr))
return hr;
strcatW( cmd, rpcss );
Wow64DisableWow64FsRedirection( &redir );
- rslt = CreateProcessW( cmd, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
+ rslt = CreateProcessW( cmd, cmd, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi );
Wow64RevertWow64FsRedirection( redir );
if (rslt)
* Destroy the shared menu descriptor
*/
HRESULT WINAPI OleDestroyMenuDescriptor(
- HOLEMENU hmenuDescriptor)
+ HOLEMENU hmenuDescriptor)
{
- if ( hmenuDescriptor )
- GlobalFree( hmenuDescriptor );
- return S_OK;
+ if ( hmenuDescriptor )
+ GlobalFree( hmenuDescriptor );
+ return S_OK;
}
/***********************************************************************
* these are non null.
*/
HRESULT WINAPI OleSetMenuDescriptor(
- HOLEMENU hOleMenu,
- HWND hwndFrame,
- HWND hwndActiveObject,
- LPOLEINPLACEFRAME lpFrame,
- LPOLEINPLACEACTIVEOBJECT lpActiveObject)
+ HOLEMENU hOleMenu,
+ HWND hwndFrame,
+ HWND hwndActiveObject,
+ LPOLEINPLACEFRAME lpFrame,
+ LPOLEINPLACEACTIVEOBJECT lpActiveObject)
{
- OleMenuDescriptor *pOleMenuDescriptor = NULL;
-
- /* Check args */
- if ( !hwndFrame || (hOleMenu && !hwndActiveObject) )
- return E_INVALIDARG;
-
- if ( lpFrame || lpActiveObject )
- {
- FIXME("(%p, %p, %p, %p, %p), Context sensitive help filtering not implemented!\n",
- hOleMenu,
- hwndFrame,
- hwndActiveObject,
- lpFrame,
- lpActiveObject);
- }
-
- /* Set up a message hook to intercept the containers frame window messages.
- * The message filter is responsible for dispatching menu messages from the
- * shared menu which are intended for the object.
- */
-
- if ( hOleMenu ) /* Want to install dispatching code */
- {
- /* If OLEMenu hooks are already installed for this thread, fail
- * Note: This effectively means that OleSetMenuDescriptor cannot
- * be called twice in succession on the same frame window
- * without first calling it with a null hOleMenu to uninstall */
- if ( OLEMenu_IsHookInstalled( GetCurrentThreadId() ) )
- return E_FAIL;
-
- /* Get the menu descriptor */
- pOleMenuDescriptor = GlobalLock( hOleMenu );
- if ( !pOleMenuDescriptor )
- return E_UNEXPECTED;
+ OleMenuDescriptor *pOleMenuDescriptor = NULL;
- /* Update the menu descriptor */
- pOleMenuDescriptor->hwndFrame = hwndFrame;
- pOleMenuDescriptor->hwndActiveObject = hwndActiveObject;
+ /* Check args */
+ if ( !hwndFrame || (hOleMenu && !hwndActiveObject) )
+ return E_INVALIDARG;
- GlobalUnlock( hOleMenu );
- pOleMenuDescriptor = NULL;
+ if ( lpFrame || lpActiveObject )
+ {
+ FIXME("(%p, %p, %p, %p, %p), Context sensitive help filtering not implemented!\n",
+ hOleMenu,
+ hwndFrame,
+ hwndActiveObject,
+ lpFrame,
+ lpActiveObject);
+ }
- /* Add a menu descriptor windows property to the frame window */
- SetPropW( hwndFrame, prop_olemenuW, hOleMenu );
+ /* Set up a message hook to intercept the containers frame window messages.
+ * The message filter is responsible for dispatching menu messages from the
+ * shared menu which are intended for the object.
+ */
- /* Install thread scope message hooks for WH_GETMESSAGE and WH_CALLWNDPROC */
- if ( !OLEMenu_InstallHooks( GetCurrentThreadId() ) )
- return E_FAIL;
- }
- else /* Want to uninstall dispatching code */
- {
- /* Uninstall the hooks */
- if ( !OLEMenu_UnInstallHooks( GetCurrentThreadId() ) )
- return E_FAIL;
+ if ( hOleMenu ) /* Want to install dispatching code */
+ {
+ /* If OLEMenu hooks are already installed for this thread, fail
+ * Note: This effectively means that OleSetMenuDescriptor cannot
+ * be called twice in succession on the same frame window
+ * without first calling it with a null hOleMenu to uninstall
+ */
+ if ( OLEMenu_IsHookInstalled( GetCurrentThreadId() ) )
+ return E_FAIL;
+
+ /* Get the menu descriptor */
+ pOleMenuDescriptor = GlobalLock( hOleMenu );
+ if ( !pOleMenuDescriptor )
+ return E_UNEXPECTED;
+
+ /* Update the menu descriptor */
+ pOleMenuDescriptor->hwndFrame = hwndFrame;
+ pOleMenuDescriptor->hwndActiveObject = hwndActiveObject;
+
+ GlobalUnlock( hOleMenu );
+ pOleMenuDescriptor = NULL;
+
+ /* Add a menu descriptor windows property to the frame window */
+ SetPropW( hwndFrame, prop_olemenuW, hOleMenu );
+
+ /* Install thread scope message hooks for WH_GETMESSAGE and WH_CALLWNDPROC */
+ if ( !OLEMenu_InstallHooks( GetCurrentThreadId() ) )
+ return E_FAIL;
+ }
+ else /* Want to uninstall dispatching code */
+ {
+ /* Uninstall the hooks */
+ if ( !OLEMenu_UnInstallHooks( GetCurrentThreadId() ) )
+ return E_FAIL;
- /* Remove the menu descriptor property from the frame window */
- RemovePropW( hwndFrame, prop_olemenuW );
- }
+ /* Remove the menu descriptor property from the frame window */
+ RemovePropW( hwndFrame, prop_olemenuW );
+ }
- return S_OK;
+ return S_OK;
}
/******************************************************************************
if (FAILED(hr))
return hr;
- hr = IMoniker_QueryInterface(pMoniker, riid, ppv);
+ hr = IMoniker_QueryInterface(pMoniker, riid, ppv);
if (FAILED(hr))
IMoniker_Release(pMoniker);
/* FIXME: Win2003 supports a ServerExecutable value that is passed into
* CreateProcess */
- if (!CreateProcessW(NULL, command, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo)) {
+ if (!CreateProcessW(NULL, command, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo)) {
WARN("failed to run local server %s\n", debugstr_w(command));
return HRESULT_FROM_WIN32(GetLastError());
}
{
CLSID clsid;
IStream *stream;
- HANDLE ready_event;
+ HANDLE pipe;
HANDLE stop_event;
HANDLE thread;
BOOL multi_use;
ULONG res;
BOOL multi_use = lsp->multi_use;
OVERLAPPED ovl;
- HANDLE pipe_event, hPipe, new_pipe;
+ HANDLE pipe_event, hPipe = lsp->pipe, new_pipe;
DWORD bytes;
TRACE("Starting threader for %s.\n",debugstr_guid(&lsp->clsid));
get_localserver_pipe_name(pipefn, &lsp->clsid);
ovl.hEvent = pipe_event = CreateEventW(NULL, FALSE, FALSE, NULL);
- hPipe = CreateNamedPipeW( pipefn, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
- PIPE_TYPE_BYTE|PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
- 4096, 4096, 500 /* 0.5 second timeout */, NULL );
- if (hPipe == INVALID_HANDLE_VALUE)
- {
- FIXME("pipe creation failed for %s, le is %u\n", debugstr_w(pipefn), GetLastError());
- CloseHandle(pipe_event);
- return 1;
- }
-
- SetEvent(lsp->ready_event);
-
while (1) {
if (!ConnectNamedPipe(hPipe, &ovl))
{
/* starts listening for a local server */
HRESULT RPC_StartLocalServer(REFCLSID clsid, IStream *stream, BOOL multi_use, void **registration)
{
- DWORD tid;
+ DWORD tid, err;
struct local_server_params *lsp;
+ WCHAR pipefn[100];
lsp = HeapAlloc(GetProcessHeap(), 0, sizeof(*lsp));
if (!lsp)
lsp->clsid = *clsid;
lsp->stream = stream;
IStream_AddRef(stream);
- lsp->ready_event = CreateEventW(NULL, FALSE, FALSE, NULL);
- if (!lsp->ready_event)
- {
- HeapFree(GetProcessHeap(), 0, lsp);
- return HRESULT_FROM_WIN32(GetLastError());
- }
lsp->stop_event = CreateEventW(NULL, FALSE, FALSE, NULL);
if (!lsp->stop_event)
{
- CloseHandle(lsp->ready_event);
HeapFree(GetProcessHeap(), 0, lsp);
return HRESULT_FROM_WIN32(GetLastError());
}
lsp->multi_use = multi_use;
+ get_localserver_pipe_name(pipefn, &lsp->clsid);
+ lsp->pipe = CreateNamedPipeW(pipefn, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
+ PIPE_TYPE_BYTE|PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
+ 4096, 4096, 500 /* 0.5 second timeout */, NULL);
+ if (lsp->pipe == INVALID_HANDLE_VALUE)
+ {
+ err = GetLastError();
+ FIXME("pipe creation failed for %s, le is %u\n", debugstr_w(pipefn), GetLastError());
+ CloseHandle(lsp->stop_event);
+ HeapFree(GetProcessHeap(), 0, lsp);
+ return HRESULT_FROM_WIN32(err);
+ }
+
lsp->thread = CreateThread(NULL, 0, local_server_thread, lsp, 0, &tid);
if (!lsp->thread)
{
- CloseHandle(lsp->ready_event);
+ CloseHandle(lsp->pipe);
CloseHandle(lsp->stop_event);
HeapFree(GetProcessHeap(), 0, lsp);
return HRESULT_FROM_WIN32(GetLastError());
}
- WaitForSingleObject(lsp->ready_event, INFINITE);
- CloseHandle(lsp->ready_event);
- lsp->ready_event = NULL;
-
*registration = lsp;
return S_OK;
}
StorageBaseImpl *This = impl_from_IStorage(iface);
BOOL skip_storage = FALSE, skip_stream = FALSE;
- int i;
+ DWORD i;
TRACE("(%p, %d, %p, %p, %p)\n",
iface, ciidExclude, rgiidExclude,
{
ULONG current_block = This->extBigBlockDepotStart;
ULONG cache_size = This->extBigBlockDepotCount * 2;
- int i;
+ ULONG i;
This->extBigBlockDepotLocations = HeapAlloc(GetProcessHeap(), 0, sizeof(ULONG) * cache_size);
if (!This->extBigBlockDepotLocations)
REFIID riid,
void **ppvObj)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObj);
+ return IMoniker_RemoteBindToStorage_Proxy(This, pbc, pmkToLeft, riid, (IUnknown**)ppvObj);
}
HRESULT __RPC_STUB IMoniker_BindToStorage_Stub(
REFIID riid,
IUnknown **ppvObj)
{
- FIXME(":stub\n");
- return E_NOTIMPL;
+ TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObj);
+ return IMoniker_BindToStorage(This, pbc, pmkToLeft, riid, (void**)ppvObj);
}
HRESULT CALLBACK IEnumString_Next_Proxy(
#ifndef _CONNPT_H
#define _CONNPT_H
- HRESULT CreateConnectionPoint(IUnknown *pUnk, REFIID riid, IConnectionPoint **pCP);
+ HRESULT CreateConnectionPoint(IUnknown *pUnk, REFIID riid, IConnectionPoint **pCP) DECLSPEC_HIDDEN;
#endif /* _CONNPT_H */
} u;
} bstr_t;
+ #define BUCKET_SIZE 16
+ #define BUCKET_BUFFER_SIZE 6
+
typedef struct {
unsigned short head;
unsigned short cnt;
- bstr_t *buf[6];
+ bstr_t *buf[BUCKET_BUFFER_SIZE];
} bstr_cache_entry_t;
- #define BUCKET_SIZE 16
-
#define ARENA_INUSE_FILLER 0x55
#define ARENA_TAIL_FILLER 0xab
#define ARENA_FREE_FILLER 0xfeeefeee
if(cache_entry) {
ret = cache_entry->buf[cache_entry->head++];
- cache_entry->head %= sizeof(cache_entry->buf)/sizeof(*cache_entry->buf);
+ cache_entry->head %= BUCKET_BUFFER_SIZE;
cache_entry->cnt--;
}
bstr = bstr_from_str(str);
cache_entry = get_cache_entry(bstr->size+sizeof(WCHAR));
if(cache_entry) {
+ unsigned i;
+
EnterCriticalSection(&cs_bstr_cache);
+ /* According to tests, freeing a string that's already in cache doesn't corrupt anything.
+ * For that to work we need to search the cache. */
+ for(i=0; i < cache_entry->cnt; i++) {
+ if(cache_entry->buf[(cache_entry->head+i) % BUCKET_BUFFER_SIZE] == bstr) {
+ WARN_(heap)("String already is in cache!\n");
+ LeaveCriticalSection(&cs_bstr_cache);
+ return;
+ }
+ }
+
if(cache_entry->cnt < sizeof(cache_entry->buf)/sizeof(*cache_entry->buf)) {
- cache_entry->buf[(cache_entry->head+cache_entry->cnt)%((sizeof(cache_entry->buf)/sizeof(*cache_entry->buf)))] = bstr;
+ cache_entry->buf[(cache_entry->head+cache_entry->cnt) % BUCKET_BUFFER_SIZE] = bstr;
cache_entry->cnt++;
if(WARN_ON(heap)) {
- unsigned i, n = bstr_alloc_size(bstr->size) / sizeof(DWORD) - 1;
+ unsigned n = bstr_alloc_size(bstr->size) / sizeof(DWORD) - 1;
bstr->size = ARENA_FREE_FILLER;
for(i=0; i<n; i++)
bstr->u.dwptr[i] = ARENA_FREE_FILLER;
} while (!headerisdata);
if (statfailed) { /* we don't know the size ... read all we get */
- int sizeinc = 4096;
- int origsize = sizeinc;
+ unsigned int sizeinc = 4096;
+ unsigned int origsize = sizeinc;
ULONG nread = 42;
TRACE("Reading all data from stream.\n");
return E_NOTIMPL;
}
- IPropertyPageSiteVtbl PropertyPageSiteVtbl = {
+ static IPropertyPageSiteVtbl PropertyPageSiteVtbl = {
PropertyPageSite_QueryInterface,
PropertyPageSite_AddRef,
PropertyPageSite_Release,
IPropertyPage **property_page;
PropertyPageSite *property_page_site;
HRESULT res;
- int i;
+ ULONG i;
HMODULE hcomctl;
HRSRC property_sheet_dialog_find = NULL;
HGLOBAL property_sheet_dialog_load = NULL;
ret->name = NULL;
}
- ret->fields = HeapAlloc(GetProcessHeap(), 0, ret->n_vars*sizeof(VARDESC));
+ ret->fields = HeapAlloc(GetProcessHeap(), 0, ret->n_vars*sizeof(fieldstr));
for(i = 0; i<ret->n_vars; i++) {
VARDESC *vardesc;
hres = ITypeInfo_GetVarDesc(pTypeInfo, i, &vardesc);
DWORD xsize;
TRACE("...%s...\n",debugstr_guid(riid));
-
+
*pUnk = NULL;
hres = xbuf_get(buf,(LPBYTE)&xsize,sizeof(xsize));
if (hres) {
ERR("xbuf_get failed\n");
return hres;
}
-
+
if (xsize == 0) return S_OK;
-
+
hres = CreateStreamOnHGlobal(0,TRUE,&pStm);
if (hres) {
ERR("Stream create failed %x\n",hres);
return hres;
}
-
+
hres = IStream_Write(pStm,buf->base+buf->curoff,xsize,&res);
if (hres) {
ERR("stream write %x\n",hres);
IStream_Release(pStm);
return hres;
}
-
+
memset(&seekto,0,sizeof(seekto));
hres = IStream_Seek(pStm,seekto,SEEK_SET,&newpos);
if (hres) {
IStream_Release(pStm);
return hres;
}
-
+
hres = CoUnmarshalInterface(pStm,riid,(LPVOID*)pUnk);
if (hres) {
ERR("Unmarshalling interface %s failed with %x\n",debugstr_guid(riid),hres);
IStream_Release(pStm);
return hres;
}
-
+
IStream_Release(pStm);
return xbuf_skip(buf,xsize);
}
hres = E_FAIL;
TRACE("...%s...\n",debugstr_guid(riid));
-
+
hres = CreateStreamOnHGlobal(0,TRUE,&pStm);
if (hres) {
ERR("Stream create failed %x\n",hres);
goto fail;
}
-
+
hres = CoMarshalInterface(pStm,riid,pUnk,0,NULL,0);
if (hres) {
ERR("Marshalling interface %s failed with %x\n", debugstr_guid(riid), hres);
goto fail;
}
-
+
hres = IStream_Stat(pStm,&ststg,STATFLAG_NONAME);
if (hres) {
ERR("Stream stat failed\n");
goto fail;
}
-
+
tempbuf = HeapAlloc(GetProcessHeap(), 0, ststg.cbSize.u.LowPart);
memset(&seekto,0,sizeof(seekto));
hres = IStream_Seek(pStm,seekto,SEEK_SET,&newpos);
ERR("Failed Seek %x\n",hres);
goto fail;
}
-
+
hres = IStream_Read(pStm,tempbuf,ststg.cbSize.u.LowPart,&res);
if (hres) {
ERR("Failed Read %x\n",hres);
goto fail;
}
-
+
xsize = ststg.cbSize.u.LowPart;
xbuf_add(buf,(LPBYTE)&xsize,sizeof(xsize));
hres = xbuf_add(buf,tempbuf,ststg.cbSize.u.LowPart);
-
+
HeapFree(GetProcessHeap(),0,tempbuf);
IStream_Release(pStm);
-
+
return hres;
-
+
fail:
xsize = 0;
xbuf_add(buf,(LPBYTE)&xsize,sizeof(xsize));
#include "pshpack1.h"
typedef struct _TMAsmProxy {
- BYTE popleax;
+ DWORD lealeax;
+ BYTE pushleax;
BYTE pushlval;
DWORD nr;
- BYTE pushleax;
BYTE lcall;
DWORD xcall;
BYTE lret;
WORD bytestopop;
- BYTE nop;
+ WORD nop;
} TMAsmProxy;
#include "poppack.h"
);
return S_OK;
}
- case VT_SAFEARRAY: {
+ case VT_SAFEARRAY: {
if (readit)
{
ULONG flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
return (elem->u.paramdesc.wParamFlags & PARAMFLAG_FOUT || !elem->u.paramdesc.wParamFlags);
}
- static DWORD
- xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */)
+ static DWORD WINAPI xCall(int method, void **args)
{
- DWORD *args = ((DWORD*)&tpinfo)+1, *xargs;
+ TMProxyImpl *tpinfo = args[0];
+ DWORD *xargs;
const FUNCDESC *fdesc;
HRESULT hres;
- int i, relaydeb = TRACE_ON(olerelay);
+ int i;
marshal_state buf;
RPCOLEMESSAGE msg;
ULONG status;
LeaveCriticalSection(&tpinfo->crit);
- if (relaydeb) {
+ if (TRACE_ON(olerelay)) {
TRACE_(olerelay)("->");
if (iname)
TRACE_(olerelay)("%s:",relaystr(iname));
if (nrofnames > sizeof(names)/sizeof(names[0]))
ERR("Need more names!\n");
- xargs = args;
+ xargs = (DWORD *)(args + 1);
for (i=0;i<fdesc->cParams;i++) {
ELEMDESC *elem = fdesc->lprgelemdescParam+i;
- if (relaydeb) {
+ if (TRACE_ON(olerelay)) {
if (i) TRACE_(olerelay)(",");
if (i+1<nrofnames && names[i+1])
TRACE_(olerelay)("%s=",relaystr(names[i+1]));
if (elem->tdesc.vt != VT_PTR)
{
xargs+=_argsize(&elem->tdesc, tinfo);
- if (relaydeb) TRACE_(olerelay)("[out]");
+ TRACE_(olerelay)("[out]");
continue;
}
else
hres = serialize_param(
tinfo,
is_in_elem(elem),
- relaydeb,
+ TRACE_ON(olerelay),
FALSE,
&elem->tdesc,
xargs,
}
xargs+=_argsize(&elem->tdesc, tinfo);
}
- if (relaydeb) TRACE_(olerelay)(")");
+ TRACE_(olerelay)(")");
memset(&msg,0,sizeof(msg));
msg.cbBuffer = buf.curoff;
goto exit;
}
memcpy(msg.Buffer,buf.base,buf.curoff);
- if (relaydeb) TRACE_(olerelay)("\n");
+ TRACE_(olerelay)("\n");
hres = IRpcChannelBuffer_SendReceive(chanbuf,&msg,&status);
if (hres) {
ERR("RpcChannelBuffer SendReceive failed, %x\n",hres);
goto exit;
}
- if (relaydeb) TRACE_(olerelay)(" status = %08x (",status);
+ TRACE_(olerelay)(" status = %08x (",status);
if (buf.base)
buf.base = HeapReAlloc(GetProcessHeap(),0,buf.base,msg.cbBuffer);
else
buf.curoff = 0;
/* generic deserializer using typelib description */
- xargs = args;
+ xargs = (DWORD *)(args + 1);
status = S_OK;
for (i=0;i<fdesc->cParams;i++) {
ELEMDESC *elem = fdesc->lprgelemdescParam+i;
- if (relaydeb) {
- if (i) TRACE_(olerelay)(",");
- if (i+1<nrofnames && names[i+1]) TRACE_(olerelay)("%s=",relaystr(names[i+1]));
- }
+ if (i) TRACE_(olerelay)(",");
+ if (i+1<nrofnames && names[i+1]) TRACE_(olerelay)("%s=",relaystr(names[i+1]));
+
/* No need to marshal other data than FOUT and any VT_PTR */
if (!is_out_elem(elem) && (elem->tdesc.vt != VT_PTR)) {
xargs += _argsize(&elem->tdesc, tinfo);
- if (relaydeb) TRACE_(olerelay)("[in]");
+ TRACE_(olerelay)("[in]");
continue;
}
hres = deserialize_param(
tinfo,
is_out_elem(elem),
- relaydeb,
+ TRACE_ON(olerelay),
FALSE,
&(elem->tdesc),
xargs,
hres = xbuf_get(&buf, (LPBYTE)&remoteresult, sizeof(DWORD));
if (hres != S_OK)
goto exit;
- if (relaydeb) TRACE_(olerelay)(") = %08x\n", remoteresult);
+ TRACE_(olerelay)(") = %08x\n", remoteresult);
hres = remoteresult;
if (ref)
return ref;
- IRpcChannelBuffer_Release(This->pDelegateChannel);
+ IRpcChannelBuffer_Release(This->pDelegateChannel);
HeapFree(GetProcessHeap(), 0, This);
return 0;
}
static HRESULT init_proxy_entry_point(TMProxyImpl *proxy, unsigned int num)
{
int j;
- /* nrofargs without This */
- int nrofargs;
+ /* nrofargs including This */
+ int nrofargs = 1;
ITypeInfo *tinfo2;
TMAsmProxy *xasm = proxy->asmstubs + num;
HRESULT hres;
}
ITypeInfo_Release(tinfo2);
/* some args take more than 4 byte on the stack */
- nrofargs = 0;
for (j=0;j<fdesc->cParams;j++)
nrofargs += _argsize(&fdesc->lprgelemdescParam[j].tdesc, proxy->tinfo);
ERR("calling convention is not stdcall????\n");
return E_FAIL;
}
- /* popl %eax - return ptr
- * pushl <nr>
+ /* leal 4(%esp),%eax
* pushl %eax
+ * pushl <nr>
* call xCall
- * lret <nr> (+4)
- *
- *
- * arg3 arg2 arg1 <method> <returnptr>
+ * lret <nr>
*/
- xasm->popleax = 0x58;
+ xasm->lealeax = 0x0424448d;
+ xasm->pushleax = 0x50;
xasm->pushlval = 0x68;
xasm->nr = num;
- xasm->pushleax = 0x50;
- xasm->lcall = 0xe8; /* relative jump */
- xasm->xcall = (DWORD)xCall;
- xasm->xcall -= (DWORD)&(xasm->lret);
+ xasm->lcall = 0xe8;
+ xasm->xcall = (char *)xCall - (char *)&xasm->lret;
xasm->lret = 0xc2;
- xasm->bytestopop = (nrofargs+2)*4; /* pop args, This, iMethod */
- xasm->nop = 0x90;
+ xasm->bytestopop = nrofargs * 4;
+ xasm->nop = 0x9090;
proxy->lpvtbl[fdesc->oVft / sizeof(void *)] = xasm;
#else
FIXME("not implemented on non i386\n");
proxy = CoTaskMemAlloc(sizeof(TMProxyImpl));
if (!proxy) return E_OUTOFMEMORY;
- assert(sizeof(TMAsmProxy) == 16);
-
proxy->dispatch = NULL;
proxy->dispatch_proxy = NULL;
proxy->outerunknown = pUnkOuter;
proxy->lpvtbl[i] = ProxyIUnknown_Release;
break;
case 3:
- if(!defer_to_dispatch)
- {
- hres = init_proxy_entry_point(proxy, i);
- if(FAILED(hres)) return hres;
- }
+ if(!defer_to_dispatch) hres = init_proxy_entry_point(proxy, i);
else proxy->lpvtbl[3] = ProxyIDispatch_GetTypeInfoCount;
break;
case 4:
- if(!defer_to_dispatch)
- {
- hres = init_proxy_entry_point(proxy, i);
- if(FAILED(hres)) return hres;
- }
+ if(!defer_to_dispatch) hres = init_proxy_entry_point(proxy, i);
else proxy->lpvtbl[4] = ProxyIDispatch_GetTypeInfo;
break;
case 5:
- if(!defer_to_dispatch)
- {
- hres = init_proxy_entry_point(proxy, i);
- if(FAILED(hres)) return hres;
- }
+ if(!defer_to_dispatch) hres = init_proxy_entry_point(proxy, i);
else proxy->lpvtbl[5] = ProxyIDispatch_GetIDsOfNames;
break;
case 6:
- if(!defer_to_dispatch)
- {
- hres = init_proxy_entry_point(proxy, i);
- if(FAILED(hres)) return hres;
- }
+ if(!defer_to_dispatch) hres = init_proxy_entry_point(proxy, i);
else proxy->lpvtbl[6] = ProxyIDispatch_Invoke;
break;
default:
hres = init_proxy_entry_point(proxy, i);
- if(FAILED(hres)) return hres;
}
}
/* internal ITypeLib data */
typedef struct tagITypeLibImpl
{
- const ITypeLib2Vtbl *lpVtbl;
+ ITypeLib2 ITypeLib2_iface;
const ITypeCompVtbl *lpVtblTypeComp;
LONG ref;
TLIBATTR LibAttr; /* guid,lcid,syskind,version,flags */
return S_OK;
}
}
-
- hr = E_FAIL;
}
+
+ TRACE("No TYPELIB resource found\n");
+ hr = E_FAIL;
}
TLB_PEFile_Release((IUnknown *)&This->lpvtbl);
if (!strcmpiW(entry->path, pszPath) && entry->index == index)
{
TRACE("cache hit\n");
- *ppTypeLib = (ITypeLib2*)entry;
+ *ppTypeLib = &entry->ITypeLib2_iface;
ITypeLib2_AddRef(*ppTypeLib);
LeaveCriticalSection(&cache_section);
return S_OK;
ret = TYPE_E_CANTLOADLIBRARY;
IUnknown_Release(pFile);
}
- else
- ret = TYPE_E_CANTLOADLIBRARY;
if(*ppTypeLib) {
ITypeLibImpl *impl = (ITypeLibImpl*)*ppTypeLib;
list_add_head(&tlb_cache, &impl->entry);
LeaveCriticalSection(&cache_section);
ret = S_OK;
- } else
- ERR("Loading of typelib %s failed with error %d\n", debugstr_w(pszFileName), GetLastError());
+ }
+ else
+ {
+ if(ret != E_FAIL)
+ ERR("Loading of typelib %s failed with error %d\n", debugstr_w(pszFileName), GetLastError());
+
+ ret = TYPE_E_CANTLOADLIBRARY;
+ }
+
return ret;
}
pTypeLibImpl = heap_alloc_zero(sizeof(ITypeLibImpl));
if (!pTypeLibImpl) return NULL;
- pTypeLibImpl->lpVtbl = &tlbvt;
+ pTypeLibImpl->ITypeLib2_iface.lpVtbl = &tlbvt;
pTypeLibImpl->lpVtblTypeComp = &tlbtcvt;
pTypeLibImpl->ref = 1;
}
TRACE("(%p)\n", pTypeLibImpl);
- return (ITypeLib2*) pTypeLibImpl;
+ return &pTypeLibImpl->ITypeLib2_iface;
}
}
heap_free(pOtherTypeInfoBlks);
- return (ITypeLib2*)pTypeLibImpl;
+ return &pTypeLibImpl->ITypeLib2_iface;
}
- /* ITypeLib::QueryInterface
- */
- static HRESULT WINAPI ITypeLib2_fnQueryInterface(
- ITypeLib2 * iface,
- REFIID riid,
- VOID **ppvObject)
+ static inline ITypeLibImpl *impl_from_ITypeLib2(ITypeLib2 *iface)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ return CONTAINING_RECORD(iface, ITypeLibImpl, ITypeLib2_iface);
+ }
+
+ static HRESULT WINAPI ITypeLib2_fnQueryInterface(ITypeLib2 *iface, REFIID riid, void **ppv)
+ {
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
TRACE("(%p)->(IID: %s)\n",This,debugstr_guid(riid));
- *ppvObject=NULL;
if(IsEqualIID(riid, &IID_IUnknown) ||
IsEqualIID(riid,&IID_ITypeLib)||
IsEqualIID(riid,&IID_ITypeLib2))
{
- *ppvObject = This;
+ *ppv = &This->ITypeLib2_iface;
}
-
- if(*ppvObject)
+ else
{
- ITypeLib2_AddRef(iface);
- TRACE("-- Interface: (%p)->(%p)\n",ppvObject,*ppvObject);
- return S_OK;
+ *ppv = NULL;
+ TRACE("-- Interface: E_NOINTERFACE\n");
+ return E_NOINTERFACE;
}
- TRACE("-- Interface: E_NOINTERFACE\n");
- return E_NOINTERFACE;
+
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
}
- /* ITypeLib::AddRef
- */
static ULONG WINAPI ITypeLib2_fnAddRef( ITypeLib2 *iface)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
ULONG ref = InterlockedIncrement(&This->ref);
- TRACE("(%p)->ref was %u\n",This, ref - 1);
+ TRACE("(%p) ref=%u\n", This, ref);
return ref;
}
- /* ITypeLib::Release
- */
static ULONG WINAPI ITypeLib2_fnRelease( ITypeLib2 *iface)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
ULONG ref = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(%u)\n",This, ref);
+ TRACE("(%p) ref=%u\n",This, ref);
if (!ref)
{
LIST_FOR_EACH_ENTRY_SAFE(pImpLib, pImpLibNext, &This->implib_list, TLBImpLib, entry)
{
if (pImpLib->pImpTypeLib)
- ITypeLib_Release((ITypeLib *)pImpLib->pImpTypeLib);
+ ITypeLib2_Release(&pImpLib->pImpTypeLib->ITypeLib2_iface);
SysFreeString(pImpLib->name);
list_remove(&pImpLib->entry);
*/
static UINT WINAPI ITypeLib2_fnGetTypeInfoCount( ITypeLib2 *iface)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
TRACE("(%p)->count is %d\n",This, This->TypeInfoCount);
return This->TypeInfoCount;
}
UINT index,
ITypeInfo **ppTInfo)
{
- ITypeLibImpl *This = (ITypeLibImpl*)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
TRACE("%p %u %p\n", This, index, ppTInfo);
UINT index,
TYPEKIND *pTKind)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
TRACE("(%p, %d, %p)\n", This, index, pTKind);
REFGUID guid,
ITypeInfo **ppTInfo)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
- UINT i;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
+ int i;
TRACE("%p %s %p\n", This, debugstr_guid(guid), ppTInfo);
ITypeLib2 *iface,
LPTLIBATTR *attr)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
TRACE("(%p, %p)\n", This, attr);
ITypeLib2 *iface,
ITypeComp **ppTComp)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
TRACE("(%p)->(%p)\n",This,ppTComp);
*ppTComp = (ITypeComp *)&This->lpVtblTypeComp;
DWORD *pdwHelpContext,
BSTR *pBstrHelpFile)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
-
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
HRESULT result = E_INVALIDARG;
-
ITypeInfo *pTInfo;
-
TRACE("(%p) index %d Name(%p) DocString(%p) HelpContext(%p) HelpFile(%p)\n",
This, index,
pBstrName, pBstrDocString,
ULONG lHashVal,
BOOL *pfName)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
- UINT nNameBufLen = (lstrlenW(szNameBuf)+1)*sizeof(WCHAR), tic, fdc, vrc, pc;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
+ int tic;
+ UINT nNameBufLen = (lstrlenW(szNameBuf)+1)*sizeof(WCHAR), fdc, vrc;
TRACE("(%p)->(%s,%08x,%p)\n", This, debugstr_w(szNameBuf), lHashVal,
pfName);
if(!memcmp(szNameBuf,pTInfo->Name, nNameBufLen)) goto ITypeLib2_fnIsName_exit;
for(fdc = 0; fdc < pTInfo->TypeAttr.cFuncs; ++fdc) {
TLBFuncDesc *pFInfo = &pTInfo->funcdescs[fdc];
+ int pc;
+
if(!memcmp(szNameBuf,pFInfo->Name, nNameBufLen)) goto ITypeLib2_fnIsName_exit;
for(pc=0; pc < pFInfo->funcdesc.cParams; pc++)
if(!memcmp(szNameBuf,pFInfo->pParamDesc[pc].Name, nNameBufLen))
MEMBERID *memid,
UINT16 *found)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
- UINT tic, count = 0;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
+ int tic;
+ UINT count = 0;
UINT len;
TRACE("(%p)->(%s %u %p %p %p)\n", This, debugstr_w(name), hash, ppTInfo, memid, found);
if(!memcmp(name, pTInfo->Name, len)) goto ITypeLib2_fnFindName_exit;
for(fdc = 0; fdc < pTInfo->TypeAttr.cFuncs; ++fdc) {
TLBFuncDesc *func = &pTInfo->funcdescs[fdc];
- UINT pc;
+ int pc;
if(!memcmp(name, func->Name, len)) goto ITypeLib2_fnFindName_exit;
for(pc = 0; pc < func->funcdesc.cParams; pc++) {
ITypeLib2 *iface,
TLIBATTR *pTLibAttr)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
- TRACE("freeing (%p)\n",This);
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
+ TRACE("(%p)->(%p)\n", This, pTLibAttr);
heap_free(pTLibAttr);
-
}
/* ITypeLib2::GetCustData
REFGUID guid,
VARIANT *pVarVal)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
TLBCustData *pCData;
- TRACE("%p %s %p\n", This, debugstr_guid(guid), pVarVal);
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(guid), pVarVal);
pCData = TLB_get_custdata_by_guid(&This->custdata_list, guid);
if(!pCData)
ULONG *pcUniqueNames,
ULONG *pcchUniqueNames)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
FIXME("(%p): stub!\n", This);
DWORD *pdwHelpStringContext,
BSTR *pbstrHelpStringDll)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
HRESULT result;
ITypeInfo *pTInfo;
ITypeLib2 * iface,
CUSTDATA *pCustData)
{
- ITypeLibImpl *This = (ITypeLibImpl *)iface;
- TRACE("%p %p\n", iface, pCustData);
+ ITypeLibImpl *This = impl_from_ITypeLib2(iface);
+ TRACE("(%p)->(%p)\n", This, pCustData);
return TLB_copy_all_custdata(&This->custdata_list, pCustData);
}
{
ITypeLibImpl *This = impl_from_ITypeComp(iface);
- return ITypeLib2_QueryInterface((ITypeLib2 *)This, riid, ppv);
+ return ITypeLib2_QueryInterface(&This->ITypeLib2_iface, riid, ppv);
}
static ULONG WINAPI ITypeLibComp_fnAddRef(ITypeComp * iface)
{
ITypeLibImpl *This = impl_from_ITypeComp(iface);
- return ITypeLib2_AddRef((ITypeLib2 *)This);
+ return ITypeLib2_AddRef(&This->ITypeLib2_iface);
}
static ULONG WINAPI ITypeLibComp_fnRelease(ITypeComp * iface)
{
ITypeLibImpl *This = impl_from_ITypeComp(iface);
- return ITypeLib2_Release((ITypeLib2 *)This);
+ return ITypeLib2_Release(&This->ITypeLib2_iface);
}
static HRESULT WINAPI ITypeLibComp_fnBind(
ITypeComp ** ppTComp)
{
ITypeLibImpl *This = impl_from_ITypeComp(iface);
- UINT i;
+ int i;
TRACE("(%s, %x, %p, %p)\n", debugstr_w(szName), lHash, ppTInfo, ppTComp);
TRACE("(%p)->ref is %u\n",This, ref);
if (ref == 1 /* incremented from 0 */)
- ITypeLib2_AddRef((ITypeLib2*)This->pTypeLib);
+ ITypeLib2_AddRef(&This->pTypeLib->ITypeLib2_iface);
return ref;
}
static void ITypeInfoImpl_Destroy(ITypeInfoImpl *This)
{
- UINT i, j;
+ UINT i;
TRACE("destroying ITypeInfo(%p)\n",This);
for (i = 0; i < This->TypeAttr.cFuncs; ++i)
{
+ int j;
TLBFuncDesc *pFInfo = &This->funcdescs[i];
for(j = 0; j < pFInfo->funcdesc.cParams; j++)
{
if (!ref)
{
BOOL not_attached_to_typelib = This->not_attached_to_typelib;
- ITypeLib2_Release((ITypeLib2*)This->pTypeLib);
+ ITypeLib2_Release(&This->pTypeLib->ITypeLib2_iface);
if (not_attached_to_typelib)
heap_free(This);
/* otherwise This will be freed when typelib is freed */
case VT_CY:
V_UI8(pvargResult) = call_method( func, argspos - 1, args + 1, &stack_offset );
break;
+ case VT_HRESULT:
+ WARN("invalid return type %u\n", vtReturn);
+ heap_free( args );
+ return E_INVALIDARG;
default:
V_UI4(pvargResult) = call_method( func, argspos - 1, args + 1, &stack_offset );
break;
args[0] = (DWORD_PTR)pvargResult; /* arg 0 is a pointer to the result */
call_method( func, argspos, args );
break;
+ case VT_HRESULT:
+ WARN("invalid return type %u\n", vtReturn);
+ heap_free( args );
+ return E_INVALIDARG;
default:
V_UI8(pvargResult) = call_method( func, argspos - 1, args + 1 );
break;
} else {
if(ref_type->pImpTLInfo->pImpTypeLib) {
TRACE("typeinfo in imported typelib that is already loaded\n");
- pTLib = (ITypeLib*)ref_type->pImpTLInfo->pImpTypeLib;
+ pTLib = (ITypeLib*)&ref_type->pImpTLInfo->pImpTypeLib->ITypeLib2_iface;
ITypeLib_AddRef(pTLib);
result = S_OK;
} else {
*pptinfo = (ITypeInfo*)pTIClass;
ITypeInfo_AddRef(*pptinfo);
- ITypeLib_Release((ITypeLib *)&pTypeLibImpl->lpVtbl);
+ ITypeLib2_Release(&pTypeLibImpl->ITypeLib2_iface);
return S_OK;
#include "poppack.h"
/* heap allocation helpers */
- extern void* heap_alloc_zero(unsigned size);
- extern void* heap_alloc(unsigned size);
- extern void* heap_realloc(void *ptr, unsigned size);
- extern void heap_free(void *ptr);
+ extern void* heap_alloc_zero(unsigned size) DECLSPEC_HIDDEN __WINE_ALLOC_SIZE(1);
+ extern void* heap_alloc(unsigned size) DECLSPEC_HIDDEN __WINE_ALLOC_SIZE(1);
+ extern void* heap_realloc(void *ptr, unsigned size) DECLSPEC_HIDDEN;
+ extern void heap_free(void *ptr) DECLSPEC_HIDDEN;
- HRESULT ITypeInfoImpl_GetInternalFuncDesc( ITypeInfo *iface, UINT index, const FUNCDESC **ppFuncDesc );
+ HRESULT ITypeInfoImpl_GetInternalFuncDesc( ITypeInfo *iface, UINT index, const FUNCDESC **ppFuncDesc ) DECLSPEC_HIDDEN;
- extern DWORD _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args);
+ extern DWORD _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) DECLSPEC_HIDDEN;
- HRESULT TMARSHAL_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv);
+ HRESULT TMARSHAL_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) DECLSPEC_HIDDEN;
/* The OLE Automation ProxyStub Interface Class (aka Typelib Marshaler) */
DEFINE_OLEGUID( CLSID_PSDispatch, 0x00020420, 0x0000, 0x0000 );
if(This->dual)
This->dual->typedata = This->typedata;
} else {
+ unsigned int j;
+
iter = This->typedata->next;
- for(i=0; i<index; i++)
+ for (j = 0; j < index; j++)
iter = iter->next;
insert->next = iter->next;
WCHAR fmt_buff[80];
if (!GetLocaleInfoW(lcid, dwFmt, fmt_buff, sizeof(fmt_buff)/sizeof(WCHAR)) ||
- !GetDateFormatW(lcid, 0, &udate.st, fmt_buff, pBuff,
+ !get_date_format(lcid, 0, &udate.st, fmt_buff, pBuff,
sizeof(buff)/sizeof(WCHAR)-(pBuff-buff)))
{
hRes = E_INVALIDARG;
LOCALE_USER_DEFAULT, 0, &d)))
hres = VariantChangeType(&varLeft,&varLeft,
VARIANT_LOCALBOOL, VT_BOOL);
- if (SUCCEEDED(hres) && V_VT(&varLeft) != resvt)
- hres = VariantChangeType(&varLeft,&varLeft,0,resvt);
- if (FAILED(hres)) goto VarAnd_Exit;
+ if (SUCCEEDED(hres) && V_VT(&varLeft) != resvt)
+ hres = VariantChangeType(&varLeft,&varLeft,0,resvt);
+ if (FAILED(hres)) goto VarAnd_Exit;
}
if (resvt == VT_I4 && V_VT(&varRight) == VT_UI4)
#define VTBIT_VARIANT (1 << VT_VARIANT)
#define VTBIT_15 (1 << 15) /* no variant type with this number */
- extern const char * const wine_vtypes[];
+ extern const char * const wine_vtypes[] DECLSPEC_HIDDEN;
#define debugstr_vt(v) (((v)&VT_TYPEMASK) <= VT_CLSID ? wine_vtypes[((v)&VT_TYPEMASK)] : \
((v)&VT_TYPEMASK) == VT_BSTR_BLOB ? "VT_BSTR_BLOB": "Invalid")
#define debugstr_VT(v) (!(v) ? "(null)" : debugstr_vt(V_TYPE((v))))
- extern const char * const wine_vflags[];
+ extern const char * const wine_vflags[] DECLSPEC_HIDDEN;
#define debugstr_vf(v) (wine_vflags[((v)&VT_EXTRA_TYPE)>>12])
#define debugstr_VF(v) (!(v) ? "(null)" : debugstr_vf(V_EXTRA_TYPE(v)))
} VARIANT_NUMBER_CHARS;
- BOOL VARIANT_GetLocalisedText(LANGID, DWORD, WCHAR *);
- HRESULT VARIANT_ClearInd(VARIANTARG *);
+ BOOL VARIANT_GetLocalisedText(LANGID, DWORD, WCHAR *) DECLSPEC_HIDDEN;
+ HRESULT VARIANT_ClearInd(VARIANTARG *) DECLSPEC_HIDDEN;
+ BOOL get_date_format(LCID, DWORD, const SYSTEMTIME *,
+ const WCHAR *, WCHAR *, int) DECLSPEC_HIDDEN;
return *pbstrOut ? S_OK : E_OUTOFMEMORY;
}
+ static inline int output_int_len(int o, int min_len, WCHAR *date, int date_len)
+ {
+ int len, tmp;
+
+ if(min_len >= date_len)
+ return -1;
+
+ for(len=0, tmp=o; tmp; tmp/=10) len++;
+ if(!len) len++;
+ if(len >= date_len)
+ return -1;
+
+ for(tmp=min_len-len; tmp>0; tmp--)
+ *date++ = '0';
+ for(tmp=len; tmp>0; tmp--, o/=10)
+ date[tmp-1] = '0' + o%10;
+ return min_len>len ? min_len : len;
+ }
+
+ /* format date string, similar to GetDateFormatW function but works on bigger range of dates */
+ BOOL get_date_format(LCID lcid, DWORD flags, const SYSTEMTIME *st,
+ const WCHAR *fmt, WCHAR *date, int date_len)
+ {
+ static const LCTYPE dayname[] = {
+ LOCALE_SDAYNAME7, LOCALE_SDAYNAME1, LOCALE_SDAYNAME2, LOCALE_SDAYNAME3,
+ LOCALE_SDAYNAME4, LOCALE_SDAYNAME5, LOCALE_SDAYNAME6
+ };
+ static const LCTYPE sdayname[] = {
+ LOCALE_SABBREVDAYNAME7, LOCALE_SABBREVDAYNAME1, LOCALE_SABBREVDAYNAME2,
+ LOCALE_SABBREVDAYNAME3, LOCALE_SABBREVDAYNAME4, LOCALE_SABBREVDAYNAME5,
+ LOCALE_SABBREVDAYNAME6
+ };
+ static const LCTYPE monthname[] = {
+ LOCALE_SMONTHNAME1, LOCALE_SMONTHNAME2, LOCALE_SMONTHNAME3, LOCALE_SMONTHNAME4,
+ LOCALE_SMONTHNAME5, LOCALE_SMONTHNAME6, LOCALE_SMONTHNAME7, LOCALE_SMONTHNAME8,
+ LOCALE_SMONTHNAME9, LOCALE_SMONTHNAME10, LOCALE_SMONTHNAME11, LOCALE_SMONTHNAME12
+ };
+ static const LCTYPE smonthname[] = {
+ LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2, LOCALE_SABBREVMONTHNAME3,
+ LOCALE_SABBREVMONTHNAME4, LOCALE_SABBREVMONTHNAME5, LOCALE_SABBREVMONTHNAME6,
+ LOCALE_SABBREVMONTHNAME7, LOCALE_SABBREVMONTHNAME8, LOCALE_SABBREVMONTHNAME9,
+ LOCALE_SABBREVMONTHNAME10, LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12
+ };
+
+ if(flags & ~(LOCALE_NOUSEROVERRIDE|VAR_DATEVALUEONLY))
+ FIXME("ignoring flags %x\n", flags);
+ flags &= LOCALE_NOUSEROVERRIDE;
+
+ while(*fmt && date_len) {
+ int count = 1;
+
+ switch(*fmt) {
+ case 'd':
+ case 'M':
+ case 'y':
+ case 'g':
+ while(*fmt == *(fmt+count))
+ count++;
+ fmt += count-1;
+ }
+
+ switch(*fmt) {
+ case 'd':
+ if(count >= 4)
+ count = GetLocaleInfoW(lcid, dayname[st->wDayOfWeek] | flags, date, date_len)-1;
+ else if(count == 3)
+ count = GetLocaleInfoW(lcid, sdayname[st->wDayOfWeek] | flags, date, date_len)-1;
+ else
+ count = output_int_len(st->wDay, count, date, date_len);
+ break;
+ case 'M':
+ if(count >= 4)
+ count = GetLocaleInfoW(lcid, monthname[st->wMonth-1] | flags, date, date_len)-1;
+ else if(count == 3)
+ count = GetLocaleInfoW(lcid, smonthname[st->wMonth-1] | flags, date, date_len)-1;
+ else
+ count = output_int_len(st->wMonth, count, date, date_len);
+ break;
+ case 'y':
+ if(count >= 3)
+ count = output_int_len(st->wYear, 0, date, date_len);
+ else
+ count = output_int_len(st->wYear%100, count, date, date_len);
+ break;
+ case 'g':
+ if(count == 2) {
+ FIXME("Should be using GetCalendarInfo(CAL_SERASTRING), defaulting to 'AD'\n");
+
+ *date++ = 'A';
+ date_len--;
+ if(date_len)
+ *date = 'D';
+ else
+ count = -1;
+ break;
+ }
+ /* fall through */
+ default:
+ *date = *fmt;
+ }
+
+ if(count < 0)
+ break;
+ fmt++;
+ date += count;
+ date_len -= count;
+ }
+
+ if(!date_len)
+ return FALSE;
+ *date++ = 0;
+ return TRUE;
+ }
+
/******************************************************************************
* VarBstrFromDate [OLEAUT32.114]
*
{
SYSTEMTIME st;
DWORD dwFormatFlags = dwFlags & LOCALE_NOUSEROVERRIDE;
- WCHAR date[128], *time;
+ WCHAR date[128], fmt_buff[80], *time;
TRACE("(%g,0x%08x,0x%08x,%p)\n", dateIn, lcid, dwFlags, pbstrOut);
if (whole == 0.0)
dwFlags |= VAR_TIMEVALUEONLY;
- else if (partial < 1e-12)
+ else if (partial > -1e-12 && partial < 1e-12)
dwFlags |= VAR_DATEVALUEONLY;
}
if (dwFlags & VAR_TIMEVALUEONLY)
date[0] = '\0';
else
- if (!GetDateFormatW(lcid, dwFormatFlags|DATE_SHORTDATE, &st, NULL, date,
- sizeof(date)/sizeof(WCHAR)))
+ if (!GetLocaleInfoW(lcid, LOCALE_SSHORTDATE, fmt_buff, sizeof(fmt_buff)/sizeof(WCHAR)) ||
+ !get_date_format(lcid, dwFlags, &st, fmt_buff, date, sizeof(date)/sizeof(WCHAR)))
return E_INVALIDARG;
if (!(dwFlags & VAR_DATEVALUEONLY))
--- /dev/null
+
+ include_directories(${REACTOS_SOURCE_DIR}/include/reactos/wine)
+ add_definitions(-D__WINESRC__)
+
+ spec2def(propsys.dll propsys.spec ADD_IMPORTLIB)
+
+ list(APPEND SOURCE
+ propstore.c
+ propsys_main.c
+ propvar.c
+ propsys.rc
+ ${CMAKE_CURRENT_BINARY_DIR}/propsys_stubs.c
+ ${CMAKE_CURRENT_BINARY_DIR}/propsys.def)
+
+ add_library(propsys SHARED ${SOURCE})
+ set_module_type(propsys win32dll)
+ target_link_libraries(propsys uuid wine)
+ add_importlibs(propsys ole32 oleaut32 msvcrt kernel32 ntdll)
+ add_dependencies(propsys psdk)
+ add_cd_file(TARGET propsys DESTINATION reactos/system32 FOR all)
--- /dev/null
+ /*
+ * standard IPropertyStore implementation
+ *
+ * Copyright 2012 Vincent Povirk for CodeWeavers
+ *
+ * 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
+ #define _INC_WINDOWS
+ #define COM_NO_WINDOWS_H
+
+ #define COBJMACROS
+ #include <config.h>
+
+ #include <stdarg.h>
+
+ #include <windef.h>
+ #include <winbase.h>
+ #include <objbase.h>
+ //#include "rpcproxy.h"
+ #include <propsys.h>
+ #include <wine/debug.h>
+ //#include "wine/unicode.h"
+ #include <wine/list.h>
+
+ #include <initguid.h>
+ //#include "propsys_private.h"
+
+ DEFINE_GUID(FMTID_NamedProperties, 0xd5cdd505, 0x2e9c, 0x101b, 0x93, 0x97, 0x08, 0x00, 0x2b, 0x2c, 0xf9, 0xae);
+
+ WINE_DEFAULT_DEBUG_CHANNEL(propsys);
+
+ typedef struct {
+ struct list entry;
+ DWORD pid;
+ PROPVARIANT propvar;
+ PSC_STATE state;
+ } propstore_value;
+
+ typedef struct {
+ struct list entry;
+ GUID fmtid;
+ struct list values; /* list of struct propstore_value */
+ DWORD count;
+ } propstore_format;
+
+ typedef struct {
+ IPropertyStoreCache IPropertyStoreCache_iface;
+ LONG ref;
+ CRITICAL_SECTION lock;
+ struct list formats; /* list of struct propstore_format */
+ } PropertyStore;
+
+ static inline PropertyStore *impl_from_IPropertyStoreCache(IPropertyStoreCache *iface)
+ {
+ return CONTAINING_RECORD(iface, PropertyStore, IPropertyStoreCache_iface);
+ }
+
+ static HRESULT WINAPI PropertyStore_QueryInterface(IPropertyStoreCache *iface, REFIID iid,
+ void **ppv)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ TRACE("(%p,%s,%p)\n", iface, debugstr_guid(iid), ppv);
+
+ if (!ppv) return E_INVALIDARG;
+
+ if (IsEqualIID(&IID_IUnknown, iid) || IsEqualIID(&IID_IPropertyStore, iid) ||
+ IsEqualIID(&IID_IPropertyStoreCache, iid))
+ {
+ *ppv = &This->IPropertyStoreCache_iface;
+ }
+ else
+ {
+ FIXME("No interface for %s\n", debugstr_guid(iid));
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+ }
+
+ static ULONG WINAPI PropertyStore_AddRef(IPropertyStoreCache *iface)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p) refcount=%u\n", iface, ref);
+
+ return ref;
+ }
+
+ static void destroy_format(propstore_format *format)
+ {
+ propstore_value *cursor, *cursor2;
+ LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, &format->values, propstore_value, entry)
+ {
+ PropVariantClear(&cursor->propvar);
+ HeapFree(GetProcessHeap(), 0, cursor);
+ }
+ HeapFree(GetProcessHeap(), 0, format);
+ }
+
+ static ULONG WINAPI PropertyStore_Release(IPropertyStoreCache *iface)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p) refcount=%u\n", iface, ref);
+
+ if (ref == 0)
+ {
+ propstore_format *cursor, *cursor2;
+ This->lock.DebugInfo->Spare[0] = 0;
+ DeleteCriticalSection(&This->lock);
+ LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, &This->formats, propstore_format, entry)
+ destroy_format(cursor);
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+
+ return ref;
+ }
+
+ static HRESULT WINAPI PropertyStore_GetCount(IPropertyStoreCache *iface,
+ DWORD *cProps)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ propstore_format *format;
+
+ TRACE("%p,%p\n", iface, cProps);
+
+ if (!cProps)
+ return E_POINTER;
+
+ *cProps = 0;
+
+ EnterCriticalSection(&This->lock);
+
+ LIST_FOR_EACH_ENTRY(format, &This->formats, propstore_format, entry)
+ *cProps += format->count;
+
+ LeaveCriticalSection(&This->lock);
+
+ return S_OK;
+ }
+
+ static HRESULT WINAPI PropertyStore_GetAt(IPropertyStoreCache *iface,
+ DWORD iProp, PROPERTYKEY *pkey)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ propstore_format *format=NULL, *format_candidate;
+ propstore_value *value;
+ HRESULT hr;
+
+ TRACE("%p,%d,%p\n", iface, iProp, pkey);
+
+ if (!pkey)
+ return E_POINTER;
+
+ EnterCriticalSection(&This->lock);
+
+ LIST_FOR_EACH_ENTRY(format_candidate, &This->formats, propstore_format, entry)
+ {
+ if (format_candidate->count > iProp)
+ {
+ format = format_candidate;
+ pkey->fmtid = format->fmtid;
+ break;
+ }
+
+ iProp -= format_candidate->count;
+ }
+
+ if (format)
+ {
+ LIST_FOR_EACH_ENTRY(value, &format->values, propstore_value, entry)
+ {
+ if (iProp == 0)
+ {
+ pkey->pid = value->pid;
+ break;
+ }
+
+ iProp--;
+ }
+
+ hr = S_OK;
+ }
+ else
+ hr = E_INVALIDARG;
+
+ LeaveCriticalSection(&This->lock);
+
+ return hr;
+ }
+
+ static HRESULT PropertyStore_LookupValue(PropertyStore *This, REFPROPERTYKEY key,
+ int insert, propstore_value **result)
+ {
+ propstore_format *format=NULL, *format_candidate;
+ propstore_value *value=NULL, *value_candidate;
+
+ if (IsEqualGUID(&key->fmtid, &FMTID_NamedProperties))
+ {
+ /* This is used in the property store format [MS-PROPSTORE]
+ * for named values and probably gets special treatment. */
+ ERR("don't know how to handle FMTID_NamedProperties\n");
+ return E_FAIL;
+ }
+
+ LIST_FOR_EACH_ENTRY(format_candidate, &This->formats, propstore_format, entry)
+ {
+ if (IsEqualGUID(&format_candidate->fmtid, &key->fmtid))
+ {
+ format = format_candidate;
+ break;
+ }
+ }
+
+ if (!format)
+ {
+ if (!insert)
+ return TYPE_E_ELEMENTNOTFOUND;
+
+ format = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*format));
+ if (!format)
+ return E_OUTOFMEMORY;
+
+ format->fmtid = key->fmtid;
+ list_init(&format->values);
+ list_add_tail(&This->formats, &format->entry);
+ }
+
+ LIST_FOR_EACH_ENTRY(value_candidate, &format->values, propstore_value, entry)
+ {
+ if (value_candidate->pid == key->pid)
+ {
+ value = value_candidate;
+ break;
+ }
+ }
+
+ if (!value)
+ {
+ if (!insert)
+ return TYPE_E_ELEMENTNOTFOUND;
+
+ value = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*value));
+ if (!value)
+ return E_OUTOFMEMORY;
+
+ value->pid = key->pid;
+ list_add_tail(&format->values, &value->entry);
+ format->count++;
+ }
+
+ *result = value;
+
+ return S_OK;
+ }
+
+ static HRESULT WINAPI PropertyStore_GetValue(IPropertyStoreCache *iface,
+ REFPROPERTYKEY key, PROPVARIANT *pv)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ propstore_value *value;
+ HRESULT hr;
+
+ TRACE("%p,%p,%p\n", iface, key, pv);
+
+ if (!pv)
+ return E_POINTER;
+
+ EnterCriticalSection(&This->lock);
+
+ hr = PropertyStore_LookupValue(This, key, 0, &value);
+
+ if (SUCCEEDED(hr))
+ hr = PropVariantCopy(pv, &value->propvar);
+ else if (hr == TYPE_E_ELEMENTNOTFOUND)
+ {
+ PropVariantInit(pv);
+ hr = S_OK;
+ }
+
+ LeaveCriticalSection(&This->lock);
+
+ return hr;
+ }
+
+ static HRESULT WINAPI PropertyStore_SetValue(IPropertyStoreCache *iface,
+ REFPROPERTYKEY key, REFPROPVARIANT propvar)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ propstore_value *value;
+ HRESULT hr;
+ PROPVARIANT temp;
+
+ TRACE("%p,%p,%p\n", iface, key, propvar);
+
+ EnterCriticalSection(&This->lock);
+
+ hr = PropertyStore_LookupValue(This, key, 1, &value);
+
+ if (SUCCEEDED(hr))
+ hr = PropVariantCopy(&temp, propvar);
+
+ if (SUCCEEDED(hr))
+ {
+ PropVariantClear(&value->propvar);
+ value->propvar = temp;
+ }
+
+ LeaveCriticalSection(&This->lock);
+
+ return hr;
+ }
+
+ static HRESULT WINAPI PropertyStore_Commit(IPropertyStoreCache *iface)
+ {
+ FIXME("%p: stub\n", iface);
+ return S_OK;
+ }
+
+ static HRESULT WINAPI PropertyStore_GetState(IPropertyStoreCache *iface,
+ REFPROPERTYKEY key, PSC_STATE *pstate)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ propstore_value *value;
+ HRESULT hr;
+
+ TRACE("%p,%p,%p\n", iface, key, pstate);
+
+ EnterCriticalSection(&This->lock);
+
+ hr = PropertyStore_LookupValue(This, key, 0, &value);
+
+ if (SUCCEEDED(hr))
+ *pstate = value->state;
+
+ LeaveCriticalSection(&This->lock);
+
+ if (FAILED(hr))
+ *pstate = PSC_NORMAL;
+
+ return hr;
+ }
+
+ static HRESULT WINAPI PropertyStore_GetValueAndState(IPropertyStoreCache *iface,
+ REFPROPERTYKEY key, PROPVARIANT *ppropvar, PSC_STATE *pstate)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ propstore_value *value;
+ HRESULT hr;
+
+ TRACE("%p,%p,%p,%p\n", iface, key, ppropvar, pstate);
+
+ EnterCriticalSection(&This->lock);
+
+ hr = PropertyStore_LookupValue(This, key, 0, &value);
+
+ if (SUCCEEDED(hr))
+ hr = PropVariantCopy(ppropvar, &value->propvar);
+
+ if (SUCCEEDED(hr))
+ *pstate = value->state;
+
+ LeaveCriticalSection(&This->lock);
+
+ if (FAILED(hr))
+ {
+ PropVariantInit(ppropvar);
+ *pstate = PSC_NORMAL;
+ }
+
+ return hr;
+ }
+
+ static HRESULT WINAPI PropertyStore_SetState(IPropertyStoreCache *iface,
+ REFPROPERTYKEY key, PSC_STATE pstate)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ propstore_value *value;
+ HRESULT hr;
+
+ TRACE("%p,%p,%d\n", iface, key, pstate);
+
+ EnterCriticalSection(&This->lock);
+
+ hr = PropertyStore_LookupValue(This, key, 0, &value);
+
+ if (SUCCEEDED(hr))
+ value->state = pstate;
+
+ LeaveCriticalSection(&This->lock);
+
+ return hr;
+ }
+
+ static HRESULT WINAPI PropertyStore_SetValueAndState(IPropertyStoreCache *iface,
+ REFPROPERTYKEY key, const PROPVARIANT *ppropvar, PSC_STATE state)
+ {
+ PropertyStore *This = impl_from_IPropertyStoreCache(iface);
+ propstore_value *value;
+ HRESULT hr;
+ PROPVARIANT temp;
+
+ TRACE("%p,%p,%p,%d\n", iface, key, ppropvar, state);
+
+ EnterCriticalSection(&This->lock);
+
+ hr = PropertyStore_LookupValue(This, key, 1, &value);
+
+ if (SUCCEEDED(hr))
+ hr = PropVariantCopy(&temp, ppropvar);
+
+ if (SUCCEEDED(hr))
+ {
+ PropVariantClear(&value->propvar);
+ value->propvar = temp;
+ value->state = state;
+ }
+
+ LeaveCriticalSection(&This->lock);
+
+ return hr;
+ }
+
+ static const IPropertyStoreCacheVtbl PropertyStore_Vtbl = {
+ PropertyStore_QueryInterface,
+ PropertyStore_AddRef,
+ PropertyStore_Release,
+ PropertyStore_GetCount,
+ PropertyStore_GetAt,
+ PropertyStore_GetValue,
+ PropertyStore_SetValue,
+ PropertyStore_Commit,
+ PropertyStore_GetState,
+ PropertyStore_GetValueAndState,
+ PropertyStore_SetState,
+ PropertyStore_SetValueAndState
+ };
+
+ HRESULT PropertyStore_CreateInstance(IUnknown *pUnkOuter, REFIID iid, void** ppv)
+ {
+ PropertyStore *This;
+ HRESULT ret;
+
+ TRACE("(%p,%s,%p)\n", pUnkOuter, debugstr_guid(iid), ppv);
+
+ *ppv = NULL;
+
+ if (pUnkOuter) return CLASS_E_NOAGGREGATION;
+
+ This = HeapAlloc(GetProcessHeap(), 0, sizeof(PropertyStore));
+ if (!This) return E_OUTOFMEMORY;
+
+ This->IPropertyStoreCache_iface.lpVtbl = &PropertyStore_Vtbl;
+ This->ref = 1;
+ InitializeCriticalSection(&This->lock);
+ This->lock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": PropertyStore.lock");
+ list_init(&This->formats);
+
+ ret = IPropertyStoreCache_QueryInterface(&This->IPropertyStoreCache_iface, iid, ppv);
+ IPropertyStoreCache_Release(&This->IPropertyStoreCache_iface);
+
+ return ret;
+ }
--- /dev/null
+ 1 WINE_REGISTRY propsys_classes.rgs
--- /dev/null
+ 3 stub GetProxyDllInfo
+
+ 400 stub PROPSYS_400
+ 402 stub PROPSYS_402
+ 403 stub PROPSYS_403
+ 404 stub PROPSYS_404
+ 405 stub PROPSYS_405
+ 406 stub PROPSYS_406
+ 407 stub PROPSYS_407
+ 408 stub PROPSYS_408
+ 409 stub PROPSYS_409
+ 410 stub PROPSYS_410
+ 411 stub PROPSYS_411
+ 412 stub PROPSYS_412
+ 413 stub PROPSYS_413
+ 414 stub PROPSYS_414
+ 415 stub PROPSYS_415
+ 416 stub PROPSYS_416
+ 417 stub PROPSYS_417
+ 418 stub PROPSYS_418
+ 420 stub PROPSYS_420
+ 421 stub PROPSYS_421
+ 422 stub PROPSYS_422
+
+ @ stub ClearPropVariantArray
+ @ stub ClearVariantArray
+ @ stdcall -private DllCanUnloadNow()
+ @ stdcall -private DllGetClassObject(ptr ptr ptr)
+ @ stdcall -private DllRegisterServer()
+ @ stdcall -private DllUnregisterServer()
+ @ stub InitPropVariantFromBooleanVector
+ @ stdcall InitPropVariantFromBuffer(ptr long ptr)
+ @ stub InitPropVariantFromCLSID
+ @ stub InitPropVariantFromDoubleVector
+ @ stub InitPropVariantFromFileTime
+ @ stub InitPropVariantFromFileTimeVector
+ @ stdcall InitPropVariantFromGUIDAsString(ptr ptr)
+ @ stub InitPropVariantFromInt16Vector
+ @ stub InitPropVariantFromInt32Vector
+ @ stub InitPropVariantFromInt64Vector
+ @ stub InitPropVariantFromPropVariantVectorElem
+ @ stub InitPropVariantFromResource
+ @ stub InitPropVariantFromStrRet
+ @ stub InitPropVariantFromStringAsVector
+ @ stub InitPropVariantFromStringVector
+ @ stub InitPropVariantFromUInt16Vector
+ @ stub InitPropVariantFromUInt32Vector
+ @ stub InitPropVariantFromUInt64Vector
+ @ stub InitPropVariantVectorFromPropVariant
+ @ stub InitVariantFromBooleanArray
+ @ stdcall InitVariantFromBuffer(ptr long ptr)
+ @ stub InitVariantFromDoubleArray
+ @ stub InitVariantFromFileTime
+ @ stub InitVariantFromFileTimeArray
+ @ stdcall InitVariantFromGUIDAsString(ptr ptr)
+ @ stub InitVariantFromInt16Array
+ @ stub InitVariantFromInt32Array
+ @ stub InitVariantFromInt64Array
+ @ stub InitVariantFromResource
+ @ stub InitVariantFromStrRet
+ @ stub InitVariantFromStringArray
+ @ stub InitVariantFromUInt16Array
+ @ stub InitVariantFromUInt32Array
+ @ stub InitVariantFromUInt64Array
+ @ stub InitVariantFromVariantArrayElem
+ @ stub PSCoerceToCanonicalValue
+ @ stub PSCreateAdapterFromPropertyStore
+ @ stub PSCreateDelayedMultiplexPropertyStore
+ @ stub PSCreateMemoryPropertyStore
+ @ stub PSCreateMultiplexPropertyStore
+ @ stub PSCreatePropertyChangeArray
+ @ stub PSCreatePropertyStoreFromObject
+ @ stub PSCreatePropertyStoreFromPropertySetStorage
+ @ stub PSCreateSimplePropertyChange
+ @ stub PSEnumeratePropertyDescriptions
+ @ stub PSFormatForDisplay
+ @ stub PSFormatForDisplayAlloc
+ @ stub PSFormatPropertyValue
+ @ stub PSGetItemPropertyHandler
+ @ stub PSGetItemPropertyHandlerWithCreateObject
+ @ stub PSGetNameFromPropertyKey
+ @ stub PSGetNamedPropertyFromPropertyStorage
+ @ stdcall PSGetPropertyDescription(ptr ptr ptr)
+ @ stub PSGetPropertyDescriptionByName
+ @ stub PSGetPropertyDescriptionListFromString
+ @ stub PSGetPropertyFromPropertyStorage
+ @ stub PSGetPropertyKeyFromName
+ @ stub PSGetPropertySystem
+ @ stub PSGetPropertyValue
+ @ stub PSLookupPropertyHandlerCLSID
+ @ stdcall PSPropertyKeyFromString(wstr ptr)
+ @ stdcall PSRefreshPropertySchema()
+ @ stdcall PSRegisterPropertySchema(wstr)
+ @ stub PSSetPropertyValue
+ @ stdcall PSStringFromPropertyKey(ptr ptr long)
+ @ stdcall PSUnregisterPropertySchema(wstr)
+ @ stdcall PropVariantChangeType(ptr ptr long long)
+ @ stdcall PropVariantCompareEx(ptr ptr long long)
+ @ stub PropVariantGetBooleanElem
+ @ stub PropVariantGetDoubleElem
+ @ stub PropVariantGetElementCount
+ @ stub PropVariantGetFileTimeElem
+ @ stub PropVariantGetInt16Elem
+ @ stub PropVariantGetInt32Elem
+ @ stub PropVariantGetInt64Elem
+ @ stub PropVariantGetStringElem
+ @ stub PropVariantGetUInt16Elem
+ @ stub PropVariantGetUInt32Elem
+ @ stub PropVariantGetUInt64Elem
+ @ stub PropVariantToBSTR
+ @ stub PropVariantToBoolean
+ @ stub PropVariantToBooleanVector
+ @ stub PropVariantToBooleanVectorAlloc
+ @ stub PropVariantToBooleanWithDefault
+ @ stub PropVariantToBuffer
+ @ stub PropVariantToDouble
+ @ stub PropVariantToDoubleVector
+ @ stub PropVariantToDoubleVectorAlloc
+ @ stub PropVariantToDoubleWithDefault
+ @ stub PropVariantToFileTime
+ @ stub PropVariantToFileTimeVector
+ @ stub PropVariantToFileTimeVectorAlloc
+ @ stdcall PropVariantToGUID(ptr ptr)
+ @ stdcall PropVariantToInt16(ptr ptr)
+ @ stub PropVariantToInt16Vector
+ @ stub PropVariantToInt16VectorAlloc
+ @ stub PropVariantToInt16WithDefault
+ @ stdcall PropVariantToInt32(ptr ptr)
+ @ stub PropVariantToInt32Vector
+ @ stub PropVariantToInt32VectorAlloc
+ @ stub PropVariantToInt32WithDefault
+ @ stdcall PropVariantToInt64(ptr ptr)
+ @ stub PropVariantToInt64Vector
+ @ stub PropVariantToInt64VectorAlloc
+ @ stub PropVariantToInt64WithDefault
+ @ stub PropVariantToStrRet
+ @ stub PropVariantToString
+ @ stub PropVariantToStringAlloc
+ @ stub PropVariantToStringVector
+ @ stub PropVariantToStringVectorAlloc
+ @ stub PropVariantToStringWithDefault
+ @ stdcall PropVariantToUInt16(ptr ptr)
+ @ stub PropVariantToUInt16Vector
+ @ stub PropVariantToUInt16VectorAlloc
+ @ stub PropVariantToUInt16WithDefault
+ @ stdcall PropVariantToUInt32(ptr ptr)
+ @ stub PropVariantToUInt32Vector
+ @ stub PropVariantToUInt32VectorAlloc
+ @ stub PropVariantToUInt32WithDefault
+ @ stdcall PropVariantToUInt64(ptr ptr)
+ @ stub PropVariantToUInt64Vector
+ @ stub PropVariantToUInt64VectorAlloc
+ @ stub PropVariantToUInt64WithDefault
+ @ stub PropVariantToVariant
+ @ stub StgDeserializePropVariant
+ @ stub StgSerializePropVariant
+ @ stub VariantCompare
+ @ stub VariantGetBooleanElem
+ @ stub VariantGetDoubleElem
+ @ stub VariantGetElementCount
+ @ stub VariantGetInt16Elem
+ @ stub VariantGetInt32Elem
+ @ stub VariantGetInt64Elem
+ @ stub VariantGetStringElem
+ @ stub VariantGetUInt16Elem
+ @ stub VariantGetUInt32Elem
+ @ stub VariantGetUInt64Elem
+ @ stub VariantToBoolean
+ @ stub VariantToBooleanArray
+ @ stub VariantToBooleanArrayAlloc
+ @ stub VariantToBooleanWithDefault
+ @ stub VariantToBuffer
+ @ stub VariantToDosDateTime
+ @ stub VariantToDouble
+ @ stub VariantToDoubleArray
+ @ stub VariantToDoubleArrayAlloc
+ @ stub VariantToDoubleWithDefault
+ @ stub VariantToFileTime
+ @ stdcall VariantToGUID(ptr ptr)
+ @ stub VariantToInt16
+ @ stub VariantToInt16Array
+ @ stub VariantToInt16ArrayAlloc
+ @ stub VariantToInt16WithDefault
+ @ stub VariantToInt32
+ @ stub VariantToInt32Array
+ @ stub VariantToInt32ArrayAlloc
+ @ stub VariantToInt32WithDefault
+ @ stub VariantToInt64
+ @ stub VariantToInt64Array
+ @ stub VariantToInt64ArrayAlloc
+ @ stub VariantToInt64WithDefault
+ @ stub VariantToPropVariant
+ @ stub VariantToStrRet
+ @ stub VariantToString
+ @ stub VariantToStringAlloc
+ @ stub VariantToStringArray
+ @ stub VariantToStringArrayAlloc
+ @ stub VariantToStringWithDefault
+ @ stub VariantToUInt16
+ @ stub VariantToUInt16Array
+ @ stub VariantToUInt16ArrayAlloc
+ @ stub VariantToUInt16WithDefault
+ @ stub VariantToUInt32
+ @ stub VariantToUInt32Array
+ @ stub VariantToUInt32ArrayAlloc
+ @ stub VariantToUInt32WithDefault
+ @ stub VariantToUInt64
+ @ stub VariantToUInt64Array
+ @ stub VariantToUInt64ArrayAlloc
+ @ stub VariantToUInt64WithDefault
/*
- * Copyright 2005 Jacek Caban
+ * Coclasses for propsys
+ *
+ * Copyright 2012 Vincent Povirk for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
- /* @makedep: urlmon.rgs */
- 1 WINE_REGISTRY urlmon.rgs
-
- /* @makedep: urlmon.inf */
- REGINST REGINST urlmon.inf
-
- #define WINE_FILENAME_STR "urlmon.dll"
- #define WINE_FILEVERSION 6,0,2800,1485
- #define WINE_FILEVERSION_STR "6.0.2800.1485"
- #define WINE_PRODUCTVERSION 6,0,2800,1485
- #define WINE_PRODUCTVERSION_STR "6.0.2800.1485"
-
- #include "wine/wine_common_ver.rc"
+ [
+ helpstring("Packed Property Storage Object"),
+ threading(both),
+ uuid(9a02e012-6303-4e1e-b9a1-630f802592c5)
+ ]
+ coclass InMemoryPropertyStore { interface IPropertyStoreCache; }
--- /dev/null
+ HKCR
+ {
+ NoRemove Interface
+ {
+ }
+ NoRemove CLSID
+ {
+ '{9A02E012-6303-4E1E-B9A1-630F802592C5}' = s 'Packed Property Storage Object'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+ }
+ }
+ }
--- /dev/null
+ /*
+ * propsys main
+ *
+ * Copyright 1997, 2002 Alexandre Julliard
+ * 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
+ #define _INC_WINDOWS
+ #define COM_NO_WINDOWS_H
+
+ #define COBJMACROS
+ #include <config.h>
+
+ #include <stdarg.h>
+
+ #include <windef.h>
+ #include <winbase.h>
+ #include <objbase.h>
+ #include <rpcproxy.h>
+ #include <propsys.h>
+ #include <wine/debug.h>
+ #include <wine/unicode.h>
+
+ #include "propsys_private.h"
+
+ WINE_DEFAULT_DEBUG_CHANNEL(propsys);
+
+ static HINSTANCE propsys_hInstance;
+
+ 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:
+ propsys_hInstance = hinstDLL;
+ DisableThreadLibraryCalls(hinstDLL);
+ break;
+ case DLL_PROCESS_DETACH:
+ break;
+ default:
+ break;
+ }
+
+ return TRUE;
+ }
+
+ HRESULT WINAPI DllRegisterServer(void)
+ {
+ return __wine_register_resources( propsys_hInstance );
+ }
+
+ HRESULT WINAPI DllUnregisterServer(void)
+ {
+ return __wine_unregister_resources( propsys_hInstance );
+ }
+
+ static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
+ {
+ *ppv = NULL;
+
+ if(IsEqualGUID(&IID_IUnknown, riid)) {
+ TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
+ *ppv = iface;
+ }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
+ TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
+ *ppv = iface;
+ }
+
+ if(*ppv) {
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+ }
+
+ FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
+ return E_NOINTERFACE;
+ }
+
+ static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
+ {
+ TRACE("(%p)\n", iface);
+ return 2;
+ }
+
+ static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
+ {
+ TRACE("(%p)\n", iface);
+ return 1;
+ }
+
+ static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
+ {
+ TRACE("(%p)->(%x)\n", iface, fLock);
+
+ return S_OK;
+ }
+
+ static HRESULT WINAPI InMemoryPropertyStoreFactory_CreateInstance(IClassFactory *iface, IUnknown *outer,
+ REFIID riid, void **ppv)
+ {
+ TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
+
+ return PropertyStore_CreateInstance(outer, riid, ppv);
+ }
+
+ static const IClassFactoryVtbl InMemoryPropertyStoreFactoryVtbl = {
+ ClassFactory_QueryInterface,
+ ClassFactory_AddRef,
+ ClassFactory_Release,
+ InMemoryPropertyStoreFactory_CreateInstance,
+ ClassFactory_LockServer
+ };
+
+ static IClassFactory InMemoryPropertyStoreFactory = { &InMemoryPropertyStoreFactoryVtbl };
+
+ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
+ {
+ if(IsEqualGUID(&CLSID_InMemoryPropertyStore, rclsid)) {
+ TRACE("(CLSID_InMemoryPropertyStore %s %p)\n", debugstr_guid(riid), ppv);
+ return IClassFactory_QueryInterface(&InMemoryPropertyStoreFactory, riid, ppv);
+ }
+
+ FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
+ return CLASS_E_CLASSNOTAVAILABLE;
+ }
+
+ HRESULT WINAPI DllCanUnloadNow(void)
+ {
+ return S_FALSE;
+ }
+
+ HRESULT WINAPI PSRegisterPropertySchema(PCWSTR path)
+ {
+ FIXME("%s stub\n", debugstr_w(path));
+
+ return S_OK;
+ }
+
+ HRESULT WINAPI PSUnregisterPropertySchema(PCWSTR path)
+ {
+ FIXME("%s stub\n", debugstr_w(path));
+
+ return E_NOTIMPL;
+ }
+
+ HRESULT WINAPI PSGetPropertyDescription(REFPROPERTYKEY propkey, REFIID riid, void **ppv)
+ {
+ FIXME("%p, %p, %p\n", propkey, riid, ppv);
+ return E_NOTIMPL;
+ }
+
+ HRESULT WINAPI PSRefreshPropertySchema(void)
+ {
+ FIXME("\n");
+ return S_OK;
+ }
+
+ HRESULT WINAPI PSStringFromPropertyKey(REFPROPERTYKEY pkey, LPWSTR psz, UINT cch)
+ {
+ static const WCHAR guid_fmtW[] = {'{','%','0','8','X','-','%','0','4','X','-',
+ '%','0','4','X','-','%','0','2','X','%','0','2','X','-',
+ '%','0','2','X','%','0','2','X','%','0','2','X',
+ '%','0','2','X','%','0','2','X','%','0','2','X','}',0};
+ static const WCHAR pid_fmtW[] = {'%','u',0};
+
+ WCHAR pidW[PKEY_PIDSTR_MAX + 1];
+ LPWSTR p = psz;
+ int len;
+
+ TRACE("(%p, %p, %u)\n", pkey, psz, cch);
+
+ if (!psz)
+ return E_POINTER;
+
+ /* GUIDSTRING_MAX accounts for null terminator, +1 for space character. */
+ if (cch <= GUIDSTRING_MAX + 1)
+ return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+
+ if (!pkey)
+ {
+ psz[0] = '\0';
+ return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+ }
+
+ sprintfW(psz, guid_fmtW, pkey->fmtid.Data1, pkey->fmtid.Data2,
+ pkey->fmtid.Data3, pkey->fmtid.Data4[0], pkey->fmtid.Data4[1],
+ pkey->fmtid.Data4[2], pkey->fmtid.Data4[3], pkey->fmtid.Data4[4],
+ pkey->fmtid.Data4[5], pkey->fmtid.Data4[6], pkey->fmtid.Data4[7]);
+
+ /* Overwrite the null terminator with the space character. */
+ p += GUIDSTRING_MAX - 1;
+ *p++ = ' ';
+ cch -= GUIDSTRING_MAX - 1 + 1;
+
+ len = sprintfW(pidW, pid_fmtW, pkey->pid);
+
+ if (cch >= len + 1)
+ {
+ strcpyW(p, pidW);
+ return S_OK;
+ }
+ else
+ {
+ WCHAR *ptr = pidW + len - 1;
+
+ psz[0] = '\0';
+ *p++ = '\0';
+ cch--;
+
+ /* Replicate a quirk of the native implementation where the contents
+ * of the property ID string are written backwards to the output
+ * buffer, skipping the rightmost digit. */
+ if (cch)
+ {
+ ptr--;
+ while (cch--)
+ *p++ = *ptr--;
+ }
+
+ return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+ }
+ }
+
+ static const BYTE hex2bin[] =
+ {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x00 */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x10 */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x20 */
+ 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, /* 0x30 */
+ 0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0, /* 0x40 */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x50 */
+ 0,10,11,12,13,14,15 /* 0x60 */
+ };
+
+ static BOOL validate_indices(LPCWSTR s, int min, int max)
+ {
+ int i;
+
+ for (i = min; i <= max; i++)
+ {
+ if (!s[i])
+ return FALSE;
+
+ if (i == 0)
+ {
+ if (s[i] != '{')
+ return FALSE;
+ }
+ else if (i == 9 || i == 14 || i == 19 || i == 24)
+ {
+ if (s[i] != '-')
+ return FALSE;
+ }
+ else if (i == 37)
+ {
+ if (s[i] != '}')
+ return FALSE;
+ }
+ else
+ {
+ if (s[i] > 'f' || (!hex2bin[s[i]] && s[i] != '0'))
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+ }
+
+ /* Adapted from CLSIDFromString helper in dlls/ole32/compobj.c and
+ * UuidFromString in dlls/rpcrt4/rpcrt4_main.c. */
+ static BOOL string_to_guid(LPCWSTR s, LPGUID id)
+ {
+ /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */
+
+ if (!validate_indices(s, 0, 8)) return FALSE;
+ id->Data1 = (hex2bin[s[1]] << 28 | hex2bin[s[2]] << 24 | hex2bin[s[3]] << 20 | hex2bin[s[4]] << 16 |
+ hex2bin[s[5]] << 12 | hex2bin[s[6]] << 8 | hex2bin[s[7]] << 4 | hex2bin[s[8]]);
+ if (!validate_indices(s, 9, 14)) return FALSE;
+ id->Data2 = hex2bin[s[10]] << 12 | hex2bin[s[11]] << 8 | hex2bin[s[12]] << 4 | hex2bin[s[13]];
+ if (!validate_indices(s, 15, 19)) return FALSE;
+ id->Data3 = hex2bin[s[15]] << 12 | hex2bin[s[16]] << 8 | hex2bin[s[17]] << 4 | hex2bin[s[18]];
+
+ /* these are just sequential bytes */
+
+ if (!validate_indices(s, 20, 21)) return FALSE;
+ id->Data4[0] = hex2bin[s[20]] << 4 | hex2bin[s[21]];
+ if (!validate_indices(s, 22, 24)) return FALSE;
+ id->Data4[1] = hex2bin[s[22]] << 4 | hex2bin[s[23]];
+
+ if (!validate_indices(s, 25, 26)) return FALSE;
+ id->Data4[2] = hex2bin[s[25]] << 4 | hex2bin[s[26]];
+ if (!validate_indices(s, 27, 28)) return FALSE;
+ id->Data4[3] = hex2bin[s[27]] << 4 | hex2bin[s[28]];
+ if (!validate_indices(s, 29, 30)) return FALSE;
+ id->Data4[4] = hex2bin[s[29]] << 4 | hex2bin[s[30]];
+ if (!validate_indices(s, 31, 32)) return FALSE;
+ id->Data4[5] = hex2bin[s[31]] << 4 | hex2bin[s[32]];
+ if (!validate_indices(s, 33, 34)) return FALSE;
+ id->Data4[6] = hex2bin[s[33]] << 4 | hex2bin[s[34]];
+ if (!validate_indices(s, 35, 37)) return FALSE;
+ id->Data4[7] = hex2bin[s[35]] << 4 | hex2bin[s[36]];
+
+ return TRUE;
+ }
+
+ HRESULT WINAPI PSPropertyKeyFromString(LPCWSTR pszString, PROPERTYKEY *pkey)
+ {
+ int has_minus = 0, has_comma = 0;
+
+ TRACE("(%s, %p)\n", debugstr_w(pszString), pkey);
+
+ if (!pszString || !pkey)
+ return E_POINTER;
+
+ memset(pkey, 0, sizeof(PROPERTYKEY));
+
+ if (!string_to_guid(pszString, &pkey->fmtid))
+ return E_INVALIDARG;
+
+ pszString += GUIDSTRING_MAX - 1;
+
+ if (!*pszString)
+ return E_INVALIDARG;
+
+ /* Only the space seems to be recognized as whitespace. The comma is only
+ * recognized once and processing terminates if another comma is found. */
+ while (*pszString == ' ' || *pszString == ',')
+ {
+ if (*pszString == ',')
+ {
+ if (has_comma)
+ return S_OK;
+ else
+ has_comma = 1;
+ }
+ pszString++;
+ }
+
+ if (!*pszString)
+ return E_INVALIDARG;
+
+ /* Only two minus signs are recognized if no comma is detected. The first
+ * sign is ignored, and the second is interpreted. If a comma is detected
+ * before the minus sign, then only one minus sign counts, and property ID
+ * interpretation begins with the next character. */
+ if (has_comma)
+ {
+ if (*pszString == '-')
+ {
+ has_minus = 1;
+ pszString++;
+ }
+ }
+ else
+ {
+ if (*pszString == '-')
+ pszString++;
+
+ /* Skip any intermediate spaces after the first minus sign. */
+ while (*pszString == ' ')
+ pszString++;
+
+ if (*pszString == '-')
+ {
+ has_minus = 1;
+ pszString++;
+ }
+
+ /* Skip any remaining spaces after minus sign. */
+ while (*pszString == ' ')
+ pszString++;
+ }
+
+ /* Overflow is not checked. */
+ while (isdigitW(*pszString))
+ {
+ pkey->pid *= 10;
+ pkey->pid += (*pszString - '0');
+ pszString++;
+ }
+
+ if (has_minus)
+ pkey->pid = ~pkey->pid + 1;
+
+ return S_OK;
+ }
--- /dev/null
+ /*
+ * propsys private definitions
+ *
+ * Copyright 2012 Vincent Povirk for CodeWeavers
+ *
+ * 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
+ */
+
+ HRESULT PropertyStore_CreateInstance(IUnknown *outer, REFIID riid, void **ppv) DECLSPEC_HIDDEN;
--- /dev/null
+ /*
+ * PropVariant implementation
+ *
+ * Copyright 2008 James Hawkins for CodeWeavers
+ *
+ * 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
+ #define _INC_WINDOWS
+ #define COM_NO_WINDOWS_H
+
+ //#include <stdarg.h>
+ #include <stdio.h>
+
+ #define NONAMELESSUNION
+
+ #include <windef.h>
+ #include <winbase.h>
+ //#include "winerror.h"
+ #include <winreg.h>
+ //#include "winuser.h"
+ #include <shlobj.h>
+ #include <propvarutil.h>
+
+ #include <wine/debug.h>
+ #include <wine/unicode.h>
+
+ WINE_DEFAULT_DEBUG_CHANNEL(propsys);
+
+ static HRESULT PROPVAR_ConvertFILETIME(PROPVARIANT *ppropvarDest,
+ REFPROPVARIANT propvarSrc, VARTYPE vt)
+ {
+ SYSTEMTIME time;
+
+ FileTimeToSystemTime(&propvarSrc->u.filetime, &time);
+
+ switch (vt)
+ {
+ case VT_LPSTR:
+ {
+ static const char format[] = "%04d/%02d/%02d:%02d:%02d:%02d.%03d";
+
+ ppropvarDest->u.pszVal = HeapAlloc(GetProcessHeap(), 0,
+ lstrlenA(format) + 1);
+ if (!ppropvarDest->u.pszVal)
+ return E_OUTOFMEMORY;
+
+ sprintf(ppropvarDest->u.pszVal, format, time.wYear, time.wMonth,
+ time.wDay, time.wHour, time.wMinute,
+ time.wSecond, time.wMilliseconds);
+
+ return S_OK;
+ }
+
+ default:
+ FIXME("Unhandled target type: %d\n", vt);
+ }
+
+ return E_FAIL;
+ }
+
+ static HRESULT PROPVAR_ConvertNumber(REFPROPVARIANT pv, int dest_bits,
+ int dest_signed, LONGLONG *res)
+ {
+ int src_signed;
+
+ switch (pv->vt)
+ {
+ case VT_I1:
+ src_signed = 1;
+ *res = pv->u.cVal;
+ break;
+ case VT_UI1:
+ src_signed = 0;
+ *res = pv->u.bVal;
+ break;
+ case VT_I2:
+ src_signed = 1;
+ *res = pv->u.iVal;
+ break;
+ case VT_UI2:
+ src_signed = 0;
+ *res = pv->u.uiVal;
+ break;
+ case VT_I4:
+ src_signed = 1;
+ *res = pv->u.lVal;
+ break;
+ case VT_UI4:
+ src_signed = 0;
+ *res = pv->u.ulVal;
+ break;
+ case VT_I8:
+ src_signed = 1;
+ *res = pv->u.hVal.QuadPart;
+ break;
+ case VT_UI8:
+ src_signed = 0;
+ *res = pv->u.uhVal.QuadPart;
+ break;
+ case VT_EMPTY:
+ src_signed = 0;
+ *res = 0;
+ break;
+ default:
+ FIXME("unhandled vt %d\n", pv->vt);
+ return E_NOTIMPL;
+ }
+
+ if (*res < 0 && src_signed != dest_signed)
+ return HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW);
+
+ if (dest_bits < 64)
+ {
+ if (dest_signed)
+ {
+ if (*res >= ((LONGLONG)1 << (dest_bits-1)) ||
+ *res < ((LONGLONG)-1 << (dest_bits-1)))
+ return HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW);
+ }
+ else
+ {
+ if ((ULONGLONG)(*res) >= ((ULONGLONG)1 << dest_bits))
+ return HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW);
+ }
+ }
+
+ return S_OK;
+ }
+
+ HRESULT WINAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret)
+ {
+ LONGLONG res;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", propvarIn, ret);
+
+ hr = PROPVAR_ConvertNumber(propvarIn, 16, 1, &res);
+ if (SUCCEEDED(hr)) *ret = (SHORT)res;
+ return hr;
+ }
+
+ HRESULT WINAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret)
+ {
+ LONGLONG res;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", propvarIn, ret);
+
+ hr = PROPVAR_ConvertNumber(propvarIn, 32, 1, &res);
+ if (SUCCEEDED(hr)) *ret = (LONG)res;
+ return hr;
+ }
+
+ HRESULT WINAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret)
+ {
+ LONGLONG res;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", propvarIn, ret);
+
+ hr = PROPVAR_ConvertNumber(propvarIn, 64, 1, &res);
+ if (SUCCEEDED(hr)) *ret = (LONGLONG)res;
+ return hr;
+ }
+
+ HRESULT WINAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret)
+ {
+ LONGLONG res;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", propvarIn, ret);
+
+ hr = PROPVAR_ConvertNumber(propvarIn, 16, 0, &res);
+ if (SUCCEEDED(hr)) *ret = (USHORT)res;
+ return hr;
+ }
+
+ HRESULT WINAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret)
+ {
+ LONGLONG res;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", propvarIn, ret);
+
+ hr = PROPVAR_ConvertNumber(propvarIn, 32, 0, &res);
+ if (SUCCEEDED(hr)) *ret = (ULONG)res;
+ return hr;
+ }
+
+ HRESULT WINAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret)
+ {
+ LONGLONG res;
+ HRESULT hr;
+
+ TRACE("%p,%p\n", propvarIn, ret);
+
+ hr = PROPVAR_ConvertNumber(propvarIn, 64, 0, &res);
+ if (SUCCEEDED(hr)) *ret = (ULONGLONG)res;
+ return hr;
+ }
+
+ /******************************************************************
+ * PropVariantChangeType (PROPSYS.@)
+ */
+ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
+ PROPVAR_CHANGE_FLAGS flags, VARTYPE vt)
+ {
+ HRESULT hr;
+
+ FIXME("(%p, %p, %d, %d, %d): semi-stub!\n", ppropvarDest, propvarSrc,
+ propvarSrc->vt, flags, vt);
+
+ switch (vt)
+ {
+ case VT_I2:
+ {
+ SHORT res;
+ hr = PropVariantToInt16(propvarSrc, &res);
+ if (SUCCEEDED(hr))
+ {
+ ppropvarDest->vt = VT_I2;
+ ppropvarDest->u.iVal = res;
+ }
+ return hr;
+ }
+ case VT_UI2:
+ {
+ USHORT res;
+ hr = PropVariantToUInt16(propvarSrc, &res);
+ if (SUCCEEDED(hr))
+ {
+ ppropvarDest->vt = VT_UI2;
+ ppropvarDest->u.uiVal = res;
+ }
+ return hr;
+ }
+ case VT_I4:
+ {
+ LONG res;
+ hr = PropVariantToInt32(propvarSrc, &res);
+ if (SUCCEEDED(hr))
+ {
+ ppropvarDest->vt = VT_I4;
+ ppropvarDest->u.lVal = res;
+ }
+ return hr;
+ }
+ case VT_UI4:
+ {
+ ULONG res;
+ hr = PropVariantToUInt32(propvarSrc, &res);
+ if (SUCCEEDED(hr))
+ {
+ ppropvarDest->vt = VT_UI4;
+ ppropvarDest->u.ulVal = res;
+ }
+ return hr;
+ }
+ case VT_I8:
+ {
+ LONGLONG res;
+ hr = PropVariantToInt64(propvarSrc, &res);
+ if (SUCCEEDED(hr))
+ {
+ ppropvarDest->vt = VT_I8;
+ ppropvarDest->u.hVal.QuadPart = res;
+ }
+ return hr;
+ }
+ case VT_UI8:
+ {
+ ULONGLONG res;
+ hr = PropVariantToUInt64(propvarSrc, &res);
+ if (SUCCEEDED(hr))
+ {
+ ppropvarDest->vt = VT_UI8;
+ ppropvarDest->u.uhVal.QuadPart = res;
+ }
+ return hr;
+ }
+ }
+
+ switch (propvarSrc->vt)
+ {
+ case VT_FILETIME:
+ return PROPVAR_ConvertFILETIME(ppropvarDest, propvarSrc, vt);
+ default:
+ FIXME("Unhandled source type: %d\n", propvarSrc->vt);
+ }
+
+ return E_FAIL;
+ }
+
+ static void PROPVAR_GUIDToWSTR(REFGUID guid, WCHAR *str)
+ {
+ static const WCHAR format[] = {'{','%','0','8','X','-','%','0','4','X','-','%','0','4','X',
+ '-','%','0','2','X','%','0','2','X','-','%','0','2','X','%','0','2','X','%','0','2','X',
+ '%','0','2','X','%','0','2','X','%','0','2','X','}',0};
+
+ sprintfW(str, format, guid->Data1, guid->Data2, guid->Data3,
+ guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
+ guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]);
+ }
+
+ HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar)
+ {
+ TRACE("(%p %p)\n", guid, ppropvar);
+
+ if(!guid)
+ return E_FAIL;
+
+ ppropvar->vt = VT_LPWSTR;
+ ppropvar->u.pwszVal = CoTaskMemAlloc(39*sizeof(WCHAR));
+ if(!ppropvar->u.pwszVal)
+ return E_OUTOFMEMORY;
+
+ PROPVAR_GUIDToWSTR(guid, ppropvar->u.pwszVal);
+ return S_OK;
+ }
+
+ HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar)
+ {
+ TRACE("(%p %p)\n", guid, pvar);
+
+ if(!guid) {
+ FIXME("guid == NULL\n");
+ return E_FAIL;
+ }
+
+ V_VT(pvar) = VT_BSTR;
+ V_BSTR(pvar) = SysAllocStringLen(NULL, 38);
+ if(!V_BSTR(pvar))
+ return E_OUTOFMEMORY;
+
+ PROPVAR_GUIDToWSTR(guid, V_BSTR(pvar));
+ return S_OK;
+ }
+
+ HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar)
+ {
+ TRACE("(%p %u %p)\n", pv, cb, ppropvar);
+
+ ppropvar->u.caub.pElems = CoTaskMemAlloc(cb);
+ if(!ppropvar->u.caub.pElems)
+ return E_OUTOFMEMORY;
+
+ ppropvar->vt = VT_VECTOR|VT_UI1;
+ ppropvar->u.caub.cElems = cb;
+ memcpy(ppropvar->u.caub.pElems, pv, cb);
+ return S_OK;
+ }
+
+ HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar)
+ {
+ SAFEARRAY *arr;
+ void *data;
+ HRESULT hres;
+
+ TRACE("(%p %u %p)\n", pv, cb, pvar);
+
+ arr = SafeArrayCreateVector(VT_UI1, 0, cb);
+ if(!arr)
+ return E_OUTOFMEMORY;
+
+ hres = SafeArrayAccessData(arr, &data);
+ if(FAILED(hres)) {
+ SafeArrayDestroy(arr);
+ return hres;
+ }
+
+ memcpy(data, pv, cb);
+
+ hres = SafeArrayUnaccessData(arr);
+ if(FAILED(hres)) {
+ SafeArrayDestroy(arr);
+ return hres;
+ }
+
+ V_VT(pvar) = VT_ARRAY|VT_UI1;
+ V_ARRAY(pvar) = arr;
+ return S_OK;
+ }
+
+ static inline DWORD PROPVAR_HexToNum(const WCHAR *hex)
+ {
+ DWORD ret;
+
+ if(hex[0]>='0' && hex[0]<='9')
+ ret = hex[0]-'0';
+ else if(hex[0]>='a' && hex[0]<='f')
+ ret = hex[0]-'a'+10;
+ else if(hex[0]>='A' && hex[0]<='F')
+ ret = hex[0]-'A'+10;
+ else
+ return -1;
+
+ ret <<= 4;
+ if(hex[1]>='0' && hex[1]<='9')
+ return ret + hex[1]-'0';
+ else if(hex[1]>='a' && hex[1]<='f')
+ return ret + hex[1]-'a'+10;
+ else if(hex[1]>='A' && hex[1]<='F')
+ return ret + hex[1]-'A'+10;
+ else
+ return -1;
+ }
+
+ static inline HRESULT PROPVAR_WCHARToGUID(const WCHAR *str, int len, GUID *guid)
+ {
+ DWORD i, val=0;
+ const WCHAR *p;
+
+ memset(guid, 0, sizeof(GUID));
+
+ if(len!=38 || str[0]!='{' || str[9]!='-' || str[14]!='-'
+ || str[19]!='-' || str[24]!='-' || str[37]!='}') {
+ WARN("Error parsing %s\n", debugstr_w(str));
+ return E_INVALIDARG;
+ }
+
+ p = str+1;
+ for(i=0; i<4 && val!=-1; i++) {
+ val = PROPVAR_HexToNum(p);
+ guid->Data1 = (guid->Data1<<8) + val;
+ p += 2;
+ }
+ p++;
+ for(i=0; i<2 && val!=-1; i++) {
+ val = PROPVAR_HexToNum(p);
+ guid->Data2 = (guid->Data2<<8) + val;
+ p += 2;
+ }
+ p++;
+ for(i=0; i<2 && val!=-1; i++) {
+ val = PROPVAR_HexToNum(p);
+ guid->Data3 = (guid->Data3<<8) + val;
+ p += 2;
+ }
+ p++;
+ for(i=0; i<8 && val!=-1; i++) {
+ if(i == 2)
+ p++;
+
+ val = guid->Data4[i] = PROPVAR_HexToNum(p);
+ p += 2;
+ }
+
+ if(val == -1) {
+ WARN("Error parsing %s\n", debugstr_w(str));
+ memset(guid, 0, sizeof(GUID));
+ return E_INVALIDARG;
+ }
+ return S_OK;
+ }
+
+ HRESULT WINAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid)
+ {
+ TRACE("%p %p)\n", ppropvar, guid);
+
+ switch(ppropvar->vt) {
+ case VT_BSTR:
+ return PROPVAR_WCHARToGUID(ppropvar->u.bstrVal, SysStringLen(ppropvar->u.bstrVal), guid);
+ case VT_LPWSTR:
+ return PROPVAR_WCHARToGUID(ppropvar->u.pwszVal, strlenW(ppropvar->u.pwszVal), guid);
+
+ default:
+ FIXME("unsupported vt: %d\n", ppropvar->vt);
+ return E_NOTIMPL;
+ }
+ }
+
+ HRESULT WINAPI VariantToGUID(const VARIANT *pvar, GUID *guid)
+ {
+ TRACE("(%p %p)\n", pvar, guid);
+
+ switch(V_VT(pvar)) {
+ case VT_BSTR: {
+ HRESULT hres = PROPVAR_WCHARToGUID(V_BSTR(pvar), SysStringLen(V_BSTR(pvar)), guid);
+ if(hres == E_INVALIDARG)
+ return E_FAIL;
+ return hres;
+ }
+
+ default:
+ FIXME("unsupported vt: %d\n", V_VT(pvar));
+ return E_NOTIMPL;
+ }
+ }
+
+ static int isemptyornull(const PROPVARIANT *propvar)
+ {
+ if (propvar->vt == VT_EMPTY || propvar->vt == VT_NULL)
+ return 1;
+ if ((propvar->vt & VT_ARRAY) == VT_ARRAY)
+ {
+ int i;
+ for (i=0; i<propvar->u.parray->cDims; i++)
+ {
+ if (propvar->u.parray->rgsabound[i].cElements != 0)
+ break;
+ }
+ return i == propvar->u.parray->cDims;
+ }
+ /* FIXME: vectors, byrefs, errors? */
+ return 0;
+ }
+
+ INT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,
+ PROPVAR_COMPARE_UNIT unit, PROPVAR_COMPARE_FLAGS flags)
+ {
+ const PROPVARIANT *propvar2_converted;
+ PROPVARIANT propvar2_static;
+ HRESULT hr;
+ INT res=-1;
+
+ TRACE("%p,%p,%x,%x\n", propvar1, propvar2, unit, flags);
+
+ if (isemptyornull(propvar1))
+ {
+ if (isemptyornull(propvar2))
+ return 0;
+ return (flags & PVCF_TREATEMPTYASGREATERTHAN) ? 1 : -1;
+ }
+
+ if (isemptyornull(propvar2))
+ return (flags & PVCF_TREATEMPTYASGREATERTHAN) ? -1 : 1;
+
+ if (propvar1->vt != propvar2->vt)
+ {
+ hr = PropVariantChangeType(&propvar2_static, propvar2, 0, propvar1->vt);
+
+ if (FAILED(hr))
+ return -1;
+
+ propvar2_converted = &propvar2_static;
+ }
+ else
+ propvar2_converted = propvar2;
+
+ #define CMP_INT_VALUE(var) do { \
+ if (propvar1->u.var > propvar2_converted->u.var) \
+ res = 1; \
+ else if (propvar1->u.var < propvar2_converted->u.var) \
+ res = -1; \
+ else \
+ res = 0; \
+ } while (0)
+
+ switch (propvar1->vt)
+ {
+ case VT_I1:
+ CMP_INT_VALUE(cVal);
+ break;
+ case VT_UI1:
+ CMP_INT_VALUE(bVal);
+ break;
+ case VT_I2:
+ CMP_INT_VALUE(iVal);
+ break;
+ case VT_UI2:
+ CMP_INT_VALUE(uiVal);
+ break;
+ case VT_I4:
+ CMP_INT_VALUE(lVal);
+ break;
+ case VT_UI4:
+ CMP_INT_VALUE(uiVal);
+ break;
+ case VT_I8:
+ CMP_INT_VALUE(hVal.QuadPart);
+ break;
+ case VT_UI8:
+ CMP_INT_VALUE(uhVal.QuadPart);
+ break;
+ case VT_BSTR:
+ /* FIXME: Use string flags. */
+ res = lstrcmpW(propvar1->u.bstrVal, propvar2->u.bstrVal);
+ break;
+ default:
+ FIXME("vartype %d not handled\n", propvar1->vt);
+ res = -1;
+ break;
+ }
+
+ if (propvar2_converted == &propvar2_static)
+ PropVariantClear(&propvar2_static);
+
+ return res;
+ }
/* FUNCTIONS *****************************************************************/
+ static
+ LARGE_INTEGER
+ SampAddRelativeTimeToTime(IN LARGE_INTEGER AbsoluteTime,
+ IN LARGE_INTEGER RelativeTime)
+ {
+ LARGE_INTEGER NewTime;
+
+ NewTime.QuadPart = AbsoluteTime.QuadPart - RelativeTime.QuadPart;
+
+ if (NewTime.QuadPart < 0)
+ NewTime.QuadPart = 0;
+
+ return NewTime;
+ }
+
+
VOID
SampStartRpcServer(VOID)
{
PSAMPR_USER_INFO_BUFFER *Buffer)
{
PSAMPR_USER_INFO_BUFFER InfoBuffer = NULL;
+ SAM_DOMAIN_FIXED_DATA DomainFixedData;
SAM_USER_FIXED_DATA FixedData;
+ LARGE_INTEGER PasswordCanChange;
+ LARGE_INTEGER PasswordMustChange;
ULONG Length = 0;
NTSTATUS Status;
if (InfoBuffer == NULL)
return STATUS_INSUFFICIENT_RESOURCES;
+ /* Get the fixed size domain data */
+ Length = sizeof(SAM_DOMAIN_FIXED_DATA);
+ Status = SampGetObjectAttribute(UserObject->ParentObject,
+ L"F",
+ NULL,
+ (PVOID)&DomainFixedData,
+ &Length);
+ if (!NT_SUCCESS(Status))
+ goto done;
+
+ /* Get the fixed size user data */
Length = sizeof(SAM_USER_FIXED_DATA);
Status = SampGetObjectAttribute(UserObject,
L"F",
InfoBuffer->Logon.LogonCount = FixedData.LogonCount;
InfoBuffer->Logon.UserAccountControl = FixedData.UserAccountControl;
- // OLD_LARGE_INTEGER PasswordCanChange;
- // OLD_LARGE_INTEGER PasswordMustChange;
+ PasswordCanChange = SampAddRelativeTimeToTime(FixedData.PasswordLastSet,
+ DomainFixedData.MinPasswordAge);
+ InfoBuffer->Logon.PasswordCanChange.LowPart = PasswordCanChange.LowPart;
+ InfoBuffer->Logon.PasswordCanChange.HighPart = PasswordCanChange.HighPart;
+
+ PasswordMustChange = SampAddRelativeTimeToTime(FixedData.PasswordLastSet,
+ DomainFixedData.MaxPasswordAge);
+ InfoBuffer->Logon.PasswordMustChange.LowPart = PasswordMustChange.LowPart;
+ InfoBuffer->Logon.PasswordMustChange.HighPart = PasswordMustChange.HighPart;
/* Get the Name string */
Status = SampGetObjectAttributeString(UserObject,
}
+ static NTSTATUS
+ SampQueryUserAll(PSAM_DB_OBJECT UserObject,
+ PSAMPR_USER_INFO_BUFFER *Buffer)
+ {
+ PSAMPR_USER_INFO_BUFFER InfoBuffer = NULL;
+ SAM_DOMAIN_FIXED_DATA DomainFixedData;
+ SAM_USER_FIXED_DATA FixedData;
+ LARGE_INTEGER PasswordCanChange;
+ LARGE_INTEGER PasswordMustChange;
+ ULONG Length = 0;
+ NTSTATUS Status;
+
+ *Buffer = NULL;
+
+ InfoBuffer = midl_user_allocate(sizeof(SAMPR_USER_INFO_BUFFER));
+ if (InfoBuffer == NULL)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ /* Get the fixed size domain data */
+ Length = sizeof(SAM_DOMAIN_FIXED_DATA);
+ Status = SampGetObjectAttribute(UserObject->ParentObject,
+ L"F",
+ NULL,
+ (PVOID)&DomainFixedData,
+ &Length);
+ if (!NT_SUCCESS(Status))
+ goto done;
+
+ /* Get the fixed size user data */
+ Length = sizeof(SAM_USER_FIXED_DATA);
+ Status = SampGetObjectAttribute(UserObject,
+ L"F",
+ NULL,
+ (PVOID)&FixedData,
+ &Length);
+ if (!NT_SUCCESS(Status))
+ goto done;
+
+ if (UserObject->Access & USER_READ_GENERAL)
+ {
+ /* Get the Name string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"Name",
+ &InfoBuffer->All.UserName);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ /* Get the FullName string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"FullName",
+ &InfoBuffer->All.FullName);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ /* Get the user ID*/
+ InfoBuffer->All.UserId = FixedData.UserId;
+
+ /* Get the primary group ID */
+ InfoBuffer->All.PrimaryGroupId = FixedData.PrimaryGroupId;
+
+ /* Get the AdminComment string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"AdminComment",
+ &InfoBuffer->All.AdminComment);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ /* Get the UserComment string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"UserComment",
+ &InfoBuffer->All.UserComment);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ InfoBuffer->All.WhichFields |= USER_ALL_READ_GENERAL_MASK;
+ // USER_ALL_USERNAME |
+ // USER_ALL_FULLNAME |
+ // USER_ALL_USERID |
+ // USER_ALL_PRIMARYGROUPID |
+ // USER_ALL_ADMINCOMMENT |
+ // USER_ALL_USERCOMMENT;
+ }
+
+ if (UserObject->Access & USER_READ_LOGON)
+ {
+ /* Get the HomeDirectory string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"HomeDirectory",
+ &InfoBuffer->All.HomeDirectory);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ /* Get the HomeDirectoryDrive string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"HomeDirectoryDrive",
+ &InfoBuffer->Home.HomeDirectoryDrive);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ /* Get the ScriptPath string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"ScriptPath",
+ &InfoBuffer->All.ScriptPath);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ /* Get the ProfilePath string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"ProfilePath",
+ &InfoBuffer->All.ProfilePath);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ /* Get the WorkStations string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"WorkStations",
+ &InfoBuffer->All.WorkStations);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ InfoBuffer->All.LastLogon.LowPart = FixedData.LastLogon.LowPart;
+ InfoBuffer->All.LastLogon.HighPart = FixedData.LastLogon.HighPart;
+
+ InfoBuffer->All.LastLogoff.LowPart = FixedData.LastLogoff.LowPart;
+ InfoBuffer->All.LastLogoff.HighPart = FixedData.LastLogoff.HighPart;
+
+ // USER_ALL_LOGONHOURS
+
+ InfoBuffer->All.BadPasswordCount = FixedData.BadPasswordCount;
+
+ InfoBuffer->All.LogonCount = FixedData.LogonCount;
+
+ PasswordCanChange = SampAddRelativeTimeToTime(FixedData.PasswordLastSet,
+ DomainFixedData.MinPasswordAge);
+ InfoBuffer->All.PasswordCanChange.LowPart = PasswordCanChange.LowPart;
+ InfoBuffer->All.PasswordCanChange.HighPart = PasswordCanChange.HighPart;
+
+ PasswordMustChange = SampAddRelativeTimeToTime(FixedData.PasswordLastSet,
+ DomainFixedData.MaxPasswordAge);
+ InfoBuffer->All.PasswordMustChange.LowPart = PasswordMustChange.LowPart;
+ InfoBuffer->All.PasswordMustChange.HighPart = PasswordMustChange.HighPart;
+
+ InfoBuffer->All. WhichFields |= /* USER_ALL_READ_LOGON_MASK; */
+ USER_ALL_HOMEDIRECTORY |
+ USER_ALL_HOMEDIRECTORYDRIVE |
+ USER_ALL_SCRIPTPATH |
+ USER_ALL_PROFILEPATH |
+ USER_ALL_WORKSTATIONS |
+ USER_ALL_LASTLOGON |
+ USER_ALL_LASTLOGOFF |
+ // USER_ALL_LOGONHOURS |
+ USER_ALL_BADPASSWORDCOUNT |
+ USER_ALL_LOGONCOUNT;
+ USER_ALL_PASSWORDCANCHANGE |
+ USER_ALL_PASSWORDMUSTCHANGE;
+ }
+
+ if (UserObject->Access & USER_READ_ACCOUNT)
+ {
+ InfoBuffer->All.PasswordLastSet.LowPart = FixedData.PasswordLastSet.LowPart;
+ InfoBuffer->All.PasswordLastSet.HighPart = FixedData.PasswordLastSet.HighPart;
+
+ InfoBuffer->All.AccountExpires.LowPart = FixedData.AccountExpires.LowPart;
+ InfoBuffer->All.AccountExpires.HighPart = FixedData.AccountExpires.HighPart;
+
+ InfoBuffer->All.UserAccountControl = FixedData.UserAccountControl;
+
+ /* Get the Parameters string */
+ Status = SampGetObjectAttributeString(UserObject,
+ L"Parameters",
+ &InfoBuffer->All.Parameters);
+ if (!NT_SUCCESS(Status))
+ {
+ TRACE("Status 0x%08lx\n", Status);
+ goto done;
+ }
+
+ InfoBuffer->All. WhichFields |= USER_ALL_READ_ACCOUNT_MASK;
+ // USER_ALL_PASSWORDLASTSET |
+ // USER_ALL_ACCOUNTEXPIRES |
+ // USER_ALL_USERACCOUNTCONTROL |
+ // USER_ALL_PARAMETERS;
+ }
+
+ if (UserObject->Access & USER_READ_PREFERENCES)
+ {
+ InfoBuffer->All.CountryCode = FixedData.CountryCode;
+
+ InfoBuffer->All.CodePage = FixedData.CodePage;
+
+ InfoBuffer->All. WhichFields |= USER_ALL_READ_PREFERENCES_MASK;
+ // USER_ALL_COUNTRYCODE |
+ // USER_ALL_CODEPAGE;
+ }
+
+ *Buffer = InfoBuffer;
+
+ done:
+ if (!NT_SUCCESS(Status))
+ {
+ if (InfoBuffer != NULL)
+ {
+ if (InfoBuffer->All.UserName.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.UserName.Buffer);
+
+ if (InfoBuffer->All.FullName.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.FullName.Buffer);
+
+ if (InfoBuffer->All.AdminComment.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.AdminComment.Buffer);
+
+ if (InfoBuffer->All.UserComment.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.UserComment.Buffer);
+
+ if (InfoBuffer->All.HomeDirectory.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.HomeDirectory.Buffer);
+
+ if (InfoBuffer->All.HomeDirectoryDrive.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.HomeDirectoryDrive.Buffer);
+
+ if (InfoBuffer->All.ScriptPath.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.ScriptPath.Buffer);
+
+ if (InfoBuffer->All.ProfilePath.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.ProfilePath.Buffer);
+
+ if (InfoBuffer->All.WorkStations.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.WorkStations.Buffer);
+
+ if (InfoBuffer->All.LogonHours.LogonHours != NULL)
+ midl_user_free(InfoBuffer->All.LogonHours.LogonHours);
+
+ if (InfoBuffer->All.Parameters.Buffer != NULL)
+ midl_user_free(InfoBuffer->All.Parameters.Buffer);
+
+ midl_user_free(InfoBuffer);
+ }
+ }
+
+ return Status;
+ }
+
+
/* Function 36 */
NTSTATUS
NTAPI
break;
case UserInternal1Information:
+ case UserAllInformation:
DesiredAccess = 0;
break;
Buffer);
break;
- // case UserAllInformation:
+ case UserAllInformation:
+ Status = SampQueryUserAll(UserObject,
+ Buffer);
+ break;
+
// case UserInternal4Information:
// case UserInternal5Information:
// case UserInternal4InformationNew:
kernel32
ntdll)
- add_dependencies(shdocvw shdocvw_v1)
+ add_dependencies(shell32 shdocvw_v1)
add_pch(shell32 precomp.h)
add_cd_file(TARGET shell32 DESTINATION reactos/system32 FOR all)
if (!lpszPath)
return HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND);
- MultiByteToWideChar(0, 0, lpszPath, -1, szPath, MAX_PATH);
+ MultiByteToWideChar(CP_ACP, 0, lpszPath, -1, szPath, MAX_PATH);
return SHCreateStreamOnFileW(szPath, dwMode, lppStream);
}
return iLen;
}
- /*************************************************************************
- * @ [SHLWAPI.29]
- *
- * Determine if a Unicode character is a space.
- *
- * PARAMS
- * wc [I] Character to check.
- *
- * RETURNS
- * TRUE, if wc is a space,
- * FALSE otherwise.
- */
- BOOL WINAPI IsCharSpaceW(WCHAR wc)
- {
- WORD CharType;
-
- return GetStringTypeW(CT_CTYPE1, &wc, 1, &CharType) && (CharType & C1_SPACE);
- }
-
/*************************************************************************
* @ [SHLWAPI.30]
*
lpSubKey = strRegistryPolicyW;
retval = RegOpenKeyW(HKEY_LOCAL_MACHINE, lpSubKey, &hKey);
- if (retval != ERROR_SUCCESS)
+ if (retval != ERROR_SUCCESS)
retval = RegOpenKeyW(HKEY_CURRENT_USER, lpSubKey, &hKey);
if (retval != ERROR_SUCCESS)
return 0;
/* we have a known policy */
/* check if this policy has been cached */
- if (*polArr == SHELL_NO_POLICY)
+ if (*polArr == SHELL_NO_POLICY)
*polArr = SHGetRestriction(initial, polTable->appstr, polTable->keystr);
return *polArr;
}
HRESULT ret;
DWORD lenW = sizeof(bufW)/sizeof(WCHAR), lenA;
+ if (!pszUrl || !pszPath || !pcchPath || !*pcchPath)
+ return E_INVALIDARG;
+
if(!RtlCreateUnicodeStringFromAsciiz(&urlW, pszUrl))
return E_INVALIDARG;
if((ret = PathCreateFromUrlW(urlW.Buffer, pathW, &lenW, dwReserved)) == E_POINTER) {
LPDWORD pcchPath, DWORD dwReserved)
{
static const WCHAR file_colon[] = { 'f','i','l','e',':',0 };
- HRESULT hr;
- DWORD nslashes = 0;
- WCHAR *ptr;
+ static const WCHAR localhost[] = { 'l','o','c','a','l','h','o','s','t',0 };
+ DWORD nslashes, unescape, len;
+ const WCHAR *src;
+ WCHAR *tpath, *dst;
+ HRESULT ret;
TRACE("(%s,%p,%p,0x%08x)\n", debugstr_w(pszUrl), pszPath, pcchPath, dwReserved);
if (!pszUrl || !pszPath || !pcchPath || !*pcchPath)
return E_INVALIDARG;
-
- if (strncmpW(pszUrl, file_colon, 5))
+ if (CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, pszUrl, 5,
+ file_colon, 5) != CSTR_EQUAL)
return E_INVALIDARG;
pszUrl += 5;
+ ret = S_OK;
- while(*pszUrl == '/' || *pszUrl == '\\') {
+ src = pszUrl;
+ nslashes = 0;
+ while (*src == '/' || *src == '\\') {
nslashes++;
- pszUrl++;
+ src++;
}
- if(isalphaW(*pszUrl) && (pszUrl[1] == ':' || pszUrl[1] == '|') && (pszUrl[2] == '/' || pszUrl[2] == '\\'))
- nslashes = 0;
+ /* We need a temporary buffer so we can compute what size to ask for.
+ * We know that the final string won't be longer than the current pszUrl
+ * plus at most two backslashes. All the other transformations make it
+ * shorter.
+ */
+ len = 2 + lstrlenW(pszUrl) + 1;
+ if (*pcchPath < len)
+ tpath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+ else
+ tpath = pszPath;
- switch(nslashes) {
- case 2:
- pszUrl -= 2;
- break;
+ len = 0;
+ dst = tpath;
+ unescape = 1;
+ switch (nslashes)
+ {
case 0:
+ /* 'file:' + escaped DOS path */
break;
- default:
- pszUrl -= 1;
+ case 1:
+ /* 'file:/' + escaped DOS path */
+ /* fall through */
+ case 3:
+ /* 'file:///' (implied localhost) + escaped DOS path */
+ if (!isalphaW(*src) || (src[1] != ':' && src[1] != '|'))
+ src -= 1;
break;
+ case 2:
+ if (CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, src, 9,
+ localhost, 9) == CSTR_EQUAL &&
+ (src[9] == '/' || src[9] == '\\'))
+ {
+ /* 'file://localhost/' + escaped DOS path */
+ src += 10;
+ }
+ else if (isalphaW(*src) && (src[1] == ':' || src[1] == '|'))
+ {
+ /* 'file://' + unescaped DOS path */
+ unescape = 0;
+ }
+ else
+ {
+ /* 'file://hostname:port/path' (where path is escaped)
+ * or 'file:' + escaped UNC path (\\server\share\path)
+ * The second form is clearly specific to Windows and it might
+ * even be doing a network lookup to try to figure it out.
+ */
+ while (*src && *src != '/' && *src != '\\')
+ src++;
+ len = src - pszUrl;
+ StrCpyNW(dst, pszUrl, len + 1);
+ dst += len;
+ if (isalphaW(src[1]) && (src[2] == ':' || src[2] == '|'))
+ {
+ /* 'Forget' to add a trailing '/', just like Windows */
+ src++;
+ }
+ }
+ break;
+ case 4:
+ /* 'file://' + unescaped UNC path (\\server\share\path) */
+ unescape = 0;
+ if (isalphaW(*src) && (src[1] == ':' || src[1] == '|'))
+ break;
+ /* fall through */
+ default:
+ /* 'file:/...' + escaped UNC path (\\server\share\path) */
+ src -= 2;
}
- hr = UrlUnescapeW((LPWSTR)pszUrl, pszPath, pcchPath, 0);
- if(hr != S_OK) return hr;
-
- for(ptr = pszPath; *ptr; ptr++)
- if(*ptr == '/') *ptr = '\\';
+ /* Copy the remainder of the path */
+ len += lstrlenW(src);
+ StrCpyW(dst, src);
- while(*pszPath == '\\')
- pszPath++;
-
- if(isalphaW(*pszPath) && pszPath[1] == '|' && pszPath[2] == '\\') /* c|\ -> c:\ */
- pszPath[1] = ':';
+ /* First do the Windows-specific path conversions */
+ for (dst = tpath; *dst; dst++)
+ if (*dst == '/') *dst = '\\';
+ if (isalphaW(*tpath) && tpath[1] == '|')
+ tpath[1] = ':'; /* c| -> c: */
- if(nslashes == 2 && (ptr = strchrW(pszPath, '\\'))) { /* \\host\c:\ -> \\hostc:\ */
- ptr++;
- if(isalphaW(*ptr) && (ptr[1] == ':' || ptr[1] == '|') && ptr[2] == '\\') {
- memmove(ptr - 1, ptr, (strlenW(ptr) + 1) * sizeof(WCHAR));
- (*pcchPath)--;
+ /* And only then unescape the path (i.e. escaped slashes are left as is) */
+ if (unescape)
+ {
+ ret = UrlUnescapeW(tpath, NULL, &len, URL_UNESCAPE_INPLACE);
+ if (ret == S_OK)
+ {
+ /* When working in-place UrlUnescapeW() does not set len */
+ len = lstrlenW(tpath);
}
}
- TRACE("Returning %s\n",debugstr_w(pszPath));
+ if (*pcchPath < len + 1)
+ {
+ ret = E_POINTER;
+ *pcchPath = len + 1;
+ }
+ else
+ {
+ *pcchPath = len;
+ if (tpath != pszPath)
+ StrCpyW(pszPath, tpath);
+ }
+ if (tpath != pszPath)
+ HeapFree(GetProcessHeap(), 0, tpath);
+
+ TRACE("Returning (%u) %s\n", *pcchPath, debugstr_w(pszPath));
+ return ret;
+ }
+
+ /*************************************************************************
+ * PathCreateFromUrlAlloc [SHLWAPI.@]
+ */
+ HRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR pszUrl, LPWSTR *pszPath,
+ DWORD dwReserved)
+ {
+ WCHAR pathW[MAX_PATH];
+ DWORD size;
+ HRESULT hr;
+ size = MAX_PATH;
+ hr = PathCreateFromUrlW(pszUrl, pathW, &size, dwReserved);
+ if (SUCCEEDED(hr))
+ {
+ /* Yes, this is supposed to crash if pszPath is NULL */
+ *pszPath = StrDupW(pathW);
+ }
return hr;
}
TRACE("(hkey=%p,%s,%p08x,%d)\n", hKeySrc, debugstr_a(lpszSrcSubKey), hKeyDst, dwReserved);
if (lpszSrcSubKey)
- MultiByteToWideChar(0, 0, lpszSrcSubKey, -1, szSubKeyW, MAX_PATH);
+ MultiByteToWideChar(CP_ACP, 0, lpszSrcSubKey, -1, szSubKeyW, MAX_PATH);
return SHCopyKeyW(hKeySrc, lpszSrcSubKey ? szSubKeyW : NULL, hKeyDst, dwReserved);
}
/*
- * Top level resource file for shlwapi
+ * Resources for shlwapi
*
* Copyright 2004 Jon Griffiths
*
@ stdcall HashData (ptr long ptr long)
@ stdcall IntlStrEqWorkerA(long str str long) StrIsIntlEqualA
@ stdcall IntlStrEqWorkerW(long wstr wstr long) StrIsIntlEqualW
+ @ stdcall IsCharSpaceA(long)
+ @ stdcall IsInternetESCEnabled()
@ stdcall PathAddBackslashA (str)
@ stdcall PathAddBackslashW (wstr)
@ stdcall PathAddExtensionA (str str)
@ stdcall PathCompactPathW(long wstr long)
@ stdcall PathCreateFromUrlA(str ptr ptr long)
@ stdcall PathCreateFromUrlW(wstr ptr ptr long)
+ @ stdcall PathCreateFromUrlAlloc(wstr ptr long)
@ stdcall PathFileExistsA (str)
@ stdcall PathFileExistsW (wstr)
@ stdcall PathFindExtensionA (str)
if (lpszStr)
{
- len = MultiByteToWideChar(0, 0, lpszStr, -1, 0, 0) * sizeof(WCHAR);
+ len = MultiByteToWideChar(CP_ACP, 0, lpszStr, -1, NULL, 0) * sizeof(WCHAR);
*lppszDest = CoTaskMemAlloc(len);
}
else
if (*lppszDest)
{
- MultiByteToWideChar(0, 0, lpszStr, -1, *lppszDest, len/sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, lpszStr, -1, *lppszDest, len/sizeof(WCHAR));
hRet = S_OK;
}
else
HeapFree(GetProcessHeap(), 0, dllname);
return hr;
}
+
+ BOOL WINAPI IsCharSpaceA(CHAR c)
+ {
+ WORD CharType;
+ return GetStringTypeA(GetSystemDefaultLCID(), CT_CTYPE1, &c, 1, &CharType) && (CharType & C1_SPACE);
+ }
+
+ /*************************************************************************
+ * @ [SHLWAPI.29]
+ *
+ * Determine if a Unicode character is a space.
+ *
+ * PARAMS
+ * wc [I] Character to check.
+ *
+ * RETURNS
+ * TRUE, if wc is a space,
+ * FALSE otherwise.
+ */
+ BOOL WINAPI IsCharSpaceW(WCHAR wc)
+ {
+ WORD CharType;
+
+ return GetStringTypeW(CT_CTYPE1, &wc, 1, &CharType) && (CharType & C1_SPACE);
+ }
TRACE("(%s,%d)\n", debugstr_a(lpszName), iInitial);
if (lpszName)
- MultiByteToWideChar(0, 0, lpszName, -1, szBuff, MAX_PATH);
+ MultiByteToWideChar(CP_ACP, 0, lpszName, -1, szBuff, MAX_PATH);
return SHGlobalCounterCreateNamedW(lpszName ? szBuff : NULL, iInitial);
}
ret = UrlCanonicalizeW(url, canonical, pcchCanonicalized, dwFlags);
if(ret == S_OK)
- WideCharToMultiByte(0, 0, canonical, -1, pszCanonicalized,
- *pcchCanonicalized+1, 0, 0);
+ WideCharToMultiByte(CP_ACP, 0, canonical, -1, pszCanonicalized,
+ *pcchCanonicalized+1, NULL, NULL);
HeapFree(GetProcessHeap(), 0, url);
HeapFree(GetProcessHeap(), 0, canonical);
relative = base + INTERNET_MAX_URL_LENGTH;
combined = relative + INTERNET_MAX_URL_LENGTH;
- MultiByteToWideChar(0, 0, pszBase, -1, base, INTERNET_MAX_URL_LENGTH);
- MultiByteToWideChar(0, 0, pszRelative, -1, relative, INTERNET_MAX_URL_LENGTH);
+ MultiByteToWideChar(CP_ACP, 0, pszBase, -1, base, INTERNET_MAX_URL_LENGTH);
+ MultiByteToWideChar(CP_ACP, 0, pszRelative, -1, relative, INTERNET_MAX_URL_LENGTH);
len = *pcchCombined;
ret = UrlCombineW(base, relative, pszCombined?combined:NULL, &len, dwFlags);
return ret;
}
- len2 = WideCharToMultiByte(0, 0, combined, len, 0, 0, 0, 0);
+ len2 = WideCharToMultiByte(CP_ACP, 0, combined, len, NULL, 0, NULL, NULL);
if (len2 > *pcchCombined) {
*pcchCombined = len2;
HeapFree(GetProcessHeap(), 0, base);
return E_POINTER;
}
- WideCharToMultiByte(0, 0, combined, len+1, pszCombined, (*pcchCombined)+1,
- 0, 0);
+ WideCharToMultiByte(CP_ACP, 0, combined, len+1, pszCombined, (*pcchCombined)+1,
+ NULL, NULL);
*pcchCombined = len2;
HeapFree(GetProcessHeap(), 0, base);
return S_OK;
/* Win32 hashes the data as an ASCII string, presumably so that both A+W
* return the same digests for the same URL.
*/
- WideCharToMultiByte(0, 0, pszUrl, -1, szUrl, MAX_PATH, 0, 0);
+ WideCharToMultiByte(CP_ACP, 0, pszUrl, -1, szUrl, MAX_PATH, NULL, NULL);
HashData((const BYTE*)szUrl, (int)strlen(szUrl), lpDest, nDestLen);
return S_OK;
}
WCHAR value[MAX_PATH], data[MAX_PATH];
WCHAR Wxx, Wyy;
- MultiByteToWideChar(0, 0,
+ MultiByteToWideChar(CP_ACP, 0,
"Software\\Microsoft\\Windows\\CurrentVersion\\URL\\Prefixes",
-1, reg_path, MAX_PATH);
RegOpenKeyExW(HKEY_LOCAL_MACHINE, reg_path, 0, 1, &newkey);
return FALSE;
case URLIS_FILEURL:
- return !StrCmpNA("file:", pszUrl, 5);
+ return (CompareStringA(LOCALE_INVARIANT, NORM_IGNORECASE, pszUrl, 5,
+ "file:", 5) == CSTR_EQUAL);
case URLIS_DIRECTORY:
last = pszUrl + strlen(pszUrl) - 1;
*/
BOOL WINAPI UrlIsW(LPCWSTR pszUrl, URLIS Urlis)
{
- static const WCHAR stemp[] = { 'f','i','l','e',':',0 };
+ static const WCHAR file_colon[] = { 'f','i','l','e',':',0 };
PARSEDURLW base;
DWORD res1;
LPCWSTR last;
return FALSE;
case URLIS_FILEURL:
- return !strncmpW(stemp, pszUrl, 5);
+ return (CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, pszUrl, 5,
+ file_colon, 5) == CSTR_EQUAL);
case URLIS_DIRECTORY:
last = pszUrl + strlenW(pszUrl) - 1;
(2*INTERNET_MAX_URL_LENGTH) * sizeof(WCHAR));
out = in + INTERNET_MAX_URL_LENGTH;
- MultiByteToWideChar(0, 0, pszIn, -1, in, INTERNET_MAX_URL_LENGTH);
+ MultiByteToWideChar(CP_ACP, 0, pszIn, -1, in, INTERNET_MAX_URL_LENGTH);
len = INTERNET_MAX_URL_LENGTH;
ret = UrlGetPartW(in, out, &len, dwPart, dwFlags);
return ret;
}
- len2 = WideCharToMultiByte(0, 0, out, len, 0, 0, 0, 0);
+ len2 = WideCharToMultiByte(CP_ACP, 0, out, len, NULL, 0, NULL, NULL);
if (len2 > *pcchOut) {
*pcchOut = len2+1;
HeapFree(GetProcessHeap(), 0, in);
return E_POINTER;
}
- len2 = WideCharToMultiByte(0, 0, out, len+1, pszOut, *pcchOut, 0, 0);
+ len2 = WideCharToMultiByte(CP_ACP, 0, out, len+1, pszOut, *pcchOut, NULL, NULL);
*pcchOut = len2-1;
HeapFree(GetProcessHeap(), 0, in);
return ret;
hRet = MLBuildResURLW(lpszLibName ? szLibName : NULL, hMod, dwFlags,
lpszRes ? szRes : NULL, lpszDest ? szDest : NULL, dwDestLen);
if (SUCCEEDED(hRet) && lpszDest)
- WideCharToMultiByte(CP_ACP, 0, szDest, -1, lpszDest, dwDestLen, 0, 0);
+ WideCharToMultiByte(CP_ACP, 0, szDest, -1, lpszDest, dwDestLen, NULL, NULL);
return hRet;
}
return S_OK;
}
+
+ /*************************************************************************
+ * IsInternetESCEnabled [SHLWAPI.@]
+ */
+ BOOL WINAPI IsInternetESCEnabled(void)
+ {
+ FIXME(": stub\n");
+ return FALSE;
+ }
CAPTION "ReactOS セットアップ"
FONT 9, "MS UI Gothic", 0, 0, 0x0
BEGIN
- LTEXT "ReactOSの開発者より、下記のオープンソ ース プロジェクトに感謝の意を表 明します。 これらのすべてまたは一部はReactOSの開発に利用されました。",
+ LTEXT "ReactOSの開発者より、下記のオープンソース プロジェクトに感謝の意を表明します。 これらのすべてまたは一部はReactOSの開発に利用されました。",
IDC_STATIC,15,7,286,19
LISTBOX IDC_PROJECTS,15,30,286,75,LBS_NOSEL | LBS_HASSTRINGS |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL
LTEXT "ReactOSはGPLの下にライセンスされており、すべてまたは一部を再利用、 再配布する場合はGPLに従う必要があります。",
IDC_STATIC,15,110,227,19
- PUSHBUTTON "GPLを表 示(&V)...",IDC_VIEWGPL,251,110,50,19
+ PUSHBUTTON "GPLを表示(&V)...",IDC_VIEWGPL,251,110,50,19
LTEXT "セットアップを続行するには [次へ] をクリックしてください。",IDC_STATIC,15,136,
195,17
END
FONT 9, "MS UI Gothic"
BEGIN
ICON IDI_ICON4, IDC_STATIC, 21, 7, 20, 20
- LTEXT "システムのロケールを、アプリケーションで使用したい言語に設定してください。 ユーザーロケールは、数値、通貨、日付の表 示方法を制御します。 ", IDC_STATIC, 53, 7, 253, 20
+ LTEXT "システムのロケールを、アプリケーションで使用したい言語に設定してください。 ユーザーロケールは、数値、通貨、日付の表示方法を制御します。 ", IDC_STATIC, 53, 7, 253, 20
LTEXT "", IDC_LOCALETEXT, 53, 29, 250, 16
LTEXT "システム、ユーザーロケール設定変更には[カスタマイズ]をクリックします。",
IDC_STATIC, 53, 50, 166, 25
BEGIN
IDS_ACKTITLE "承認"
IDS_ACKSUBTITLE "ReactOS が利用しているプロジェクトとライセンスに関する情報"
- IDS_OWNERTITLE "ソ フトウェアの個人用設定"
+ IDS_OWNERTITLE "ソフトウェアの個人用設定"
IDS_OWNERSUBTITLE "この情報は、ReactOS の個人用設定に用いられます。"
IDS_COMPUTERTITLE "コンピュータ名と Administrator パスワード"
IDS_COMPUTERSUBTITLE "コンピュータ名と Administrator パスワードを入力する必要があります。"
IDS_CMT_DEVMGMT "デバイス マネージャを起動します"
IDS_CMT_EVENTVIEW "イベント ビューアを起動します"
IDS_CMT_EXPLORER "エクスプローラを起動します"
- IDS_CMT_MSCONFIG "システムの構 成プログラムを開きます"
+ IDS_CMT_MSCONFIG "システムの構成プログラムを開きます"
IDS_CMT_NOTEPAD "テキストエディタを起動します"
IDS_CMT_RDESKTOP "リモート デスクトップを起動します"
IDS_CMT_REGEDIT "レジストリ エディタを起動します"
STRINGTABLE
BEGIN
IDS_GAMES "ゲーム"
- IDS_CMT_SOLITAIRE "ソ リティア"
+ IDS_CMT_SOLITAIRE "ソリティア"
IDS_CMT_WINEMINE "WineMine"
- IDS_CMT_SPIDER "スパイダ ソ リティア"
+ IDS_CMT_SPIDER "スパイダ ソリティア"
END
STRINGTABLE
STRINGTABLE
BEGIN
IDS_SHORT_CALC "電卓.lnk"
- IDS_SHORT_CHARMAP "文字コード表 .lnk"
+ IDS_SHORT_CHARMAP "文字コード表.lnk"
IDS_SHORT_CMD "コマンド プロンプト.lnk"
IDS_SHORT_DEVICE "デバイス マネージャ.lnk"
IDS_SHORT_DOWNLOADER "ReactOS アプリケーション マネージャ.lnk"
IDS_SHORT_KBSWITCH "キーボード レイアウト 切替器.lnk"
IDS_SHORT_MAGNIFY "拡大鏡.lnk"
IDS_SHORT_MPLAY32 "マルチメディア プレーヤ.lnk"
- IDS_SHORT_MSCONFIG "システムの構 成.lnk"
+ IDS_SHORT_MSCONFIG "システムの構成.lnk"
IDS_SHORT_NOTEPAD "メモ帳.lnk"
IDS_SHORT_RDESKTOP "リモート デスクトップ接続.lnk"
IDS_SHORT_REGEDIT "レジストリ エディタ.lnk"
IDS_SHORT_SNAP "スナップショット.lnk"
IDS_SHORT_SNDVOL32 "ボリューム コントロール.lnk"
IDS_SHORT_SNDREC32 "オーディオレコーダ.lnk"
- IDS_SHORT_SOLITAIRE "ソ リティア.lnk"
+ IDS_SHORT_SOLITAIRE "ソリティア.lnk"
IDS_SHORT_WINEMINE "WineMine.lnk"
IDS_SHORT_WORDPAD "ワードパッド.lnk"
IDS_SHORT_PAINT "ペイント.lnk"
- IDS_SHORT_SPIDER "スパイダ ソ リティア.lnk"
+ IDS_SHORT_SPIDER "スパイダ ソリティア.lnk"
END
STRINGTABLE
- add_definitions(-D__WINESRC__)
+ add_definitions(
+ -D__WINESRC__
+ -D_URLMON_
+ -DENTRY_PREFIX=URLMON_
+ -DPROXY_DELEGATION
+ -DWINE_REGISTER_DLL
+ -DPROXY_CLSID_IS="{0x79EAC9F1,0xBAF9,0x11CE,{0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B}}")
remove_definitions(-D_WIN32_WINNT=0x502)
add_definitions(-D_WIN32_WINNT=0x600)
add_rpcproxy_files(urlmon_urlmon.idl)
list(APPEND SOURCE
+ axinstall.c
bindctx.c
binding.c
bindprot.c
mimefilter.c
mk.c
protocol.c
- protproxy.c
sec_mgr.c
session.c
umon.c
uri.c
urlmon_main.c
usrmarshal.c
- rsrc.rc
+ urlmon.rc
${CMAKE_CURRENT_BINARY_DIR}/proxy.dlldata.c
${CMAKE_CURRENT_BINARY_DIR}/urlmon_urlmon_p.c
${CMAKE_CURRENT_BINARY_DIR}/urlmon_stubs.c
${CMAKE_CURRENT_BINARY_DIR}/urlmon.def)
add_library(urlmon SHARED ${SOURCE})
-
set_module_type(urlmon win32dll)
-
- target_link_libraries(urlmon
- uuid
- wine
- ${PSEH_LIB})
-
- add_importlibs(urlmon
- rpcrt4
- ole32
- oleaut32
- shlwapi
- shell32
- wininet
- user32
- advapi32
- msvcrt
- kernel32
- ntdll)
-
- add_definitions(
- -DENTRY_PREFIX=URLMON_
- -DPROXY_DELEGATION
- -DWINE_REGISTER_DLL
- -D_URLMON_)
-
+ target_link_libraries(urlmon uuid wine ${PSEH_LIB})
+ add_importlibs(urlmon rpcrt4 propsys ole32 oleaut32 shlwapi shell32 wininet user32 advapi32 advpack msvcrt kernel32 ntdll)
add_pch(urlmon urlmon_main.h)
- add_definitions(-DPROXY_CLSID_IS="{0x79EAC9F1,0xBAF9,0x11CE,{0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B}}")
add_cd_file(TARGET urlmon DESTINATION reactos/system32 FOR all)
--- /dev/null
+ /*
+ * Copyright 2012 Jacek Caban for CodeWeavers
+ *
+ * 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 OEMRESOURCE
+
+ #include <assert.h>
+
+ #include "urlmon_main.h"
+ #include "resource.h"
+
+ #include "advpub.h"
+ #include "fdi.h"
+
+ #include "wine/debug.h"
+
+ WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
+
+ static const WCHAR ctxW[] = {'c','t','x',0};
+ static const WCHAR cab_extW[] = {'.','c','a','b',0};
+ static const WCHAR infW[] = {'i','n','f',0};
+ static const WCHAR dllW[] = {'d','l','l',0};
+ static const WCHAR ocxW[] = {'o','c','x',0};
+
+ enum install_type {
+ INSTALL_UNKNOWN,
+ INSTALL_DLL,
+ INSTALL_INF
+ };
+
+ typedef struct {
+ IUri *uri;
+ IBindStatusCallback *callback;
+ BOOL release_on_stop;
+ BOOL cancel;
+ WCHAR *install_file;
+ const WCHAR *cache_file;
+ const WCHAR *tmp_dir;
+ const WCHAR *file_name;
+ enum install_type install_type;
+ HWND hwnd;
+ int counter;
+ INT_PTR timer;
+ } install_ctx_t;
+
+ static void release_install_ctx(install_ctx_t *ctx)
+ {
+ if(ctx->uri)
+ IUri_Release(ctx->uri);
+ if(ctx->callback)
+ IBindStatusCallback_Release(ctx->callback);
+ heap_free(ctx->install_file);
+ heap_free(ctx);
+ }
+
+ static inline BOOL file_exists(const WCHAR *file_name)
+ {
+ return GetFileAttributesW(file_name) != INVALID_FILE_ATTRIBUTES;
+ }
+
+ static HRESULT extract_cab_file(install_ctx_t *ctx)
+ {
+ size_t path_len, file_len;
+ WCHAR *ptr;
+ HRESULT hres;
+
+ hres = ExtractFilesW(ctx->cache_file, ctx->tmp_dir, 0, NULL, NULL, 0);
+ if(FAILED(hres)) {
+ WARN("ExtractFilesW failed: %08x\n", hres);
+ return hres;
+ }
+
+ path_len = strlenW(ctx->tmp_dir);
+ file_len = strlenW(ctx->file_name);
+ ctx->install_file = heap_alloc((path_len+file_len+2)*sizeof(WCHAR));
+ if(!ctx->install_file)
+ return E_OUTOFMEMORY;
+
+ memcpy(ctx->install_file, ctx->tmp_dir, path_len*sizeof(WCHAR));
+ ctx->install_file[path_len] = '\\';
+ memcpy(ctx->install_file+path_len+1, ctx->file_name, (file_len+1)*sizeof(WCHAR));
+
+ /* NOTE: Assume that file_name contains ".cab" extension */
+ ptr = ctx->install_file+path_len+1+file_len-3;
+
+ memcpy(ptr, infW, sizeof(infW));
+ if(file_exists(ctx->install_file)) {
+ ctx->install_type = INSTALL_INF;
+ return S_OK;
+ }
+
+ memcpy(ptr, dllW, sizeof(dllW));
+ if(file_exists(ctx->install_file)) {
+ ctx->install_type = INSTALL_DLL;
+ return S_OK;
+ }
+
+ memcpy(ptr, ocxW, sizeof(ocxW));
+ if(file_exists(ctx->install_file)) {
+ ctx->install_type = INSTALL_DLL;
+ return S_OK;
+ }
+
+ FIXME("No known install file\n");
+ return E_NOTIMPL;
+ }
+
+ static HRESULT setup_dll(install_ctx_t *ctx)
+ {
+ HMODULE module;
+ HRESULT hres;
+
+ HRESULT (WINAPI *reg_func)(void);
+
+ module = LoadLibraryW(ctx->install_file);
+ if(!module)
+ return E_FAIL;
+
+ reg_func = (void*)GetProcAddress(module, "DllRegisterServer");
+ if(reg_func) {
+ hres = reg_func();
+ }else {
+ WARN("no DllRegisterServer function\n");
+ hres = E_FAIL;
+ }
+
+ FreeLibrary(module);
+ return hres;
+ }
+
+ static void expand_command(install_ctx_t *ctx, const WCHAR *cmd, WCHAR *buf, size_t *size)
+ {
+ const WCHAR *ptr = cmd, *prev_ptr = cmd;
+ size_t len = 0, len2;
+
+ static const WCHAR expand_dirW[] = {'%','E','X','T','R','A','C','T','_','D','I','R','%'};
+
+ while((ptr = strchrW(ptr, '%'))) {
+ if(buf)
+ memcpy(buf+len, prev_ptr, ptr-prev_ptr);
+ len += ptr-prev_ptr;
+
+ if(!strncmpiW(ptr, expand_dirW, sizeof(expand_dirW)/sizeof(WCHAR))) {
+ len2 = strlenW(ctx->tmp_dir);
+ if(buf)
+ memcpy(buf+len, ctx->tmp_dir, len2*sizeof(WCHAR));
+ len += len2;
+ ptr += sizeof(expand_dirW)/sizeof(WCHAR);
+ }else {
+ FIXME("Can't expand %s\n", debugstr_w(ptr));
+ if(buf)
+ buf[len] = '%';
+ len++;
+ ptr++;
+ }
+
+ prev_ptr = ptr;
+ }
+
+ if(buf)
+ strcpyW(buf+len, prev_ptr);
+ *size = len + strlenW(prev_ptr) + 1;
+ }
+
+ static HRESULT process_hook_section(install_ctx_t *ctx, const WCHAR *sect_name)
+ {
+ WCHAR buf[2048], val[2*MAX_PATH];
+ const WCHAR *key;
+ DWORD len;
+ HRESULT hres;
+
+ static const WCHAR runW[] = {'r','u','n',0};
+
+ len = GetPrivateProfileStringW(sect_name, NULL, NULL, buf, sizeof(buf)/sizeof(*buf), ctx->install_file);
+ if(!len)
+ return S_OK;
+
+ for(key = buf; *key; key += strlenW(key)+1) {
+ if(!strcmpiW(key, runW)) {
+ WCHAR *cmd;
+ size_t size;
+
+ len = GetPrivateProfileStringW(sect_name, runW, NULL, val, sizeof(val)/sizeof(*val), ctx->install_file);
+
+ TRACE("Run %s\n", debugstr_w(val));
+
+ expand_command(ctx, val, NULL, &size);
+
+ cmd = heap_alloc(size*sizeof(WCHAR));
+ if(!cmd)
+ heap_free(cmd);
+
+ expand_command(ctx, val, cmd, &size);
+ hres = RunSetupCommandW(ctx->hwnd, cmd, NULL, ctx->tmp_dir, NULL, NULL, 0, NULL);
+ heap_free(cmd);
+ if(FAILED(hres))
+ return hres;
+ }else {
+ FIXME("Unsupported hook %s\n", debugstr_w(key));
+ return E_NOTIMPL;
+ }
+ }
+
+ return S_OK;
+ }
+
+ static HRESULT install_inf_file(install_ctx_t *ctx)
+ {
+ WCHAR buf[2048], sect_name[128];
+ BOOL default_install = TRUE;
+ const WCHAR *key;
+ DWORD len;
+ HRESULT hres;
+
+ static const WCHAR setup_hooksW[] = {'S','e','t','u','p',' ','H','o','o','k','s',0};
+ static const WCHAR add_codeW[] = {'A','d','d','.','C','o','d','e',0};
+
+ len = GetPrivateProfileStringW(setup_hooksW, NULL, NULL, buf, sizeof(buf)/sizeof(*buf), ctx->install_file);
+ if(len) {
+ default_install = FALSE;
+
+ for(key = buf; *key; key += strlenW(key)+1) {
+ TRACE("[Setup Hooks] key: %s\n", debugstr_w(key));
+
+ len = GetPrivateProfileStringW(setup_hooksW, key, NULL, sect_name, sizeof(sect_name)/sizeof(*sect_name),
+ ctx->install_file);
+ if(!len) {
+ WARN("Could not get key value\n");
+ return E_FAIL;
+ }
+
+ hres = process_hook_section(ctx, sect_name);
+ if(FAILED(hres))
+ return hres;
+ }
+ }
+
+ len = GetPrivateProfileStringW(add_codeW, NULL, NULL, buf, sizeof(buf)/sizeof(*buf), ctx->install_file);
+ if(len) {
+ FIXME("[Add.Code] section not supported\n");
+
+ /* Don't throw an error if we successfully ran setup hooks;
+ installation is likely to be complete enough */
+ if(default_install)
+ return E_NOTIMPL;
+ }
+
+ if(default_install) {
+ hres = RunSetupCommandW(ctx->hwnd, ctx->install_file, NULL, ctx->tmp_dir, NULL, NULL, RSC_FLAG_INF, NULL);
+ if(FAILED(hres)) {
+ WARN("RunSetupCommandW failed: %08x\n", hres);
+ return hres;
+ }
+ }
+
+ return S_OK;
+ }
+
+ static HRESULT install_cab_file(install_ctx_t *ctx)
+ {
+ WCHAR tmp_path[MAX_PATH], tmp_dir[MAX_PATH];
+ BOOL res = FALSE, leave_temp = FALSE;
+ DWORD i;
+ HRESULT hres;
+
+ GetTempPathW(sizeof(tmp_path)/sizeof(WCHAR), tmp_path);
+
+ for(i=0; !res && i < 100; i++) {
+ GetTempFileNameW(tmp_path, NULL, GetTickCount() + i*17037, tmp_dir);
+ res = CreateDirectoryW(tmp_dir, NULL);
+ }
+ if(!res)
+ return E_FAIL;
+
+ ctx->tmp_dir = tmp_dir;
+
+ TRACE("Using temporary directory %s\n", debugstr_w(tmp_dir));
+
+ hres = extract_cab_file(ctx);
+ if(SUCCEEDED(hres)) {
+ if(ctx->callback)
+ IBindStatusCallback_OnProgress(ctx->callback, 0, 0, BINDSTATUS_INSTALLINGCOMPONENTS, ctx->install_file);
+
+ switch(ctx->install_type) {
+ case INSTALL_INF:
+ hres = install_inf_file(ctx);
+ break;
+ case INSTALL_DLL:
+ FIXME("Installing DLL, registering in temporary location\n");
+ hres = setup_dll(ctx);
+ if(SUCCEEDED(hres))
+ leave_temp = TRUE;
+ break;
+ default:
+ assert(0);
+ }
+ }
+
+ if(!leave_temp)
+ RemoveDirectoryW(ctx->tmp_dir);
+ return hres;
+ }
+
+ static void update_counter(install_ctx_t *ctx, HWND hwnd)
+ {
+ WCHAR text[100];
+
+ if(--ctx->counter <= 0) {
+ HWND button_hwnd;
+
+ KillTimer(hwnd, ctx->timer);
+ LoadStringW(urlmon_instance, IDS_AXINSTALL_INSTALL, text, sizeof(text)/sizeof(WCHAR));
+
+ button_hwnd = GetDlgItem(hwnd, ID_AXINSTALL_INSTALL_BTN);
+ EnableWindow(button_hwnd, TRUE);
+ }else {
+ WCHAR buf[100];
+ LoadStringW(urlmon_instance, IDS_AXINSTALL_INSTALLN, buf, sizeof(buf)/sizeof(WCHAR));
+ sprintfW(text, buf, ctx->counter);
+ }
+
+ SetDlgItemTextW(hwnd, ID_AXINSTALL_INSTALL_BTN, text);
+ }
+
+ static BOOL init_warning_dialog(HWND hwnd, install_ctx_t *ctx)
+ {
+ BSTR display_uri;
+ HRESULT hres;
+
+ if(!SetPropW(hwnd, ctxW, ctx))
+ return FALSE;
+
+ hres = IUri_GetDisplayUri(ctx->uri, &display_uri);
+ if(FAILED(hres))
+ return FALSE;
+
+ SetDlgItemTextW(hwnd, ID_AXINSTALL_LOCATION, display_uri);
+ SysFreeString(display_uri);
+
+ SendDlgItemMessageW(hwnd, ID_AXINSTALL_ICON, STM_SETICON,
+ (WPARAM)LoadIconW(0, (const WCHAR*)OIC_WARNING), 0);
+
+ ctx->counter = 4;
+ update_counter(ctx, hwnd);
+ ctx->timer = SetTimer(hwnd, 1, 1000, NULL);
+ return TRUE;
+ }
+
+ static INT_PTR WINAPI warning_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+ {
+ switch(msg) {
+ case WM_INITDIALOG: {
+ if(!init_warning_dialog(hwnd, (install_ctx_t*)lparam))
+ EndDialog(hwnd, 0);
+ return TRUE;
+ }
+ case WM_COMMAND:
+ switch(wparam) {
+ case ID_AXINSTALL_INSTALL_BTN: {
+ install_ctx_t *ctx = GetPropW(hwnd, ctxW);
+ if(ctx)
+ ctx->cancel = FALSE;
+ EndDialog(hwnd, 0);
+ return FALSE;
+ }
+ case IDCANCEL:
+ EndDialog(hwnd, 0);
+ return FALSE;
+ }
+ case WM_TIMER:
+ update_counter(GetPropW(hwnd, ctxW), hwnd);
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+ static BOOL install_warning(install_ctx_t *ctx)
+ {
+ IWindowForBindingUI *window_iface;
+ HWND parent_hwnd = NULL;
+ HRESULT hres;
+
+ if(!ctx->callback) {
+ FIXME("no callback\n");
+ return FALSE;
+ }
+
+ hres = IBindStatusCallback_QueryInterface(ctx->callback, &IID_IWindowForBindingUI, (void**)&window_iface);
+ if(FAILED(hres))
+ return FALSE;
+
+ hres = IWindowForBindingUI_GetWindow(window_iface, &IID_ICodeInstall, &ctx->hwnd);
+ IWindowForBindingUI_Release(window_iface);
+ if(FAILED(hres))
+ return FALSE;
+
+ ctx->cancel = TRUE;
+ DialogBoxParamW(urlmon_instance, MAKEINTRESOURCEW(ID_AXINSTALL_WARNING_DLG), parent_hwnd, warning_proc, (LPARAM)ctx);
+ return !ctx->cancel;
+ }
+
+ static HRESULT install_file(install_ctx_t *ctx, const WCHAR *cache_file)
+ {
+ BSTR path;
+ HRESULT hres;
+
+ TRACE("%s\n", debugstr_w(cache_file));
+
+ ctx->cache_file = cache_file;
+
+ if(!install_warning(ctx)) {
+ TRACE("Installation cancelled\n");
+ return S_OK;
+ }
+
+ hres = IUri_GetPath(ctx->uri, &path);
+ if(SUCCEEDED(hres)) {
+ const WCHAR *ptr, *ptr2, *ext;
+
+ ptr = strrchrW(path, '/');
+ if(!ptr)
+ ptr = path;
+ else
+ ptr++;
+
+ ptr2 = strrchrW(ptr, '\\');
+ if(ptr2)
+ ptr = ptr2+1;
+
+ ctx->file_name = ptr;
+ ext = strrchrW(ptr, '.');
+ if(!ext)
+ ext = ptr;
+
+ if(!strcmpW(ext, cab_extW)) {
+ hres = install_cab_file(ctx);
+ }else {
+ FIXME("Unsupported extension %s\n", debugstr_w(ext));
+ hres = E_NOTIMPL;
+ }
+ SysFreeString(path);
+ }
+
+ return hres;
+ }
+
+ static void failure_msgbox(install_ctx_t *ctx, HRESULT hres)
+ {
+ WCHAR buf[1024], fmt[1024];
+
+ LoadStringW(urlmon_instance, IDS_AXINSTALL_FAILURE, fmt, sizeof(fmt)/sizeof(WCHAR));
+ sprintfW(buf, fmt, hres);
+ MessageBoxW(ctx->hwnd, buf, NULL, MB_OK);
+ }
+
+ static HRESULT distunit_on_stop(void *ctx, const WCHAR *cache_file, HRESULT hresult, const WCHAR *error_str)
+ {
+ install_ctx_t *install_ctx = ctx;
+
+ TRACE("(%p %s %08x %s)\n", ctx, debugstr_w(cache_file), hresult, debugstr_w(error_str));
+
+ if(hresult == S_OK) {
+ hresult = install_file(install_ctx, cache_file);
+ if(FAILED(hresult))
+ failure_msgbox(ctx, hresult);
+ }
+
+ if(install_ctx->callback)
+ IBindStatusCallback_OnStopBinding(install_ctx->callback, hresult, error_str);
+
+ if(install_ctx->release_on_stop)
+ release_install_ctx(install_ctx);
+ return S_OK;
+ }
+
+ /***********************************************************************
+ * AsyncInstallDistributionUnit (URLMON.@)
+ */
+ HRESULT WINAPI AsyncInstallDistributionUnit(const WCHAR *szDistUnit, const WCHAR *szTYPE, const WCHAR *szExt,
+ DWORD dwFileVersionMS, DWORD dwFileVersionLS, const WCHAR *szURL, IBindCtx *pbc, void *pvReserved, DWORD flags)
+ {
+ install_ctx_t *ctx;
+ HRESULT hres;
+
+ TRACE("(%s %s %s %x %x %s %p %p %x)\n", debugstr_w(szDistUnit), debugstr_w(szTYPE), debugstr_w(szExt),
+ dwFileVersionMS, dwFileVersionLS, debugstr_w(szURL), pbc, pvReserved, flags);
+
+ if(szDistUnit || szTYPE || szExt)
+ FIXME("Unsupported arguments\n");
+
+ ctx = heap_alloc_zero(sizeof(*ctx));
+ if(!ctx)
+ return E_OUTOFMEMORY;
+
+ hres = CreateUri(szURL, 0, 0, &ctx->uri);
+ if(FAILED(hres)) {
+ heap_free(ctx);
+ return E_OUTOFMEMORY;
+ }
+
+ ctx->callback = bsc_from_bctx(pbc);
+
+ hres = download_to_cache(ctx->uri, distunit_on_stop, ctx, ctx->callback);
+ if(hres == MK_S_ASYNCHRONOUS)
+ ctx->release_on_stop = TRUE;
+ else
+ release_install_ctx(ctx);
+
+ return hres;
+ }
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
- static WCHAR BSCBHolder[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };
+ static WCHAR bscb_holderW[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };
extern IID IID_IBindStatusCallbackHolder;
return SUCCEEDED(hres) ? ret : NULL;
}
+ static IBindStatusCallback *bsch_from_bctx(IBindCtx *bctx)
+ {
+ IBindStatusCallback *bsc;
+ IUnknown *unk;
+ HRESULT hres;
+
+ hres = IBindCtx_GetObjectParam(bctx, bscb_holderW, &unk);
+ if(FAILED(hres))
+ return NULL;
+
+ hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&bsc);
+ IUnknown_Release(unk);
+ return SUCCEEDED(hres) ? bsc : NULL;
+ }
+
+ IBindStatusCallback *bsc_from_bctx(IBindCtx *bctx)
+ {
+ BindStatusCallback *holder;
+ IBindStatusCallback *bsc;
+ HRESULT hres;
+
+ bsc = bsch_from_bctx(bctx);
+ if(!bsc)
+ return NULL;
+
+ hres = IBindStatusCallback_QueryInterface(bsc, &IID_IBindStatusCallbackHolder, (void**)&holder);
+ if(FAILED(hres))
+ return bsc;
+
+ if(holder->callback) {
+ IBindStatusCallback_Release(bsc);
+ bsc = holder->callback;
+ IBindStatusCallback_AddRef(bsc);
+ }
+
+ IBindStatusCallbackEx_Release(&holder->IBindStatusCallbackEx_iface);
+ return bsc;
+ }
+
static inline BindStatusCallback *impl_from_IBindStatusCallbackEx(IBindStatusCallbackEx *iface)
{
return CONTAINING_RECORD(iface, BindStatusCallback, IBindStatusCallbackEx_iface);
}
if(*ppv) {
- IBindStatusCallback_AddRef((IUnknown*)*ppv);
+ IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
{
BindStatusCallback *This = impl_from_IBindStatusCallbackEx(iface);
- TRACE("%p)->(%u %u %u %s)\n", This, ulProgress, ulProgressMax, ulStatusCode,
+ TRACE("%p)->(%u %u %s %s)\n", This, ulProgress, ulProgressMax, debugstr_bindstatus(ulStatusCode),
debugstr_w(szStatusText));
return IBindStatusCallback_OnProgress(This->callback, ulProgress,
REFIID riid, void **ppv)
{
BindStatusCallback *This = impl_from_IServiceProvider(iface);
- return IBindStatusCallback_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
+ return IBindStatusCallbackEx_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
}
static ULONG WINAPI BSCServiceProvider_AddRef(IServiceProvider *iface)
{
BindStatusCallback *This = impl_from_IServiceProvider(iface);
- return IBindStatusCallback_AddRef(&This->IBindStatusCallbackEx_iface);
+ return IBindStatusCallbackEx_AddRef(&This->IBindStatusCallbackEx_iface);
}
static ULONG WINAPI BSCServiceProvider_Release(IServiceProvider *iface)
{
BindStatusCallback *This = impl_from_IServiceProvider(iface);
- return IBindStatusCallback_Release(&This->IBindStatusCallbackEx_iface);
+ return IBindStatusCallbackEx_Release(&This->IBindStatusCallbackEx_iface);
}
static HRESULT WINAPI BSCServiceProvider_QueryService(IServiceProvider *iface,
if(IsEqualGUID(&IID_IHttpNegotiate, guidService)) {
TRACE("(%p)->(IID_IHttpNegotiate %s %p)\n", This, debugstr_guid(riid), ppv);
- return IBindStatusCallback_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
+ return IBindStatusCallbackEx_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
}
if(IsEqualGUID(&IID_IHttpNegotiate2, guidService)) {
TRACE("(%p)->(IID_IHttpNegotiate2 %s %p)\n", This, debugstr_guid(riid), ppv);
- return IBindStatusCallback_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
+ return IBindStatusCallbackEx_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
}
if(IsEqualGUID(&IID_IAuthenticate, guidService)) {
TRACE("(%p)->(IID_IAuthenticate %s %p)\n", This, debugstr_guid(riid), ppv);
- return IBindStatusCallback_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
+ return IBindStatusCallbackEx_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
}
TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
REFIID riid, void **ppv)
{
BindStatusCallback *This = impl_from_IHttpNegotiate2(iface);
- return IBindStatusCallback_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
+ return IBindStatusCallbackEx_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
}
static ULONG WINAPI BSCHttpNegotiate_AddRef(IHttpNegotiate2 *iface)
{
BindStatusCallback *This = impl_from_IHttpNegotiate2(iface);
- return IBindStatusCallback_AddRef(&This->IBindStatusCallbackEx_iface);
+ return IBindStatusCallbackEx_AddRef(&This->IBindStatusCallbackEx_iface);
}
static ULONG WINAPI BSCHttpNegotiate_Release(IHttpNegotiate2 *iface)
{
BindStatusCallback *This = impl_from_IHttpNegotiate2(iface);
- return IBindStatusCallback_Release(&This->IBindStatusCallbackEx_iface);
+ return IBindStatusCallbackEx_Release(&This->IBindStatusCallbackEx_iface);
}
static HRESULT WINAPI BSCHttpNegotiate_BeginningTransaction(IHttpNegotiate2 *iface,
static HRESULT WINAPI BSCAuthenticate_QueryInterface(IAuthenticate *iface, REFIID riid, void **ppv)
{
BindStatusCallback *This = impl_from_IAuthenticate(iface);
- return IBindStatusCallback_QueryInterface(&This->IAuthenticate_iface, riid, ppv);
+ return IBindStatusCallbackEx_QueryInterface(&This->IBindStatusCallbackEx_iface, riid, ppv);
}
static ULONG WINAPI BSCAuthenticate_AddRef(IAuthenticate *iface)
{
BindStatusCallback *This = impl_from_IAuthenticate(iface);
- return IBindStatusCallback_AddRef(&This->IBindStatusCallbackEx_iface);
+ return IBindStatusCallbackEx_AddRef(&This->IBindStatusCallbackEx_iface);
}
static ULONG WINAPI BSCAuthenticate_Release(IAuthenticate *iface)
{
BindStatusCallback *This = impl_from_IAuthenticate(iface);
- return IBindStatusCallback_Release(&This->IBindStatusCallbackEx_iface);
+ return IBindStatusCallbackEx_Release(&This->IBindStatusCallbackEx_iface);
}
static HRESULT WINAPI BSCAuthenticate_Authenticate(IAuthenticate *iface,
{
BindStatusCallback *holder;
IBindStatusCallback *bsc, *prev = NULL;
- IUnknown *unk;
HRESULT hres;
TRACE("(%p %p %p %x)\n", pbc, pbsc, ppbscPrevious, dwReserved);
if (!pbc || !pbsc)
return E_INVALIDARG;
- hres = IBindCtx_GetObjectParam(pbc, BSCBHolder, &unk);
- if(SUCCEEDED(hres)) {
- hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&bsc);
- IUnknown_Release(unk);
+ bsc = bsch_from_bctx(pbc);
+ if(bsc) {
+ hres = IBindStatusCallback_QueryInterface(bsc, &IID_IBindStatusCallbackHolder, (void**)&holder);
if(SUCCEEDED(hres)) {
- hres = IBindStatusCallback_QueryInterface(bsc, &IID_IBindStatusCallbackHolder, (void**)&holder);
- if(SUCCEEDED(hres)) {
- if(ppbscPrevious) {
- IBindStatusCallback_AddRef(holder->callback);
- *ppbscPrevious = holder->callback;
- }
-
- set_callback(holder, pbsc);
-
- IBindStatusCallback_Release(bsc);
- IBindStatusCallback_Release(&holder->IBindStatusCallbackEx_iface);
- return S_OK;
- }else {
- prev = bsc;
+ if(ppbscPrevious) {
+ IBindStatusCallback_AddRef(holder->callback);
+ *ppbscPrevious = holder->callback;
}
+
+ set_callback(holder, pbsc);
+
+ IBindStatusCallback_Release(bsc);
+ IBindStatusCallbackEx_Release(&holder->IBindStatusCallbackEx_iface);
+ return S_OK;
+ }else {
+ prev = bsc;
}
- IBindCtx_RevokeObjectParam(pbc, BSCBHolder);
+ IBindCtx_RevokeObjectParam(pbc, bscb_holderW);
}
hres = wrap_callback(pbsc, &bsc);
if(SUCCEEDED(hres)) {
- hres = IBindCtx_RegisterObjectParam(pbc, BSCBHolder, (IUnknown*)bsc);
+ hres = IBindCtx_RegisterObjectParam(pbc, bscb_holderW, (IUnknown*)bsc);
IBindStatusCallback_Release(bsc);
}
if(FAILED(hres)) {
*/
HRESULT WINAPI RevokeBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc)
{
- BindStatusCallback *holder;
IBindStatusCallback *callback;
- IUnknown *unk;
- BOOL dorevoke = FALSE;
- HRESULT hres;
TRACE("(%p %p)\n", pbc, pbsc);
if (!pbc || !pbsc)
return E_INVALIDARG;
- hres = IBindCtx_GetObjectParam(pbc, BSCBHolder, &unk);
- if(FAILED(hres))
+ callback = bsc_from_bctx(pbc);
+ if(!callback)
return S_OK;
- hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&callback);
- IUnknown_Release(unk);
- if(FAILED(hres))
- return S_OK;
+ if(callback == pbsc)
+ IBindCtx_RevokeObjectParam(pbc, bscb_holderW);
- hres = IBindStatusCallback_QueryInterface(callback, &IID_IBindStatusCallbackHolder, (void**)&holder);
- if(SUCCEEDED(hres)) {
- if(pbsc == holder->callback)
- dorevoke = TRUE;
- IBindStatusCallback_Release(&holder->IBindStatusCallbackEx_iface);
- }else if(pbsc == callback) {
- dorevoke = TRUE;
- }
IBindStatusCallback_Release(callback);
-
- if(dorevoke)
- IBindCtx_RevokeObjectParam(pbc, BSCBHolder);
-
return S_OK;
}
BOOL use_cache_file;
DWORD state;
HRESULT hres;
+ CLSID clsid;
download_state_t download_state;
IUnknown *obj;
IMoniker *mon;
DWORD read;
HRESULT hres;
- do hres = IInternetProtocol_Read(stgmed_buf->protocol, buf, sizeof(buf), &read);
+ do hres = IInternetProtocolEx_Read(stgmed_buf->protocol, buf, sizeof(buf), &read);
while(hres == S_OK);
}
if(!(binding->state & BINDING_STOPPED)) {
binding->state |= BINDING_STOPPED;
- IBindStatusCallback_OnStopBinding(binding->callback, hres, str);
binding->hres = hres;
+ IBindStatusCallback_OnStopBinding(binding->callback, hres, str);
}
}
heap_free(clsid_str);
IBindStatusCallback_OnProgress(binding->callback, 0, 0, BINDSTATUS_ENDSYNCOPERATION, NULL);
+ binding->clsid = CLSID_NULL;
stop_binding(binding, hres, NULL);
if(FAILED(hres))
if(!ref) {
if(This->file != INVALID_HANDLE_VALUE)
CloseHandle(This->file);
- IInternetProtocol_Release(This->protocol);
+ IInternetProtocolEx_Release(This->protocol);
heap_free(This->cache_file);
heap_free(This);
ret->hres = S_OK;
ret->cache_file = NULL;
- IInternetProtocol_AddRef(protocol);
+ IInternetProtocolEx_AddRef(protocol);
ret->protocol = protocol;
URLMON_LockModule();
TRACE("(%p)->(%p %d %p)\n", This, pv, cb, pcbRead);
if(This->buf->file == INVALID_HANDLE_VALUE) {
- hres = This->buf->hres = IInternetProtocol_Read(This->buf->protocol, (PBYTE)pv, cb, &read);
+ hres = This->buf->hres = IInternetProtocolEx_Read(This->buf->protocol, (PBYTE)pv, cb, &read);
}else {
hres = ReadFile(This->buf->file, pv, cb, &read, NULL) ? S_OK : INET_E_DOWNLOAD_FAILURE;
}
DWORD *pdwResult, LPOLESTR *pszResult, DWORD *pdwReserved)
{
Binding *This = impl_from_IBinding(iface);
- FIXME("(%p)->(%p %p %p %p)\n", This, pclsidProtocol, pdwResult, pszResult, pdwReserved);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p %p %p %p)\n", This, pclsidProtocol, pdwResult, pszResult, pdwReserved);
+
+ if(!pdwResult || !pszResult || pdwReserved)
+ return E_INVALIDARG;
+
+ if(!(This->state & BINDING_STOPPED)) {
+ *pclsidProtocol = CLSID_NULL;
+ *pdwResult = 0;
+ *pszResult = NULL;
+ return S_OK;
+ }
+
+ *pclsidProtocol = This->hres==S_OK ? CLSID_NULL : This->clsid;
+ *pdwResult = This->hres;
+ *pszResult = NULL;
+ return S_OK;
}
static const IBindingVtbl BindingVtbl = {
{
Binding *This = impl_from_IInternetProtocolSink(iface);
- TRACE("(%p)->(%u %s)\n", This, ulStatusCode, debugstr_w(szStatusText));
+ TRACE("(%p)->(%s %s)\n", This, debugstr_bindstatus(ulStatusCode), debugstr_w(szStatusText));
switch(ulStatusCode) {
case BINDSTATUS_FINDINGRESOURCE:
on_progress(This, 0, 0, BINDSTATUS_SENDINGREQUEST, szStatusText);
break;
case BINDSTATUS_PROTOCOLCLASSID:
+ CLSIDFromString(szStatusText, &This->clsid);
break;
case BINDSTATUS_MIMETYPEAVAILABLE:
case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
formatetc.tymed = stgmed.tymed;
formatetc.cfFormat = This->clipboard_format;
- IBindStatusCallback_OnDataAvailable(This->callback, bscf, progress,
+ hres = IBindStatusCallback_OnDataAvailable(This->callback, bscf, progress,
&formatetc, &stgmed);
+ if(hres != S_OK) {
+ if(This->download_state != END_DOWNLOAD) {
+ This->download_state = END_DOWNLOAD;
+ IBindStatusCallback_OnProgress(This->callback, progress, progress_max,
+ BINDSTATUS_ENDDOWNLOADDATA, This->url);
+ }
+
+ WARN("OnDataAvailable returned %x\n", hres);
+ stop_binding(This, hres, NULL);
+ return;
+ }
if(This->download_state == END_DOWNLOAD)
stop_binding(This, S_OK, NULL);
TRACE("(%p)->(%08x %d %s)\n", This, hrResult, dwError, debugstr_w(szResult));
stop_binding(This, hrResult, szResult);
+
IInternetProtocolEx_Terminate(&This->protocol->IInternetProtocolEx_iface, 0);
return S_OK;
}
TRACE("(%p)->(%p %p)\n", This, grfBINDF, pbindinfo);
*grfBINDF = This->bindf;
-
- *pbindinfo = This->bindinfo;
-
- if(pbindinfo->szExtraInfo || pbindinfo->szCustomVerb)
- FIXME("copy strings\n");
-
- if(pbindinfo->stgmedData.pUnkForRelease)
- IUnknown_AddRef(pbindinfo->stgmedData.pUnkForRelease);
-
- if(pbindinfo->pUnk)
- IUnknown_AddRef(pbindinfo->pUnk);
-
- return S_OK;
+ return CopyBindInfo(&This->bindinfo, pbindinfo);
}
static HRESULT WINAPI InternetBindInfo_GetBindString(IInternetBindInfo *iface,
#define WM_MK_CONTINUE (WM_USER+101)
#define WM_MK_RELEASE (WM_USER+102)
- static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+ static void process_tasks(BindProtocol *This)
{
- switch(msg) {
- case WM_MK_CONTINUE: {
- BindProtocol *This = (BindProtocol*)lParam;
- task_header_t *task;
+ task_header_t *task;
- while(1) {
- EnterCriticalSection(&This->section);
+ while(1) {
+ EnterCriticalSection(&This->section);
- task = This->task_queue_head;
- if(task) {
- This->task_queue_head = task->next;
- if(!This->task_queue_head)
- This->task_queue_tail = NULL;
- }
+ task = This->task_queue_head;
+ if(task) {
+ This->task_queue_head = task->next;
+ if(!This->task_queue_head)
+ This->task_queue_tail = NULL;
+ }
- LeaveCriticalSection(&This->section);
+ LeaveCriticalSection(&This->section);
- if(!task)
- break;
+ if(!task)
+ break;
- This->continue_call++;
- task->proc(This, task);
- This->continue_call--;
- }
+ This->continue_call++;
+ task->proc(This, task);
+ This->continue_call--;
+ }
+ }
+
+ static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+ {
+ switch(msg) {
+ case WM_MK_CONTINUE: {
+ BindProtocol *This = (BindProtocol*)lParam;
+
+ process_tasks(This);
IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
return 0;
}
}
+ static inline BOOL is_apartment_thread(BindProtocol *This)
+ {
+ return This->apartment_thread == GetCurrentThreadId();
+ }
+
static inline BOOL do_direct_notif(BindProtocol *This)
{
- return !(This->pi & PI_APARTMENTTHREADED) || (This->apartment_thread == GetCurrentThreadId() && !This->continue_call);
+ return !(This->pi & PI_APARTMENTTHREADED) || (is_apartment_thread(This) && !This->continue_call);
}
- static HRESULT handle_mime_filter(BindProtocol *This, IInternetProtocol *mime_filter, LPCWSTR mime)
+ static HRESULT handle_mime_filter(BindProtocol *This, IInternetProtocol *mime_filter)
{
PROTOCOLFILTERDATA filter_data = { sizeof(PROTOCOLFILTERDATA), NULL, NULL, NULL, 0 };
- IInternetProtocolSink *protocol_sink, *old_sink;
- ProtocolProxy *filter_proxy;
HRESULT hres;
- hres = IInternetProtocol_QueryInterface(mime_filter, &IID_IInternetProtocolSink, (void**)&protocol_sink);
- if(FAILED(hres))
- return hres;
-
- hres = create_protocol_proxy(&This->default_protocol_handler.IInternetProtocol_iface, This->protocol_sink, &filter_proxy);
+ hres = IInternetProtocol_QueryInterface(mime_filter, &IID_IInternetProtocolSink, (void**)&This->protocol_sink_handler);
if(FAILED(hres)) {
- IInternetProtocolSink_Release(protocol_sink);
+ This->protocol_sink_handler = &This->default_protocol_handler.IInternetProtocolSink_iface;
return hres;
}
- old_sink = This->protocol_sink;
- This->protocol_sink = protocol_sink;
- This->filter_proxy = filter_proxy;
-
IInternetProtocol_AddRef(mime_filter);
This->protocol_handler = mime_filter;
- filter_data.pProtocol = &filter_proxy->IInternetProtocol_iface;
- hres = IInternetProtocol_Start(mime_filter, mime, &filter_proxy->IInternetProtocolSink_iface,
+ filter_data.pProtocol = &This->default_protocol_handler.IInternetProtocol_iface;
+ hres = IInternetProtocol_Start(mime_filter, This->mime, &This->default_protocol_handler.IInternetProtocolSink_iface,
&This->IInternetBindInfo_iface, PI_FILTER_MODE|PI_FORCE_ASYNC,
(HANDLE_PTR)&filter_data);
if(FAILED(hres)) {
- IInternetProtocolSink_Release(old_sink);
+ IInternetProtocolSink_Release(This->protocol_sink_handler);
+ IInternetProtocol_Release(This->protocol_handler);
+ This->protocol_sink_handler = &This->default_protocol_handler.IInternetProtocolSink_iface;
+ This->protocol_handler = &This->default_protocol_handler.IInternetProtocol_iface;
return hres;
}
- IInternetProtocolSink_ReportProgress(old_sink, BINDSTATUS_LOADINGMIMEHANDLER, NULL);
- IInternetProtocolSink_Release(old_sink);
+ /* NOTE: IE9 calls it on the new protocol_sink. It doesn't make sense to is seems to be a bug there. */
+ IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_LOADINGMIMEHANDLER, NULL);
- This->pi &= ~PI_MIMEVERIFICATION; /* FIXME: more tests */
return S_OK;
}
HRESULT hres;
heap_free(This->mime);
- This->mime = NULL;
+ This->mime = heap_strdupW(mime);
- mime_filter = get_mime_filter(mime);
- if(mime_filter) {
+ if(This->protocol_handler==&This->default_protocol_handler.IInternetProtocol_iface
+ && (mime_filter = get_mime_filter(mime))) {
TRACE("Got mime filter for %s\n", debugstr_w(mime));
- hres = handle_mime_filter(This, mime_filter, mime);
+ hres = handle_mime_filter(This, mime_filter);
IInternetProtocol_Release(mime_filter);
if(FAILED(hres))
FIXME("MIME filter failed: %08x\n", hres);
- }else {
- This->mime = heap_strdupW(mime);
-
- if(verified || !(This->pi & PI_MIMEVERIFICATION)) {
- This->reported_mime = TRUE;
+ }
- if(This->protocol_sink)
- IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_MIMETYPEAVAILABLE, mime);
- }
+ if(This->reported_mime || verified || !(This->pi & PI_MIMEVERIFICATION)) {
+ This->reported_mime = TRUE;
+ IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_MIMETYPEAVAILABLE, mime);
}
}
IInternetBindInfo_Release(This->bind_info);
if(This->protocol_handler && This->protocol_handler != &This->default_protocol_handler.IInternetProtocol_iface)
IInternetProtocol_Release(This->protocol_handler);
- if(This->filter_proxy)
- IInternetProtocol_Release(&This->filter_proxy->IInternetProtocol_iface);
+ if(This->protocol_sink_handler &&
+ This->protocol_sink_handler != &This->default_protocol_handler.IInternetProtocolSink_iface)
+ IInternetProtocolSink_Release(This->protocol_sink_handler);
if(This->uri)
IUri_Release(This->uri);
+ SysFreeString(This->display_uri);
set_binding_sink(This, NULL, NULL);
if(This->notif_hwnd)
release_notif_hwnd(This->notif_hwnd);
+ This->section.DebugInfo->Spare[0] = 0;
DeleteCriticalSection(&This->section);
heap_free(This->mime);
&This->IInternetBindInfo_iface, 0, NULL);
IInternetProtocolEx_Release(protocolex);
}else {
- BSTR display_uri;
-
- hres = IUri_GetDisplayUri(pUri, &display_uri);
+ hres = IUri_GetDisplayUri(pUri, &This->display_uri);
if(FAILED(hres))
return hres;
- hres = IInternetProtocol_Start(protocol, display_uri, &This->IInternetProtocolSink_iface,
+ hres = IInternetProtocol_Start(protocol, This->display_uri, &This->IInternetProtocolSink_iface,
&This->IInternetBindInfo_iface, 0, 0);
- SysFreeString(display_uri);
}
+ if(SUCCEEDED(hres))
+ process_tasks(This);
return hres;
}
static HRESULT WINAPI ProtocolHandler_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
{
- ERR("should not be called\n");
+ BindProtocol *This = impl_from_IInternetProtocol(iface);
+
+ *ppv = NULL;
+ if(IsEqualGUID(&IID_IUnknown, riid)) {
+ TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
+ *ppv = &This->default_protocol_handler.IInternetProtocol_iface;
+ }else if(IsEqualGUID(&IID_IInternetProtocolRoot, riid)) {
+ TRACE("(%p)->(IID_IInternetProtocolRoot %p)\n", This, ppv);
+ *ppv = &This->default_protocol_handler.IInternetProtocol_iface;
+ }else if(IsEqualGUID(&IID_IInternetProtocol, riid)) {
+ TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv);
+ *ppv = &This->default_protocol_handler.IInternetProtocol_iface;
+ }else if(IsEqualGUID(&IID_IInternetProtocolSink, riid)) {
+ TRACE("(%p)->(IID_IInternetProtocolSink %p)\n", This, ppv);
+ *ppv = &This->default_protocol_handler.IInternetProtocolSink_iface;
+ }
+
+ if(*ppv) {
+ IInternetProtocol_AddRef(iface);
+ return S_OK;
+ }
+
+ WARN("not supported interface %s\n", debugstr_guid(riid));
return E_NOINTERFACE;
}
IInternetProtocol_Terminate(This->protocol, 0);
- if(This->filter_proxy) {
- IInternetProtocol_Release(&This->filter_proxy->IInternetProtocol_iface);
- This->filter_proxy = NULL;
- }
-
set_binding_sink(This, NULL, NULL);
if(This->bind_info) {
if(read < cb) {
ULONG cread = 0;
+ if(is_apartment_thread(This))
+ This->continue_call++;
hres = IInternetProtocol_Read(This->protocol, (BYTE*)pv+read, cb-read, &cread);
+ if(is_apartment_thread(This))
+ This->continue_call--;
read += cread;
}
ProtocolHandler_UnlockRequest
};
+ static inline BindProtocol *impl_from_IInternetProtocolSinkHandler(IInternetProtocolSink *iface)
+ {
+ return CONTAINING_RECORD(iface, BindProtocol, default_protocol_handler.IInternetProtocolSink_iface);
+ }
+
+ static HRESULT WINAPI ProtocolSinkHandler_QueryInterface(IInternetProtocolSink *iface,
+ REFIID riid, void **ppvObject)
+ {
+ BindProtocol *This = impl_from_IInternetProtocolSinkHandler(iface);
+ return IInternetProtocol_QueryInterface(&This->default_protocol_handler.IInternetProtocol_iface,
+ riid, ppvObject);
+ }
+
+ static ULONG WINAPI ProtocolSinkHandler_AddRef(IInternetProtocolSink *iface)
+ {
+ BindProtocol *This = impl_from_IInternetProtocolSinkHandler(iface);
+ return IInternetProtocolEx_AddRef(&This->IInternetProtocolEx_iface);
+ }
+
+ static ULONG WINAPI ProtocolSinkHandler_Release(IInternetProtocolSink *iface)
+ {
+ BindProtocol *This = impl_from_IInternetProtocolSinkHandler(iface);
+ return IInternetProtocolEx_Release(&This->IInternetProtocolEx_iface);
+ }
+
+ static HRESULT WINAPI ProtocolSinkHandler_Switch(IInternetProtocolSink *iface,
+ PROTOCOLDATA *pProtocolData)
+ {
+ BindProtocol *This = impl_from_IInternetProtocolSinkHandler(iface);
+
+ TRACE("(%p)->(%p)\n", This, pProtocolData);
+
+ if(!This->protocol_sink) {
+ IInternetProtocol_Continue(This->protocol_handler, pProtocolData);
+ return S_OK;
+ }
+
+ return IInternetProtocolSink_Switch(This->protocol_sink, pProtocolData);
+ }
+
+ static HRESULT WINAPI ProtocolSinkHandler_ReportProgress(IInternetProtocolSink *iface,
+ ULONG status_code, LPCWSTR status_text)
+ {
+ BindProtocol *This = impl_from_IInternetProtocolSinkHandler(iface);
+
+ TRACE("(%p)->(%s %s)\n", This, debugstr_bindstatus(status_code), debugstr_w(status_text));
+
+ if(!This->protocol_sink)
+ return S_OK;
+
+ switch(status_code) {
+ case BINDSTATUS_FINDINGRESOURCE:
+ case BINDSTATUS_CONNECTING:
+ case BINDSTATUS_REDIRECTING:
+ case BINDSTATUS_SENDINGREQUEST:
+ case BINDSTATUS_CACHEFILENAMEAVAILABLE:
+ case BINDSTATUS_DIRECTBIND:
+ case BINDSTATUS_ACCEPTRANGES:
+ case BINDSTATUS_DECODING:
+ IInternetProtocolSink_ReportProgress(This->protocol_sink, status_code, status_text);
+ break;
+
+ case BINDSTATUS_BEGINDOWNLOADDATA:
+ IInternetProtocolSink_ReportData(This->protocol_sink, This->bscf, This->progress, This->progress_max);
+ break;
+
+ case BINDSTATUS_MIMETYPEAVAILABLE:
+ mime_available(This, status_text, FALSE);
+ break;
+
+ case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
+ mime_available(This, status_text, TRUE);
+ break;
+
+ default:
+ FIXME("unsupported ulStatusCode %u\n", status_code);
+ }
+
+ return S_OK;
+ }
+
+ static HRESULT WINAPI ProtocolSinkHandler_ReportData(IInternetProtocolSink *iface,
+ DWORD bscf, ULONG progress, ULONG progress_max)
+ {
+ BindProtocol *This = impl_from_IInternetProtocolSinkHandler(iface);
+
+ TRACE("(%p)->(%x %u %u)\n", This, bscf, progress, progress_max);
+
+ This->bscf = bscf;
+ This->progress = progress;
+ This->progress_max = progress_max;
+
+ if(!This->protocol_sink)
+ return S_OK;
+
+ if((This->pi & PI_MIMEVERIFICATION) && !This->reported_mime) {
+ BYTE buf[BUFFER_SIZE];
+ DWORD read = 0;
+ LPWSTR mime;
+ HRESULT hres;
+
+ do {
+ read = 0;
+ hres = IInternetProtocol_Read(This->protocol, buf,
+ sizeof(buf)-This->buf_size, &read);
+ if(FAILED(hres) && hres != E_PENDING)
+ return hres;
+
+ if(!This->buf) {
+ This->buf = heap_alloc(BUFFER_SIZE);
+ if(!This->buf)
+ return E_OUTOFMEMORY;
+ }else if(read + This->buf_size > BUFFER_SIZE) {
+ BYTE *tmp;
+
+ tmp = heap_realloc(This->buf, read+This->buf_size);
+ if(!tmp)
+ return E_OUTOFMEMORY;
+ This->buf = tmp;
+ }
+
+ memcpy(This->buf+This->buf_size, buf, read);
+ This->buf_size += read;
+ }while(This->buf_size < MIME_TEST_SIZE && hres == S_OK);
+
+ if(This->buf_size < MIME_TEST_SIZE && hres != S_FALSE)
+ return S_OK;
+
+ bscf = BSCF_FIRSTDATANOTIFICATION;
+ if(hres == S_FALSE)
+ bscf |= BSCF_LASTDATANOTIFICATION|BSCF_DATAFULLYAVAILABLE;
+
+ if(!This->reported_mime) {
+ BSTR raw_uri;
+
+ hres = IUri_GetRawUri(This->uri, &raw_uri);
+ if(FAILED(hres))
+ return hres;
+
+ hres = FindMimeFromData(NULL, raw_uri, This->buf, min(This->buf_size, MIME_TEST_SIZE),
+ This->mime, 0, &mime, 0);
+ SysFreeString(raw_uri);
+ if(FAILED(hres))
+ return hres;
+
+ heap_free(This->mime);
+ This->mime = heap_strdupW(mime);
+ CoTaskMemFree(mime);
+ This->reported_mime = TRUE;
+ if(This->protocol_sink)
+ IInternetProtocolSink_ReportProgress(This->protocol_sink, BINDSTATUS_MIMETYPEAVAILABLE, This->mime);
+ }
+ }
+
+ if(!This->protocol_sink)
+ return S_OK;
+
+ return IInternetProtocolSink_ReportData(This->protocol_sink, bscf, progress, progress_max);
+ }
+
+ static HRESULT WINAPI ProtocolSinkHandler_ReportResult(IInternetProtocolSink *iface,
+ HRESULT hrResult, DWORD dwError, LPCWSTR szResult)
+ {
+ BindProtocol *This = impl_from_IInternetProtocolSinkHandler(iface);
+
+ TRACE("(%p)->(%08x %d %s)\n", This, hrResult, dwError, debugstr_w(szResult));
+
+ if(This->protocol_sink)
+ return IInternetProtocolSink_ReportResult(This->protocol_sink, hrResult, dwError, szResult);
+ return S_OK;
+ }
+
+ static const IInternetProtocolSinkVtbl InternetProtocolSinkHandlerVtbl = {
+ ProtocolSinkHandler_QueryInterface,
+ ProtocolSinkHandler_AddRef,
+ ProtocolSinkHandler_Release,
+ ProtocolSinkHandler_Switch,
+ ProtocolSinkHandler_ReportProgress,
+ ProtocolSinkHandler_ReportData,
+ ProtocolSinkHandler_ReportResult
+ };
+
static inline BindProtocol *impl_from_IInternetBindInfo(IInternetBindInfo *iface)
{
return CONTAINING_RECORD(iface, BindProtocol, IInternetBindInfo_iface);
return E_OUTOFMEMORY;
memcpy(data, pProtocolData, sizeof(PROTOCOLDATA));
- if(!do_direct_notif(This)) {
+ if((This->pi&PI_APARTMENTTHREADED && pProtocolData->grfFlags&PI_FORCE_ASYNC)
+ || !do_direct_notif(This)) {
switch_task_t *task;
task = heap_alloc(sizeof(switch_task_t));
if(!task)
+ {
+ heap_free(data);
return E_OUTOFMEMORY;
+ }
task->data = data;
return S_OK;
}
- if(!This->protocol_sink) {
- IInternetProtocol_Continue(This->protocol_handler, data);
- return S_OK;
- }
-
- return IInternetProtocolSink_Switch(This->protocol_sink, data);
- }
-
- static void report_progress(BindProtocol *This, ULONG status_code, LPCWSTR status_text)
- {
- switch(status_code) {
- case BINDSTATUS_FINDINGRESOURCE:
- case BINDSTATUS_CONNECTING:
- case BINDSTATUS_REDIRECTING:
- case BINDSTATUS_SENDINGREQUEST:
- case BINDSTATUS_CACHEFILENAMEAVAILABLE:
- case BINDSTATUS_DIRECTBIND:
- case BINDSTATUS_ACCEPTRANGES:
- if(This->protocol_sink)
- IInternetProtocolSink_ReportProgress(This->protocol_sink, status_code, status_text);
- break;
-
- case BINDSTATUS_BEGINDOWNLOADDATA:
- if(This->protocol_sink)
- IInternetProtocolSink_ReportData(This->protocol_sink, This->bscf, This->progress, This->progress_max);
- break;
-
- case BINDSTATUS_MIMETYPEAVAILABLE:
- mime_available(This, status_text, FALSE);
- break;
-
- case BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE:
- mime_available(This, status_text, TRUE);
- break;
-
- default:
- FIXME("unsupported ulStatusCode %u\n", status_code);
- }
+ return IInternetProtocolSink_Switch(This->protocol_sink_handler, data);
}
typedef struct {
{
on_progress_task_t *task = (on_progress_task_t*)t;
- report_progress(This, task->status_code, task->status_text);
+ IInternetProtocolSink_ReportProgress(This->protocol_sink_handler, task->status_code, task->status_text);
heap_free(task->status_text);
heap_free(task);
TRACE("(%p)->(%u %s)\n", This, ulStatusCode, debugstr_w(szStatusText));
if(do_direct_notif(This)) {
- report_progress(This, ulStatusCode, szStatusText);
+ IInternetProtocolSink_ReportProgress(This->protocol_sink_handler, ulStatusCode, szStatusText);
}else {
on_progress_task_t *task;
return S_OK;
}
- static HRESULT report_data(BindProtocol *This, DWORD bscf, ULONG progress, ULONG progress_max)
- {
- This->bscf = bscf;
- This->progress = progress;
- This->progress_max = progress_max;
-
- if(!This->protocol_sink)
- return S_OK;
-
- if((This->pi & PI_MIMEVERIFICATION) && !This->reported_mime) {
- BYTE buf[BUFFER_SIZE];
- DWORD read = 0;
- LPWSTR mime;
- HRESULT hres;
-
- do {
- read = 0;
- hres = IInternetProtocol_Read(This->protocol, buf,
- sizeof(buf)-This->buf_size, &read);
- if(FAILED(hres) && hres != E_PENDING)
- return hres;
-
- if(!This->buf) {
- This->buf = heap_alloc(BUFFER_SIZE);
- if(!This->buf)
- return E_OUTOFMEMORY;
- }else if(read + This->buf_size > BUFFER_SIZE) {
- BYTE *tmp;
-
- tmp = heap_realloc(This->buf, read+This->buf_size);
- if(!tmp)
- return E_OUTOFMEMORY;
- This->buf = tmp;
- }
-
- memcpy(This->buf+This->buf_size, buf, read);
- This->buf_size += read;
- }while(This->buf_size < MIME_TEST_SIZE && hres == S_OK);
-
- if(This->buf_size < MIME_TEST_SIZE && hres != S_FALSE)
- return S_OK;
-
- bscf = BSCF_FIRSTDATANOTIFICATION;
- if(hres == S_FALSE)
- bscf |= BSCF_LASTDATANOTIFICATION|BSCF_DATAFULLYAVAILABLE;
-
- if(!This->reported_mime) {
- BSTR raw_uri;
-
- hres = IUri_GetRawUri(This->uri, &raw_uri);
- if(FAILED(hres))
- return hres;
-
- hres = FindMimeFromData(NULL, raw_uri, This->buf, min(This->buf_size, MIME_TEST_SIZE),
- This->mime, 0, &mime, 0);
- SysFreeString(raw_uri);
- if(FAILED(hres))
- return hres;
-
- mime_available(This, mime, TRUE);
- CoTaskMemFree(mime);
- }
- }
-
- if(!This->protocol_sink)
- return S_OK;
-
- return IInternetProtocolSink_ReportData(This->protocol_sink, bscf, progress, progress_max);
- }
-
typedef struct {
task_header_t header;
DWORD bscf;
{
report_data_task_t *task = (report_data_task_t*)t;
- report_data(This, task->bscf, task->progress, task->progress_max);
+ IInternetProtocolSink_ReportData(This->protocol_sink_handler,
+ task->bscf, task->progress, task->progress_max);
+
heap_free(task);
}
{
BindProtocol *This = impl_from_IInternetProtocolSink(iface);
- TRACE("(%p)->(%d %u %u)\n", This, grfBSCF, ulProgress, ulProgressMax);
+ TRACE("(%p)->(%x %u %u)\n", This, grfBSCF, ulProgress, ulProgressMax);
if(!This->protocol_sink)
return S_OK;
return S_OK;
}
- return report_data(This, grfBSCF, ulProgress, ulProgressMax);
+ return IInternetProtocolSink_ReportData(This->protocol_sink_handler,
+ grfBSCF, ulProgress, ulProgressMax);
}
typedef struct {
{
report_result_task_t *task = (report_result_task_t*)t;
- if(This->protocol_sink)
- IInternetProtocolSink_ReportResult(This->protocol_sink, task->hres, task->err, task->str);
+ IInternetProtocolSink_ReportResult(This->protocol_sink_handler, task->hres, task->err, task->str);
heap_free(task->str);
heap_free(task);
if(!This->protocol_sink)
return E_FAIL;
-
This->reported_result = TRUE;
if(!do_direct_notif(This)) {
return S_OK;
}
- return IInternetProtocolSink_ReportResult(This->protocol_sink, hrResult, dwError, szResult);
+ return IInternetProtocolSink_ReportResult(This->protocol_sink_handler, hrResult, dwError, szResult);
}
static const IInternetProtocolSinkVtbl InternetProtocolSinkVtbl = {
ret->IWinInetHttpInfo_iface.lpVtbl = &WinInetHttpInfoVtbl;
ret->default_protocol_handler.IInternetProtocol_iface.lpVtbl = &InternetProtocolHandlerVtbl;
+ ret->default_protocol_handler.IInternetProtocolSink_iface.lpVtbl = &InternetProtocolSinkHandlerVtbl;
ret->ref = 1;
ret->from_urlmon = from_urlmon;
ret->apartment_thread = GetCurrentThreadId();
ret->notif_hwnd = get_notif_hwnd();
ret->protocol_handler = &ret->default_protocol_handler.IInternetProtocol_iface;
+ ret->protocol_sink_handler = &ret->default_protocol_handler.IInternetProtocolSink_iface;
InitializeCriticalSection(&ret->section);
+ ret->section.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": BindProtocol.section");
URLMON_LockModule();
IBinding *binding;
LPWSTR file_name;
LPWSTR cache_file;
+ DWORD bindf;
+
+ stop_cache_binding_proc_t onstop_proc;
+ void *ctx;
} DownloadBSC;
static inline DownloadBSC *impl_from_IBindStatusCallback(IBindStatusCallback *iface)
}
if(*ppv) {
- IBindStatusCallback_AddRef((IUnknown*)*ppv);
+ IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
HRESULT hresult, LPCWSTR szError)
{
DownloadBSC *This = impl_from_IBindStatusCallback(iface);
+ HRESULT hres = S_OK;
TRACE("(%p)->(%08x %s)\n", This, hresult, debugstr_w(szError));
}
}
- if(This->callback)
+ if(This->onstop_proc)
+ hres = This->onstop_proc(This->ctx, This->cache_file, hresult, szError);
+ else if(This->callback)
IBindStatusCallback_OnStopBinding(This->callback, hresult, szError);
if(This->binding) {
This->binding = NULL;
}
- return S_OK;
+ return hres;
}
static HRESULT WINAPI DownloadBSC_GetBindInfo(IBindStatusCallback *iface,
ReleaseBindInfo(&bindinfo);
}
- *grfBINDF = BINDF_PULLDATA | BINDF_NEEDFILE | (bindf & BINDF_ENFORCERESTRICTED);
+ *grfBINDF = BINDF_PULLDATA | BINDF_NEEDFILE | (bindf & BINDF_ENFORCERESTRICTED) | This->bindf;
return S_OK;
}
DwlServiceProvider_QueryService
};
- static HRESULT DownloadBSC_Create(IBindStatusCallback *callback, LPCWSTR file_name, IBindStatusCallback **ret_callback)
+ static HRESULT DownloadBSC_Create(IBindStatusCallback *callback, LPCWSTR file_name, DownloadBSC **ret_callback)
{
- DownloadBSC *ret = heap_alloc(sizeof(*ret));
+ DownloadBSC *ret;
+
+ ret = heap_alloc_zero(sizeof(*ret));
+ if(!ret)
+ return E_OUTOFMEMORY;
ret->IBindStatusCallback_iface.lpVtbl = &BindStatusCallbackVtbl;
ret->IServiceProvider_iface.lpVtbl = &ServiceProviderVtbl;
ret->ref = 1;
- ret->file_name = heap_strdupW(file_name);
- ret->cache_file = NULL;
- ret->binding = NULL;
+
+ if(file_name) {
+ ret->file_name = heap_strdupW(file_name);
+ if(!ret->file_name) {
+ heap_free(ret);
+ return E_OUTOFMEMORY;
+ }
+ }
if(callback)
IBindStatusCallback_AddRef(callback);
ret->callback = callback;
- *ret_callback = &ret->IBindStatusCallback_iface;
+ *ret_callback = ret;
return S_OK;
}
HRESULT create_default_callback(IBindStatusCallback **ret)
{
- IBindStatusCallback *callback;
+ DownloadBSC *callback;
HRESULT hres;
hres = DownloadBSC_Create(NULL, NULL, &callback);
if(FAILED(hres))
return hres;
- hres = wrap_callback(callback, ret);
- IBindStatusCallback_Release(callback);
+ hres = wrap_callback(&callback->IBindStatusCallback_iface, ret);
+ IBindStatusCallback_Release(&callback->IBindStatusCallback_iface);
+ return hres;
+ }
+
+ HRESULT download_to_cache(IUri *uri, stop_cache_binding_proc_t proc, void *ctx, IBindStatusCallback *callback)
+ {
+ DownloadBSC *dwl_bsc;
+ IBindCtx *bindctx;
+ IMoniker *mon;
+ IUnknown *unk;
+ HRESULT hres;
+
+ hres = DownloadBSC_Create(callback, NULL, &dwl_bsc);
+ if(FAILED(hres))
+ return hres;
+
+ dwl_bsc->onstop_proc = proc;
+ dwl_bsc->ctx = ctx;
+ dwl_bsc->bindf = BINDF_ASYNCHRONOUS;
+
+ hres = CreateAsyncBindCtx(0, &dwl_bsc->IBindStatusCallback_iface, NULL, &bindctx);
+ IBindStatusCallback_Release(&dwl_bsc->IBindStatusCallback_iface);
+ if(FAILED(hres))
+ return hres;
+
+ hres = CreateURLMonikerEx2(NULL, uri, &mon, 0);
+ if(FAILED(hres)) {
+ IBindCtx_Release(bindctx);
+ return hres;
+ }
+
+ hres = IMoniker_BindToStorage(mon, bindctx, NULL, &IID_IUnknown, (void**)&unk);
+ IMoniker_Release(mon);
+ IBindCtx_Release(bindctx);
+ if(SUCCEEDED(hres) && unk)
+ IUnknown_Release(unk);
return hres;
+
}
/***********************************************************************
HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN pCaller, LPCWSTR szURL, LPCWSTR szFileName,
DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB)
{
- IBindStatusCallback *callback;
+ DownloadBSC *callback;
IUnknown *unk;
IMoniker *mon;
IBindCtx *bindctx;
if(FAILED(hres))
return hres;
- hres = CreateAsyncBindCtx(0, callback, NULL, &bindctx);
- IBindStatusCallback_Release(callback);
+ hres = CreateAsyncBindCtx(0, &callback->IBindStatusCallback_iface, NULL, &bindctx);
+ IBindStatusCallback_Release(&callback->IBindStatusCallback_iface);
if(FAILED(hres))
return hres;
}
if(*ppv) {
- IInternetProtocol_AddRef(iface);
+ IInternetProtocolEx_AddRef(iface);
return S_OK;
}
DWORD grfPI, HANDLE *dwReserved)
{
FileProtocol *This = impl_from_IInternetProtocolEx(iface);
+ WCHAR path[MAX_PATH];
BINDINFO bindinfo;
DWORD grfBINDF = 0;
- DWORD scheme;
+ DWORD scheme, size;
LPWSTR mime = NULL;
WCHAR null_char = 0;
- BSTR path, url;
+ BSTR url;
HRESULT hres;
TRACE("(%p)->(%p %p %p %08x %p)\n", This, pUri, pOIProtSink,
IInternetProtocolSink_ReportProgress(pOIProtSink, BINDSTATUS_SENDINGREQUEST, &null_char);
- hres = IUri_GetPath(pUri, &path);
+ size = 0;
+ hres = CoInternetParseIUri(pUri, PARSE_PATH_FROM_URL, 0, path, sizeof(path)/sizeof(WCHAR), &size, 0);
if(FAILED(hres)) {
- ERR("GetPath failed: %08x\n", hres);
+ WARN("CoInternetParseIUri failed: %08x\n", hres);
return report_result(pOIProtSink, hres, 0);
}
hres = open_file(This, path, pOIProtSink);
- SysFreeString(path);
if(FAILED(hres))
return hres;
}
if(*ppv) {
- IInternetProtocol_AddRef(iface);
+ IInternetProtocolEx_AddRef(iface);
return S_OK;
}
return ret;
}
- static inline BOOL set_security_flag(HttpProtocol *This, DWORD new_flag)
+ static inline BOOL set_security_flag(HttpProtocol *This, DWORD flags)
{
- DWORD flags, size = sizeof(flags);
BOOL res;
- res = InternetQueryOptionW(This->base.request, INTERNET_OPTION_SECURITY_FLAGS, &flags, &size);
- if(res) {
- flags |= new_flag;
- res = InternetSetOptionW(This->base.request, INTERNET_OPTION_SECURITY_FLAGS, &flags, size);
- }
+ res = InternetSetOptionW(This->base.request, INTERNET_OPTION_SECURITY_FLAGS, &flags, sizeof(flags));
if(!res)
- ERR("Failed to set security flag(s): %x\n", new_flag);
+ ERR("Failed to set security flags: %x\n", flags);
return res;
}
case ERROR_INTERNET_SEC_CERT_CN_INVALID:
case ERROR_INTERNET_INVALID_CA:
case ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED:
+ case ERROR_INTERNET_SEC_INVALID_CERT:
+ case ERROR_INTERNET_SEC_CERT_ERRORS:
+ case ERROR_INTERNET_SEC_CERT_REV_FAILED:
+ case ERROR_INTERNET_SEC_CERT_NO_REV:
+ case ERROR_INTERNET_SEC_CERT_REVOKED:
return INET_E_INVALID_CERTIFICATE;
case ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR:
case ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR:
IWindowForBindingUI *wfb_ui;
IHttpSecurity *http_security;
BOOL security_problem;
+ DWORD dlg_flags;
+ HWND hwnd;
+ DWORD res;
HRESULT hres;
+ TRACE("(%p %u)\n", This, error);
+
switch(error) {
case ERROR_INTERNET_SEC_CERT_DATE_INVALID:
case ERROR_INTERNET_SEC_CERT_CN_INVALID:
case ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR:
case ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR:
- case ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION:
case ERROR_INTERNET_INVALID_CA:
case ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED:
+ case ERROR_INTERNET_SEC_INVALID_CERT:
+ case ERROR_INTERNET_SEC_CERT_ERRORS:
+ case ERROR_INTERNET_SEC_CERT_REV_FAILED:
+ case ERROR_INTERNET_SEC_CERT_NO_REV:
+ case ERROR_INTERNET_SEC_CERT_REVOKED:
+ case ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION:
security_problem = TRUE;
break;
default:
hres = IHttpSecurity_OnSecurityProblem(http_security, error);
IHttpSecurity_Release(http_security);
+ TRACE("OnSecurityProblem returned %08x\n", hres);
+
if(hres != S_FALSE)
{
BOOL res = FALSE;
}
}
- hres = IServiceProvider_QueryService(serv_prov, &IID_IWindowForBindingUI, &IID_IWindowForBindingUI,
- (void**)&wfb_ui);
- if(SUCCEEDED(hres)) {
- HWND hwnd;
- const IID *iid_reason;
-
- if(security_problem)
- iid_reason = &IID_IHttpSecurity;
- else if(error == ERROR_INTERNET_INCORRECT_PASSWORD)
- iid_reason = &IID_IAuthenticate;
- else
- iid_reason = &IID_IWindowForBindingUI;
-
- hres = IWindowForBindingUI_GetWindow(wfb_ui, iid_reason, &hwnd);
- if(SUCCEEDED(hres) && hwnd)
- {
- DWORD res;
-
- res = InternetErrorDlg(hwnd, This->base.request, error,
- FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS | FLAGS_ERROR_UI_FLAGS_GENERATE_DATA,
- NULL);
-
- if(res == ERROR_INTERNET_FORCE_RETRY || res == ERROR_SUCCESS)
- hres = RPC_E_RETRY;
+ switch(error) {
+ case ERROR_INTERNET_SEC_CERT_REV_FAILED:
+ if(hres != S_FALSE) {
+ /* Silently ignore the error. We will get more detailed error from wininet anyway. */
+ set_security_flag(This, SECURITY_FLAG_IGNORE_REVOCATION);
+ hres = RPC_E_RETRY;
+ break;
+ }
+ /* fallthrough */
+ default:
+ hres = IServiceProvider_QueryService(serv_prov, &IID_IWindowForBindingUI, &IID_IWindowForBindingUI, (void**)&wfb_ui);
+ if(SUCCEEDED(hres)) {
+ const IID *iid_reason;
+
+ if(security_problem)
+ iid_reason = &IID_IHttpSecurity;
+ else if(error == ERROR_INTERNET_INCORRECT_PASSWORD)
+ iid_reason = &IID_IAuthenticate;
else
- hres = E_FAIL;
+ iid_reason = &IID_IWindowForBindingUI;
+
+ hres = IWindowForBindingUI_GetWindow(wfb_ui, iid_reason, &hwnd);
+ IWindowForBindingUI_Release(wfb_ui);
}
- IWindowForBindingUI_Release(wfb_ui);
- }
- IServiceProvider_Release(serv_prov);
+ if(FAILED(hres)) hwnd = NULL;
- if(hres == RPC_E_RETRY)
- return hres;
+ dlg_flags = FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS | FLAGS_ERROR_UI_FLAGS_GENERATE_DATA;
+ if(This->base.bindf & BINDF_NO_UI)
+ dlg_flags |= FLAGS_ERROR_UI_FLAGS_NO_UI;
+
+ res = InternetErrorDlg(hwnd, This->base.request, error, dlg_flags, NULL);
+ hres = res == ERROR_INTERNET_FORCE_RETRY || res == ERROR_SUCCESS ? RPC_E_RETRY : internet_error_to_hres(error);
+ }
- return internet_error_to_hres(error);
+ IServiceProvider_Release(serv_prov);
+ return hres;
}
static ULONG send_http_request(HttpProtocol *This)
LPOLESTR accept_mimes[257];
const WCHAR **accept_types;
BYTE security_id[512];
- DWORD len, port;
+ DWORD len, port, flags;
ULONG num, error;
BOOL res, b;
HRESULT hres;
}
}
+ flags = INTERNET_ERROR_MASK_COMBINED_SEC_CERT;
+ res = InternetSetOptionW(This->base.request, INTERNET_OPTION_ERROR_MASK, &flags, sizeof(flags));
+ if(!res)
+ WARN("InternetSetOption(INTERNET_OPTION_ERROR_MASK) failed: %u\n", GetLastError());
+
b = TRUE;
res = InternetSetOptionW(This->base.request, INTERNET_OPTION_HTTP_DECODING, &b, sizeof(b));
if(!res)
- WARN("InternetSetOption(INTERNET_OPTION_HTTP_DECODING) failed: %08x\n", GetLastError());
+ WARN("InternetSetOption(INTERNET_OPTION_HTTP_DECODING) failed: %u\n", GetLastError());
do {
error = send_http_request(This);
- if(error == ERROR_IO_PENDING || error == ERROR_SUCCESS)
+ switch(error) {
+ case ERROR_IO_PENDING:
return S_OK;
-
- hres = handle_http_error(This, error);
-
+ case ERROR_SUCCESS:
+ /*
+ * If sending response ended synchronously, it means that we have the whole data
+ * available locally (most likely in cache).
+ */
+ return protocol_syncbinding(&This->base);
+ default:
+ hres = handle_http_error(This, error);
+ }
} while(hres == RPC_E_RETRY);
WARN("HttpSendRequest failed: %d\n", error);
This->http_negotiate = NULL;
}
- if(This->full_header) {
- heap_free(This->full_header);
- This->full_header = NULL;
- }
+ heap_free(This->full_header);
+ This->full_header = NULL;
}
static void HttpProtocol_on_error(Protocol *prot, DWORD error)
}
if(*ppv) {
- IInternetProtocol_AddRef(iface);
+ IInternetProtocolEx_AddRef(iface);
return S_OK;
}
static BOOL get_feature_from_reg(HKEY feature_control, LPCWSTR feature_name, LPCWSTR process_name, BOOL *enabled)
{
- BOOL ret = FALSE;
+ DWORD type, value, size;
HKEY feature;
DWORD res;
static const WCHAR wildcardW[] = {'*',0};
res = RegOpenKeyW(feature_control, feature_name, &feature);
- if(res == ERROR_SUCCESS) {
- DWORD type, value, size;
+ if(res != ERROR_SUCCESS)
+ return FALSE;
+ size = sizeof(DWORD);
+ res = RegQueryValueExW(feature, process_name, NULL, &type, (BYTE*)&value, &size);
+ if(res != ERROR_SUCCESS || type != REG_DWORD) {
size = sizeof(DWORD);
- res = RegQueryValueExW(feature, process_name, NULL, &type, (BYTE*)&value, &size);
- if(type != REG_DWORD)
- WARN("Unexpected registry value type %d (expected REG_DWORD) for %s\n", type, debugstr_w(process_name));
-
- if(res == ERROR_SUCCESS && type == REG_DWORD) {
- *enabled = value == 1;
- ret = TRUE;
- } else {
- size = sizeof(DWORD);
- res = RegQueryValueExW(feature, wildcardW, NULL, &type, (BYTE*)&value, &size);
- if(type != REG_DWORD)
- WARN("Unexpected registry value type %d (expected REG_DWORD) for %s\n", type, debugstr_w(wildcardW));
-
- if(res == ERROR_SUCCESS && type == REG_DWORD) {
- *enabled = value == 1;
- ret = TRUE;
- }
- }
- RegCloseKey(feature);
+ res = RegQueryValueExW(feature, wildcardW, NULL, &type, (BYTE*)&value, &size);
+ }
+
+ RegCloseKey(feature);
+ if(res != ERROR_SUCCESS)
+ return FALSE;
+
+ if(type != REG_DWORD) {
+ WARN("Unexpected registry value type %d (expected REG_DWORD) for %s\n", type, debugstr_w(wildcardW));
+ return FALSE;
}
- return ret;
+ *enabled = value == 1;
+ return TRUE;
}
/* Assumes 'process_features_cs' is held. */
TRACE("(%d, %08x)\n", FeatureEntry, dwFlags);
return get_internet_feature(FeatureEntry, dwFlags);
}
+
+ /***********************************************************************
+ * CoInternetIsFeatureEnabledForUrl (URLMON.@)
+ */
+ HRESULT WINAPI CoInternetIsFeatureEnabledForUrl(INTERNETFEATURELIST FeatureEntry, DWORD dwFlags, LPCWSTR szURL,
+ IInternetSecurityManager *pSecMgr)
+ {
+ DWORD urlaction = 0;
+ HRESULT hres;
+
+ TRACE("(%d %08x %s %p)\n", FeatureEntry, dwFlags, debugstr_w(szURL), pSecMgr);
+
+ if(FeatureEntry == FEATURE_MIME_SNIFFING)
+ urlaction = URLACTION_FEATURE_MIME_SNIFFING;
+ else if(FeatureEntry == FEATURE_WINDOW_RESTRICTIONS)
+ urlaction = URLACTION_FEATURE_WINDOW_RESTRICTIONS;
+ else if(FeatureEntry == FEATURE_ZONE_ELEVATION)
+ urlaction = URLACTION_FEATURE_ZONE_ELEVATION;
+
+ if(!szURL || !urlaction || !pSecMgr)
+ return CoInternetIsFeatureEnabled(FeatureEntry, dwFlags);
+
+ switch(dwFlags) {
+ case GET_FEATURE_FROM_THREAD:
+ case GET_FEATURE_FROM_THREAD_LOCALMACHINE:
+ case GET_FEATURE_FROM_THREAD_INTRANET:
+ case GET_FEATURE_FROM_THREAD_TRUSTED:
+ case GET_FEATURE_FROM_THREAD_INTERNET:
+ case GET_FEATURE_FROM_THREAD_RESTRICTED:
+ FIXME("unsupported flags %x\n", dwFlags);
+ return E_NOTIMPL;
+
+ case GET_FEATURE_FROM_PROCESS:
+ hres = CoInternetIsFeatureEnabled(FeatureEntry, dwFlags);
+ if(hres != S_OK)
+ return hres;
+ /* fall through */
+
+ default: {
+ DWORD policy = URLPOLICY_DISALLOW;
+
+ hres = IInternetSecurityManager_ProcessUrlAction(pSecMgr, szURL, urlaction,
+ (BYTE*)&policy, sizeof(DWORD), NULL, 0, PUAF_NOUI, 0);
+ if(hres!=S_OK || policy!=URLPOLICY_ALLOW)
+ return S_OK;
+ return S_FALSE;
+ }
+ }
+ }
+
+ /***********************************************************************
+ * CoInternetIsFeatureZoneElevationEnabled (URLMON.@)
+ */
+ HRESULT WINAPI CoInternetIsFeatureZoneElevationEnabled(LPCWSTR szFromURL, LPCWSTR szToURL,
+ IInternetSecurityManager *pSecMgr, DWORD dwFlags)
+ {
+ HRESULT hres;
+
+ TRACE("(%s %s %p %x)\n", debugstr_w(szFromURL), debugstr_w(szToURL), pSecMgr, dwFlags);
+
+ if(!pSecMgr || !szToURL)
+ return CoInternetIsFeatureEnabled(FEATURE_ZONE_ELEVATION, dwFlags);
+
+ switch(dwFlags) {
+ case GET_FEATURE_FROM_THREAD:
+ case GET_FEATURE_FROM_THREAD_LOCALMACHINE:
+ case GET_FEATURE_FROM_THREAD_INTRANET:
+ case GET_FEATURE_FROM_THREAD_TRUSTED:
+ case GET_FEATURE_FROM_THREAD_INTERNET:
+ case GET_FEATURE_FROM_THREAD_RESTRICTED:
+ FIXME("unsupported flags %x\n", dwFlags);
+ return E_NOTIMPL;
+
+ case GET_FEATURE_FROM_PROCESS:
+ hres = CoInternetIsFeatureEnabled(FEATURE_ZONE_ELEVATION, dwFlags);
+ if(hres != S_OK)
+ return hres;
+ /* fall through */
+
+ default: {
+ DWORD policy = URLPOLICY_DISALLOW;
+
+ hres = IInternetSecurityManager_ProcessUrlAction(pSecMgr, szToURL,
+ URLACTION_FEATURE_ZONE_ELEVATION, (BYTE*)&policy, sizeof(DWORD),
+ NULL, 0, PUAF_NOUI, 0);
+ if(FAILED(hres))
+ return S_OK;
+
+ switch(policy) {
+ case URLPOLICY_ALLOW:
+ return S_FALSE;
+ case URLPOLICY_QUERY:
+ FIXME("Ask user dialog not implemented\n");
+ default:
+ return S_OK;
+ }
+ }
+ }
+ }
}
if(*ppv) {
- IInternetProtocol_AddRef(iface);
+ IInternetProtocolEx_AddRef(iface);
return S_OK;
}
report_result(protocol, S_OK);
}
+ static HRESULT start_downloading(Protocol *protocol)
+ {
+ HRESULT hres;
+
+ hres = protocol->vtbl->start_downloading(protocol);
+ if(FAILED(hres)) {
+ protocol_close_connection(protocol);
+ report_result(protocol, hres);
+ return S_OK;
+ }
+
+ if(protocol->bindf & BINDF_NEEDFILE) {
+ WCHAR cache_file[MAX_PATH];
+ DWORD buflen = sizeof(cache_file);
+
+ if(InternetQueryOptionW(protocol->request, INTERNET_OPTION_DATAFILE_NAME, cache_file, &buflen)) {
+ report_progress(protocol, BINDSTATUS_CACHEFILENAMEAVAILABLE, cache_file);
+ }else {
+ FIXME("Could not get cache file\n");
+ }
+ }
+
+ protocol->flags |= FLAG_FIRST_CONTINUE_COMPLETE;
+ return S_OK;
+ }
+
+ HRESULT protocol_syncbinding(Protocol *protocol)
+ {
+ BOOL res;
+ HRESULT hres;
+
+ protocol->flags |= FLAG_SYNC_READ;
+
+ hres = start_downloading(protocol);
+ if(FAILED(hres))
+ return hres;
+
+ res = InternetQueryDataAvailable(protocol->request, &protocol->query_available, 0, 0);
+ if(res)
+ protocol->available_bytes = protocol->query_available;
+ else
+ WARN("InternetQueryDataAvailable failed: %u\n", GetLastError());
+
+ protocol->flags |= FLAG_FIRST_DATA_REPORTED|FLAG_LAST_DATA_REPORTED;
+ IInternetProtocolSink_ReportData(protocol->protocol_sink, BSCF_LASTDATANOTIFICATION|BSCF_DATAFULLYAVAILABLE,
+ protocol->available_bytes, protocol->content_length);
+ return S_OK;
+ }
+
static void request_complete(Protocol *protocol, INTERNET_ASYNC_RESULT *ar)
{
PROTOCOLDATA data;
}
if(protocol->flags & FLAG_FIRST_CONTINUE_COMPLETE)
- data.pData = (LPVOID)BINDSTATUS_ENDDOWNLOADCOMPONENTS;
+ data.pData = UlongToPtr(BINDSTATUS_ENDDOWNLOADCOMPONENTS);
else
- data.pData = (LPVOID)BINDSTATUS_DOWNLOADINGDATA;
+ data.pData = UlongToPtr(BINDSTATUS_DOWNLOADINGDATA);
}else {
protocol->flags |= FLAG_ERROR;
- data.pData = (LPVOID)ar->dwError;
+ data.pData = UlongToPtr(ar->dwError);
}
if (protocol->bindf & BINDF_FROMURLMON)
report_progress(protocol, BINDSTATUS_FINDINGRESOURCE, (LPWSTR)status_info);
break;
- case INTERNET_STATUS_CONNECTING_TO_SERVER:
- TRACE("%p INTERNET_STATUS_CONNECTING_TO_SERVER\n", protocol);
- report_progress(protocol, BINDSTATUS_CONNECTING, (LPWSTR)status_info);
+ case INTERNET_STATUS_CONNECTING_TO_SERVER: {
+ WCHAR *info;
+
+ TRACE("%p INTERNET_STATUS_CONNECTING_TO_SERVER %s\n", protocol, (const char*)status_info);
+
+ info = heap_strdupAtoW(status_info);
+ if(!info)
+ return;
+
+ report_progress(protocol, BINDSTATUS_CONNECTING, info);
+ heap_free(info);
break;
+ }
case INTERNET_STATUS_SENDING_REQUEST:
TRACE("%p INTERNET_STATUS_SENDING_REQUEST\n", protocol);
HRESULT protocol_continue(Protocol *protocol, PROTOCOLDATA *data)
{
+ BOOL is_start;
HRESULT hres;
- if (!data) {
- WARN("Expected pProtocolData to be non-NULL\n");
- return S_OK;
- }
+ is_start = !data || data->pData == UlongToPtr(BINDSTATUS_DOWNLOADINGDATA);
if(!protocol->request) {
WARN("Expected request to be non-NULL\n");
if(protocol->flags & FLAG_ERROR) {
protocol->flags &= ~FLAG_ERROR;
- protocol->vtbl->on_error(protocol, (DWORD)data->pData);
+ protocol->vtbl->on_error(protocol, PtrToUlong(data->pData));
return S_OK;
}
if(protocol->post_stream)
return write_post_stream(protocol);
- if(data->pData == (LPVOID)BINDSTATUS_DOWNLOADINGDATA) {
- hres = protocol->vtbl->start_downloading(protocol);
- if(FAILED(hres)) {
- protocol_close_connection(protocol);
- report_result(protocol, hres);
+ if(is_start) {
+ hres = start_downloading(protocol);
+ if(FAILED(hres))
return S_OK;
- }
-
- if(protocol->bindf & BINDF_NEEDFILE) {
- WCHAR cache_file[MAX_PATH];
- DWORD buflen = sizeof(cache_file);
+ }
- if(InternetQueryOptionW(protocol->request, INTERNET_OPTION_DATAFILE_NAME,
- cache_file, &buflen)) {
- report_progress(protocol, BINDSTATUS_CACHEFILENAMEAVAILABLE, cache_file);
+ if(!data || data->pData >= UlongToPtr(BINDSTATUS_DOWNLOADINGDATA)) {
+ if(!protocol->available_bytes) {
+ if(protocol->query_available) {
+ protocol->available_bytes = protocol->query_available;
}else {
- FIXME("Could not get cache file\n");
+ BOOL res;
+
+ /* InternetQueryDataAvailable may immediately fork and perform its asynchronous
+ * read, so clear the flag _before_ calling so it does not incorrectly get cleared
+ * after the status callback is called */
+ protocol->flags &= ~FLAG_REQUEST_COMPLETE;
+ res = InternetQueryDataAvailable(protocol->request, &protocol->query_available, 0, 0);
+ if(res) {
+ TRACE("available %u bytes\n", protocol->query_available);
+ if(!protocol->query_available) {
+ if(is_start) {
+ TRACE("empty file\n");
+ all_data_read(protocol);
+ }else {
+ WARN("unexpected end of file?\n");
+ report_result(protocol, INET_E_DOWNLOAD_FAILURE);
+ }
+ return S_OK;
+ }
+ protocol->available_bytes = protocol->query_available;
+ }else if(GetLastError() != ERROR_IO_PENDING) {
+ protocol->flags |= FLAG_REQUEST_COMPLETE;
+ WARN("InternetQueryDataAvailable failed: %d\n", GetLastError());
+ report_result(protocol, INET_E_DATA_NOT_AVAILABLE);
+ return S_OK;
+ }
}
- }
-
- protocol->flags |= FLAG_FIRST_CONTINUE_COMPLETE;
- }
-
- if(data->pData >= (LPVOID)BINDSTATUS_DOWNLOADINGDATA && !protocol->available_bytes) {
- BOOL res;
- /* InternetQueryDataAvailable may immediately fork and perform its asynchronous
- * read, so clear the flag _before_ calling so it does not incorrectly get cleared
- * after the status callback is called */
- protocol->flags &= ~FLAG_REQUEST_COMPLETE;
- res = InternetQueryDataAvailable(protocol->request, &protocol->available_bytes, 0, 0);
- if(res) {
- protocol->flags |= FLAG_REQUEST_COMPLETE;
- report_data(protocol);
- }else if(GetLastError() != ERROR_IO_PENDING) {
protocol->flags |= FLAG_REQUEST_COMPLETE;
- WARN("InternetQueryDataAvailable failed: %d\n", GetLastError());
- report_result(protocol, INET_E_DATA_NOT_AVAILABLE);
}
+
+ report_data(protocol);
}
return S_OK;
return S_FALSE;
}
- if(!(protocol->flags & FLAG_REQUEST_COMPLETE) || !protocol->available_bytes) {
+ if(!(protocol->flags & FLAG_SYNC_READ) && (!(protocol->flags & FLAG_REQUEST_COMPLETE) || !protocol->available_bytes)) {
*read_ret = 0;
return E_PENDING;
}
protocol->current_position += len;
protocol->available_bytes -= len;
+ TRACE("current_position %d, available_bytes %d\n", protocol->current_position, protocol->available_bytes);
+
if(!protocol->available_bytes) {
/* InternetQueryDataAvailable may immediately fork and perform its asynchronous
* read, so clear the flag _before_ calling so it does not incorrectly get cleared
* after the status callback is called */
protocol->flags &= ~FLAG_REQUEST_COMPLETE;
- res = InternetQueryDataAvailable(protocol->request, &protocol->available_bytes, 0, 0);
+ res = InternetQueryDataAvailable(protocol->request, &protocol->query_available, 0, 0);
if(!res) {
if (GetLastError() == ERROR_IO_PENDING) {
hres = E_PENDING;
break;
}
- if(!protocol->available_bytes) {
+ if(!protocol->query_available) {
all_data_read(protocol);
break;
}
+
+ protocol->available_bytes = protocol->query_available;
}
}
--- /dev/null
+ /*
+ * Copyright 2012 Jacek Caban for CodeWeavers
+ *
+ * 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 ID_AXINSTALL_WARNING_DLG 1000
+ #define ID_AXINSTALL_LOCATION 1001
+ #define ID_AXINSTALL_INSTALL_BTN 1002
+ #define ID_AXINSTALL_ICON 1003
+
+ #define IDS_AXINSTALL_FAILURE 1100
+ #define IDS_AXINSTALL_INSTALLN 1101
+ #define IDS_AXINSTALL_INSTALL 1102
'Z','o','n','e','M','a','p','\\',
'D','o','m','a','i','n','s',0};
+ static inline BOOL is_drive_path(const WCHAR *path)
+ {
+ return isalphaW(*path) && *(path+1) == ':';
+ }
+
+ /* List of schemes types Windows seems to expect to be hierarchical. */
+ static inline BOOL is_hierarchical_scheme(URL_SCHEME type) {
+ return(type == URL_SCHEME_HTTP || type == URL_SCHEME_FTP ||
+ type == URL_SCHEME_GOPHER || type == URL_SCHEME_NNTP ||
+ type == URL_SCHEME_TELNET || type == URL_SCHEME_WAIS ||
+ type == URL_SCHEME_FILE || type == URL_SCHEME_HTTPS ||
+ type == URL_SCHEME_RES);
+ }
+
/********************************************************************
* get_string_from_reg [internal]
*
/* See if the key contains a value for the scheme first. */
res = RegQueryValueExW(key, schema, NULL, &type, (BYTE*)zone, &size);
- if(type != REG_DWORD)
+ if(res == ERROR_SUCCESS) {
+ if(type == REG_DWORD)
+ return TRUE;
WARN("Unexpected value type %d for value %s, expected REG_DWORD\n", type, debugstr_w(schema));
+ }
- if(res != ERROR_SUCCESS || type != REG_DWORD) {
- /* Try to get the zone for the wildcard scheme. */
- size = sizeof(DWORD);
- res = RegQueryValueExW(key, wildcardW, NULL, &type, (BYTE*)zone, &size);
- if(type != REG_DWORD)
- WARN("Unexpected value type %d for value %s, expected REG_DWORD\n", type, debugstr_w(wildcardW));
+ /* Try to get the zone for the wildcard scheme. */
+ size = sizeof(DWORD);
+ res = RegQueryValueExW(key, wildcardW, NULL, &type, (BYTE*)zone, &size);
+ if(res != ERROR_SUCCESS)
+ return FALSE;
+
+ if(type != REG_DWORD) {
+ WARN("Unexpected value type %d for value %s, expected REG_DWORD\n", type, debugstr_w(wildcardW));
+ return FALSE;
}
- return res == ERROR_SUCCESS && type == REG_DWORD;
+ return TRUE;
}
/********************************************************************
return hres;
}
- static HRESULT get_zone_from_domains(LPCWSTR url, LPCWSTR schema, DWORD *zone)
+ static HRESULT get_zone_from_domains(IUri *uri, DWORD *zone)
{
HRESULT hres;
- WCHAR *host_name;
- DWORD host_len = lstrlenW(url)+1;
+ BSTR host, scheme;
DWORD res;
HKEY domains;
+ DWORD scheme_type;
- host_name = heap_alloc(host_len*sizeof(WCHAR));
- if(!host_name)
- return E_OUTOFMEMORY;
-
- hres = CoInternetParseUrl(url, PARSE_DOMAIN, 0, host_name, host_len, &host_len, 0);
- if(hres == S_FALSE) {
- WCHAR *tmp = heap_realloc(host_name, (host_len+1)*sizeof(WCHAR));
- if(!tmp) {
- heap_free(host_name);
- return E_OUTOFMEMORY;
- }
-
- host_name = tmp;
- hres = CoInternetParseUrl(url, PARSE_DOMAIN, 0, host_name, host_len+1, &host_len, 0);
- }
+ hres = IUri_GetScheme(uri, &scheme_type);
+ if(FAILED(hres))
+ return hres;
/* Windows doesn't play nice with unknown scheme types when it tries
* to check if a host name maps into any domains.
- *
- * The reason is with how CoInternetParseUrl handles unknown scheme types
- * when it's parsing the domain of a URL (IE it always returns E_FAIL).
- *
- * Windows doesn't compenstate for this and simply doesn't check if
- * the URL maps into any domains.
*/
- if(hres != S_OK) {
- heap_free(host_name);
- if(hres == E_FAIL)
- return S_FALSE;
+ if(scheme_type == URL_SCHEME_UNKNOWN)
+ return S_FALSE;
+
+ hres = IUri_GetHost(uri, &host);
+ if(FAILED(hres))
+ return hres;
+
+ /* Known hierarchical scheme types must have a host. If they don't Windows
+ * assigns URLZONE_INVALID to the zone.
+ */
+ if((scheme_type != URL_SCHEME_UNKNOWN && scheme_type != URL_SCHEME_FILE)
+ && is_hierarchical_scheme(scheme_type) && !*host) {
+ *zone = URLZONE_INVALID;
+
+ SysFreeString(host);
+
+ /* The MapUrlToZone functions return S_OK when this condition occurs. */
+ return S_OK;
+ }
+
+ hres = IUri_GetSchemeName(uri, &scheme);
+ if(FAILED(hres)) {
+ SysFreeString(host);
return hres;
}
/* First try CURRENT_USER. */
res = RegOpenKeyW(HKEY_CURRENT_USER, wszZoneMapDomainsKey, &domains);
if(res == ERROR_SUCCESS) {
- hres = search_for_domain_mapping(domains, schema, host_name, host_len, zone);
+ hres = search_for_domain_mapping(domains, scheme, host, SysStringLen(host), zone);
RegCloseKey(domains);
} else
WARN("Failed to open HKCU's %s key\n", debugstr_w(wszZoneMapDomainsKey));
if(hres == S_FALSE) {
res = RegOpenKeyW(HKEY_LOCAL_MACHINE, wszZoneMapDomainsKey, &domains);
if(res == ERROR_SUCCESS) {
- hres = search_for_domain_mapping(domains, schema, host_name, host_len, zone);
+ hres = search_for_domain_mapping(domains, scheme, host, SysStringLen(host), zone);
RegCloseKey(domains);
} else
WARN("Failed to open HKLM's %s key\n", debugstr_w(wszZoneMapDomainsKey));
}
- heap_free(host_name);
+ SysFreeString(host);
+ SysFreeString(scheme);
return hres;
}
- static HRESULT map_url_to_zone(LPCWSTR url, DWORD *zone, LPWSTR *ret_url)
+ static HRESULT map_security_uri_to_zone(IUri *uri, DWORD *zone)
{
- LPWSTR secur_url;
- WCHAR schema[64];
- DWORD size=0;
HRESULT hres;
+ BSTR scheme;
*zone = URLZONE_INVALID;
- hres = CoInternetGetSecurityUrl(url, &secur_url, PSU_SECURITY_URL_ONLY, 0);
- if(hres != S_OK) {
- size = strlenW(url)*sizeof(WCHAR);
-
- secur_url = heap_alloc(size);
- if(!secur_url)
- return E_OUTOFMEMORY;
+ hres = IUri_GetSchemeName(uri, &scheme);
+ if(FAILED(hres))
+ return hres;
- memcpy(secur_url, url, size);
- }
+ if(!strcmpiW(scheme, fileW)) {
+ BSTR path;
+ WCHAR *ptr, *path_start, root[20];
- hres = CoInternetParseUrl(secur_url, PARSE_SCHEMA, 0, schema, sizeof(schema)/sizeof(WCHAR), &size, 0);
- if(FAILED(hres) || !*schema) {
- heap_free(secur_url);
- return E_INVALIDARG;
- }
-
- /* file protocol is a special case */
- if(!strcmpW(schema, fileW)) {
- WCHAR path[MAX_PATH], root[20];
- WCHAR *ptr;
+ hres = IUri_GetPath(uri, &path);
+ if(FAILED(hres)) {
+ SysFreeString(scheme);
+ return hres;
+ }
- hres = CoInternetParseUrl(secur_url, PARSE_PATH_FROM_URL, 0, path,
- sizeof(path)/sizeof(WCHAR), &size, 0);
+ if(*path == '/' && is_drive_path(path+1))
+ path_start = path+1;
+ else
+ path_start = path;
- if(SUCCEEDED(hres) && (ptr = strchrW(path, '\\')) && ptr-path < sizeof(root)/sizeof(WCHAR)) {
+ if((ptr = strchrW(path_start, ':')) && ptr-path_start+1 < sizeof(root)/sizeof(WCHAR)) {
UINT type;
- memcpy(root, path, (ptr-path)*sizeof(WCHAR));
- root[ptr-path] = 0;
+ memcpy(root, path_start, (ptr-path_start+1)*sizeof(WCHAR));
+ root[ptr-path_start+1] = 0;
type = GetDriveTypeW(root);
FIXME("unsupported drive type %d\n", type);
}
}
+ SysFreeString(path);
}
if(*zone == URLZONE_INVALID) {
- hres = get_zone_from_domains(secur_url, schema, zone);
+ hres = get_zone_from_domains(uri, zone);
if(hres == S_FALSE)
- hres = get_zone_from_reg(schema, zone);
+ hres = get_zone_from_reg(scheme, zone);
}
+ SysFreeString(scheme);
+ return hres;
+ }
+
+ static HRESULT map_url_to_zone(LPCWSTR url, DWORD *zone, LPWSTR *ret_url)
+ {
+ IUri *secur_uri;
+ LPWSTR secur_url;
+ HRESULT hres;
+
+ *zone = URLZONE_INVALID;
+
+ hres = CoInternetGetSecurityUrl(url, &secur_url, PSU_SECURITY_URL_ONLY, 0);
+ if(hres != S_OK) {
+ DWORD size = strlenW(url)*sizeof(WCHAR);
+
+ secur_url = CoTaskMemAlloc(size);
+ if(!secur_url)
+ return E_OUTOFMEMORY;
+
+ memcpy(secur_url, url, size);
+ }
+
+ hres = CreateUri(secur_url, Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, &secur_uri);
+ if(FAILED(hres)) {
+ CoTaskMemFree(secur_url);
+ return hres;
+ }
+
+ hres = map_security_uri_to_zone(secur_uri, zone);
+ IUri_Release(secur_uri);
+
if(FAILED(hres) || !ret_url)
- heap_free(secur_url);
+ CoTaskMemFree(secur_url);
else
*ret_url = secur_url;
return hres;
}
+ static HRESULT map_uri_to_zone(IUri *uri, DWORD *zone, IUri **ret_uri)
+ {
+ HRESULT hres;
+ IUri *secur_uri;
+
+ hres = CoInternetGetSecurityUrlEx(uri, &secur_uri, PSU_SECURITY_URL_ONLY, 0);
+ if(FAILED(hres))
+ return hres;
+
+ hres = map_security_uri_to_zone(secur_uri, zone);
+ if(FAILED(hres) || !ret_uri)
+ IUri_Release(secur_uri);
+ else
+ *ret_uri = secur_uri;
+
+ return hres;
+ }
+
static HRESULT open_zone_key(HKEY parent_key, DWORD zone, HKEY *hkey)
{
static const WCHAR wszFormat[] = {'%','s','%','u',0};
return hres;
}
+ static HRESULT generate_security_id(IUri *uri, BYTE *secid, DWORD *secid_len, DWORD zone)
+ {
+ DWORD len;
+ HRESULT hres;
+ DWORD scheme_type;
+
+ if(zone == URLZONE_INVALID)
+ return E_INVALIDARG;
+
+ hres = IUri_GetScheme(uri, &scheme_type);
+ if(FAILED(hres))
+ return hres;
+
+ /* Windows handles opaque URLs differently then hierarchical ones. */
+ if(!is_hierarchical_scheme(scheme_type) && scheme_type != URL_SCHEME_WILDCARD) {
+ BSTR display_uri;
+
+ hres = IUri_GetDisplayUri(uri, &display_uri);
+ if(FAILED(hres))
+ return hres;
+
+ len = WideCharToMultiByte(CP_ACP, 0, display_uri, -1, NULL, 0, NULL, NULL)-1;
+
+ if(len+sizeof(DWORD) > *secid_len) {
+ SysFreeString(display_uri);
+ return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+ }
+
+ WideCharToMultiByte(CP_ACP, 0, display_uri, -1, (LPSTR)secid, len, NULL, NULL);
+ SysFreeString(display_uri);
+
+ *(DWORD*)(secid+len) = zone;
+ } else {
+ BSTR host, scheme;
+ DWORD host_len, scheme_len;
+ BYTE *ptr;
+
+ hres = IUri_GetHost(uri, &host);
+ if(FAILED(hres))
+ return hres;
+
+ /* The host can't be empty for Wildcard URIs. */
+ if(scheme_type == URL_SCHEME_WILDCARD && !*host) {
+ SysFreeString(host);
+ return E_INVALIDARG;
+ }
+
+ hres = IUri_GetSchemeName(uri, &scheme);
+ if(FAILED(hres)) {
+ SysFreeString(host);
+ return hres;
+ }
+
+ host_len = WideCharToMultiByte(CP_ACP, 0, host, -1, NULL, 0, NULL, NULL)-1;
+ scheme_len = WideCharToMultiByte(CP_ACP, 0, scheme, -1, NULL, 0, NULL, NULL)-1;
+
+ len = host_len+scheme_len+sizeof(BYTE);
+
+ if(len+sizeof(DWORD) > *secid_len) {
+ SysFreeString(host);
+ SysFreeString(scheme);
+ return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+ }
+
+ WideCharToMultiByte(CP_ACP, 0, scheme, -1, (LPSTR)secid, len, NULL, NULL);
+ SysFreeString(scheme);
+
+ ptr = secid+scheme_len;
+ *ptr++ = ':';
+
+ WideCharToMultiByte(CP_ACP, 0, host, -1, (LPSTR)ptr, host_len, NULL, NULL);
+ SysFreeString(host);
+
+ ptr += host_len;
+
+ *(DWORD*)ptr = zone;
+ }
+
+ *secid_len = len+sizeof(DWORD);
+
+ return S_OK;
+ }
+
+ static HRESULT get_security_id_for_url(LPCWSTR url, BYTE *secid, DWORD *secid_len)
+ {
+ HRESULT hres;
+ DWORD zone = URLZONE_INVALID;
+ LPWSTR secur_url = NULL;
+ IUri *uri;
+
+ hres = map_url_to_zone(url, &zone, &secur_url);
+ if(FAILED(hres))
+ return hres == 0x80041001 ? E_INVALIDARG : hres;
+
+ hres = CreateUri(secur_url, Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, &uri);
+ CoTaskMemFree(secur_url);
+ if(FAILED(hres))
+ return hres;
+
+ hres = generate_security_id(uri, secid, secid_len, zone);
+ IUri_Release(uri);
+
+ return hres;
+ }
+
+ static HRESULT get_security_id_for_uri(IUri *uri, BYTE *secid, DWORD *secid_len)
+ {
+ HRESULT hres;
+ IUri *secur_uri;
+ DWORD zone = URLZONE_INVALID;
+
+ hres = map_uri_to_zone(uri, &zone, &secur_uri);
+ if(FAILED(hres))
+ return hres;
+
+ hres = generate_security_id(secur_uri, secid, secid_len, zone);
+ IUri_Release(secur_uri);
+
+ return hres;
+ }
+
/***********************************************************************
* InternetSecurityManager implementation
*
*/
typedef struct {
- IInternetSecurityManager IInternetSecurityManager_iface;
+ IInternetSecurityManagerEx2 IInternetSecurityManagerEx2_iface;
LONG ref;
IInternetSecurityManager *custom_manager;
} SecManagerImpl;
- static inline SecManagerImpl *impl_from_IInternetSecurityManager(IInternetSecurityManager *iface)
+ static inline SecManagerImpl *impl_from_IInternetSecurityManagerEx2(IInternetSecurityManagerEx2 *iface)
{
- return CONTAINING_RECORD(iface, SecManagerImpl, IInternetSecurityManager_iface);
+ return CONTAINING_RECORD(iface, SecManagerImpl, IInternetSecurityManagerEx2_iface);
}
- static HRESULT WINAPI SecManagerImpl_QueryInterface(IInternetSecurityManager* iface,REFIID riid,void** ppvObject)
+ static HRESULT WINAPI SecManagerImpl_QueryInterface(IInternetSecurityManagerEx2* iface,REFIID riid,void** ppvObject)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
- TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppvObject);
+ TRACE("(%p)->(%s %p)\n",This,debugstr_guid(riid),ppvObject);
- /* Perform a sanity check on the parameters.*/
- if ( (This==0) || (ppvObject==0) )
+ if(!ppvObject)
return E_INVALIDARG;
- /* Initialize the return parameter */
- *ppvObject = 0;
-
- /* Compare the riid with the interface IDs implemented by this object.*/
- if (IsEqualIID(&IID_IUnknown, riid) ||
- IsEqualIID(&IID_IInternetSecurityManager, riid))
+ if(IsEqualIID(&IID_IUnknown, riid) ||
+ IsEqualIID(&IID_IInternetSecurityManager, riid) ||
+ IsEqualIID(&IID_IInternetSecurityManagerEx, riid) ||
+ IsEqualIID(&IID_IInternetSecurityManagerEx2, riid)) {
*ppvObject = iface;
-
- /* Check that we obtained an interface.*/
- if (!*ppvObject) {
+ } else {
WARN("not supported interface %s\n", debugstr_guid(riid));
+ *ppvObject = NULL;
return E_NOINTERFACE;
}
- /* Query Interface always increases the reference count by one when it is successful */
- IInternetSecurityManager_AddRef(iface);
-
+ IInternetSecurityManagerEx2_AddRef(iface);
return S_OK;
}
- static ULONG WINAPI SecManagerImpl_AddRef(IInternetSecurityManager* iface)
+ static ULONG WINAPI SecManagerImpl_AddRef(IInternetSecurityManagerEx2* iface)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%u\n", This, refCount);
return refCount;
}
- static ULONG WINAPI SecManagerImpl_Release(IInternetSecurityManager* iface)
+ static ULONG WINAPI SecManagerImpl_Release(IInternetSecurityManagerEx2* iface)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%u\n", This, refCount);
return refCount;
}
- static HRESULT WINAPI SecManagerImpl_SetSecuritySite(IInternetSecurityManager *iface,
+ static HRESULT WINAPI SecManagerImpl_SetSecuritySite(IInternetSecurityManagerEx2 *iface,
IInternetSecurityMgrSite *pSite)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
TRACE("(%p)->(%p)\n", This, pSite);
return S_OK;
}
- static HRESULT WINAPI SecManagerImpl_GetSecuritySite(IInternetSecurityManager *iface,
+ static HRESULT WINAPI SecManagerImpl_GetSecuritySite(IInternetSecurityManagerEx2 *iface,
IInternetSecurityMgrSite **ppSite)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
TRACE("(%p)->(%p)\n", This, ppSite);
return S_OK;
}
- static HRESULT WINAPI SecManagerImpl_MapUrlToZone(IInternetSecurityManager *iface,
+ static HRESULT WINAPI SecManagerImpl_MapUrlToZone(IInternetSecurityManagerEx2 *iface,
LPCWSTR pwszUrl, DWORD *pdwZone,
DWORD dwFlags)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
HRESULT hres;
TRACE("(%p)->(%s %p %08x)\n", iface, debugstr_w(pwszUrl), pdwZone, dwFlags);
return map_url_to_zone(pwszUrl, pdwZone, NULL);
}
- static HRESULT WINAPI SecManagerImpl_GetSecurityId(IInternetSecurityManager *iface,
+ static HRESULT WINAPI SecManagerImpl_GetSecurityId(IInternetSecurityManagerEx2 *iface,
LPCWSTR pwszUrl, BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
- LPWSTR url, ptr, ptr2;
- DWORD zone, len;
- HRESULT hres;
-
- static const WCHAR wszFile[] = {'f','i','l','e',':'};
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
TRACE("(%p)->(%s %p %p %08lx)\n", iface, debugstr_w(pwszUrl), pbSecurityId,
pcbSecurityId, dwReserved);
if(This->custom_manager) {
+ HRESULT hres;
+
hres = IInternetSecurityManager_GetSecurityId(This->custom_manager,
pwszUrl, pbSecurityId, pcbSecurityId, dwReserved);
if(hres != INET_E_DEFAULT_ACTION)
if(dwReserved)
FIXME("dwReserved is not supported\n");
- hres = map_url_to_zone(pwszUrl, &zone, &url);
- if(FAILED(hres))
- return hres == 0x80041001 ? E_INVALIDARG : hres;
-
- /* file protocol is a special case */
- if(strlenW(url) >= sizeof(wszFile)/sizeof(WCHAR)
- && !memcmp(url, wszFile, sizeof(wszFile)) && strchrW(url, '\\')) {
-
- static const BYTE secidFile[] = {'f','i','l','e',':'};
-
- heap_free(url);
-
- if(*pcbSecurityId < sizeof(secidFile)+sizeof(zone))
- return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
-
- memcpy(pbSecurityId, secidFile, sizeof(secidFile));
- *(DWORD*)(pbSecurityId+sizeof(secidFile)) = zone;
-
- *pcbSecurityId = sizeof(secidFile)+sizeof(zone);
- return S_OK;
- }
-
- ptr = strchrW(url, ':');
- ptr2 = ++ptr;
- while(*ptr2 == '/')
- ptr2++;
- if(ptr2 != ptr)
- memmove(ptr, ptr2, (strlenW(ptr2)+1)*sizeof(WCHAR));
-
- ptr = strchrW(ptr, '/');
- if(ptr)
- *ptr = 0;
-
- len = WideCharToMultiByte(CP_ACP, 0, url, -1, NULL, 0, NULL, NULL)-1;
-
- if(len+sizeof(DWORD) > *pcbSecurityId) {
- heap_free(url);
- return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- }
-
- WideCharToMultiByte(CP_ACP, 0, url, -1, (LPSTR)pbSecurityId, len, NULL, NULL);
- heap_free(url);
-
- *(DWORD*)(pbSecurityId+len) = zone;
-
- *pcbSecurityId = len+sizeof(DWORD);
-
- return S_OK;
+ return get_security_id_for_url(pwszUrl, pbSecurityId, pcbSecurityId);
}
- static HRESULT WINAPI SecManagerImpl_ProcessUrlAction(IInternetSecurityManager *iface,
+ static HRESULT WINAPI SecManagerImpl_ProcessUrlAction(IInternetSecurityManagerEx2 *iface,
LPCWSTR pwszUrl, DWORD dwAction,
BYTE *pPolicy, DWORD cbPolicy,
BYTE *pContext, DWORD cbContext,
DWORD dwFlags, DWORD dwReserved)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
DWORD zone, policy;
HRESULT hres;
}
- static HRESULT WINAPI SecManagerImpl_QueryCustomPolicy(IInternetSecurityManager *iface,
+ static HRESULT WINAPI SecManagerImpl_QueryCustomPolicy(IInternetSecurityManagerEx2 *iface,
LPCWSTR pwszUrl, REFGUID guidKey,
BYTE **ppPolicy, DWORD *pcbPolicy,
BYTE *pContext, DWORD cbContext,
DWORD dwReserved)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
HRESULT hres;
TRACE("(%p)->(%s %s %p %p %p %08x %08x )\n", iface, debugstr_w(pwszUrl), debugstr_guid(guidKey),
return HRESULT_FROM_WIN32(ERROR_NOT_FOUND);
}
- static HRESULT WINAPI SecManagerImpl_SetZoneMapping(IInternetSecurityManager *iface,
+ static HRESULT WINAPI SecManagerImpl_SetZoneMapping(IInternetSecurityManagerEx2 *iface,
DWORD dwZone, LPCWSTR pwszPattern, DWORD dwFlags)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
HRESULT hres;
TRACE("(%p)->(%08x %s %08x)\n", iface, dwZone, debugstr_w(pwszPattern),dwFlags);
return E_NOTIMPL;
}
- static HRESULT WINAPI SecManagerImpl_GetZoneMappings(IInternetSecurityManager *iface,
+ static HRESULT WINAPI SecManagerImpl_GetZoneMappings(IInternetSecurityManagerEx2 *iface,
DWORD dwZone, IEnumString **ppenumString, DWORD dwFlags)
{
- SecManagerImpl *This = impl_from_IInternetSecurityManager(iface);
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
HRESULT hres;
TRACE("(%p)->(%08x %p %08x)\n", iface, dwZone, ppenumString,dwFlags);
return E_NOTIMPL;
}
- static const IInternetSecurityManagerVtbl VT_SecManagerImpl =
+ static HRESULT WINAPI SecManagerImpl_ProcessUrlActionEx(IInternetSecurityManagerEx2 *iface,
+ LPCWSTR pwszUrl, DWORD dwAction, BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext,
+ DWORD dwFlags, DWORD dwReserved, DWORD *pdwOutFlags)
+ {
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
+ FIXME("(%p)->(%s %08x %p %d %p %d %08x %08x %p) stub\n", This, debugstr_w(pwszUrl), dwAction, pPolicy, cbPolicy,
+ pContext, cbContext, dwFlags, dwReserved, pdwOutFlags);
+ return E_NOTIMPL;
+ }
+
+ static HRESULT WINAPI SecManagerImpl_MapUrlToZoneEx2(IInternetSecurityManagerEx2 *iface,
+ IUri *pUri, DWORD *pdwZone, DWORD dwFlags, LPWSTR *ppwszMappedUrl, DWORD *pdwOutFlags)
+ {
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
+
+ TRACE("(%p)->(%p %p %08x %p %p)\n", This, pUri, pdwZone, dwFlags, ppwszMappedUrl, pdwOutFlags);
+
+ if(This->custom_manager) {
+ HRESULT hres;
+ IInternetSecurityManagerEx2 *sec_mgr2;
+
+ hres = IInternetSecurityManager_QueryInterface(This->custom_manager, &IID_IInternetSecurityManagerEx2,
+ (void**)&sec_mgr2);
+ if(SUCCEEDED(hres)) {
+ hres = IInternetSecurityManagerEx2_MapUrlToZoneEx2(sec_mgr2, pUri, pdwZone, dwFlags, ppwszMappedUrl, pdwOutFlags);
+ IInternetSecurityManagerEx2_Release(sec_mgr2);
+ } else {
+ BSTR url;
+
+ hres = IUri_GetDisplayUri(pUri, &url);
+ if(FAILED(hres))
+ return hres;
+
+ hres = IInternetSecurityManager_MapUrlToZone(This->custom_manager, url, pdwZone, dwFlags);
+ SysFreeString(url);
+ }
+
+ if(hres != INET_E_DEFAULT_ACTION)
+ return hres;
+ }
+
+ if(!pdwZone)
+ return E_INVALIDARG;
+
+ if(!pUri) {
+ *pdwZone = URLZONE_INVALID;
+ return E_INVALIDARG;
+ }
+
+ if(dwFlags)
+ FIXME("Unsupported flags: %08x\n", dwFlags);
+
+ return map_uri_to_zone(pUri, pdwZone, NULL);
+ }
+
+ static HRESULT WINAPI SecManagerImpl_ProcessUrlActionEx2(IInternetSecurityManagerEx2 *iface,
+ IUri *pUri, DWORD dwAction, BYTE *pPolicy, DWORD cbPolicy, BYTE *pContext, DWORD cbContext,
+ DWORD dwFlags, DWORD_PTR dwReserved, DWORD *pdwOutFlags)
+ {
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
+ FIXME("(%p)->(%p %08x %p %d %p %d %08x %08x %p) stub\n", This, pUri, dwAction, pPolicy,
+ cbPolicy, pContext, cbContext, dwFlags, (DWORD)dwReserved, pdwOutFlags);
+ return E_NOTIMPL;
+ }
+
+ static HRESULT WINAPI SecManagerImpl_GetSecurityIdEx2(IInternetSecurityManagerEx2 *iface,
+ IUri *pUri, BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved)
+ {
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
+ TRACE("(%p)->(%p %p %p %08x) stub\n", This, pUri, pbSecurityId, pcbSecurityId, (DWORD)dwReserved);
+
+ if(dwReserved)
+ FIXME("dwReserved is not supported yet\n");
+
+ if(!pUri || !pcbSecurityId || !pbSecurityId)
+ return E_INVALIDARG;
+
+ return get_security_id_for_uri(pUri, pbSecurityId, pcbSecurityId);
+ }
+
+ static HRESULT WINAPI SecManagerImpl_QueryCustomPolicyEx2(IInternetSecurityManagerEx2 *iface,
+ IUri *pUri, REFGUID guidKey, BYTE **ppPolicy, DWORD *pcbPolicy, BYTE *pContext,
+ DWORD cbContext, DWORD_PTR dwReserved)
+ {
+ SecManagerImpl *This = impl_from_IInternetSecurityManagerEx2(iface);
+ FIXME("(%p)->(%p %s %p %p %p %d %08x) stub\n", This, pUri, debugstr_guid(guidKey), ppPolicy, pcbPolicy,
+ pContext, cbContext, (DWORD)dwReserved);
+ return E_NOTIMPL;
+ }
+
+ static const IInternetSecurityManagerEx2Vtbl VT_SecManagerImpl =
{
SecManagerImpl_QueryInterface,
SecManagerImpl_AddRef,
SecManagerImpl_ProcessUrlAction,
SecManagerImpl_QueryCustomPolicy,
SecManagerImpl_SetZoneMapping,
- SecManagerImpl_GetZoneMappings
+ SecManagerImpl_GetZoneMappings,
+ SecManagerImpl_ProcessUrlActionEx,
+ SecManagerImpl_MapUrlToZoneEx2,
+ SecManagerImpl_ProcessUrlActionEx2,
+ SecManagerImpl_GetSecurityIdEx2,
+ SecManagerImpl_QueryCustomPolicyEx2
};
HRESULT SecManagerImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
This = heap_alloc(sizeof(*This));
/* Initialize the virtual function table. */
- This->IInternetSecurityManager_iface.lpVtbl = &VT_SecManagerImpl;
+ This->IInternetSecurityManagerEx2_iface.lpVtbl = &VT_SecManagerImpl;
This->ref = 1;
This->mgrsite = NULL;
}
*ppvObject = iface;
- IInternetZoneManager_AddRef(iface);
+ IInternetZoneManagerEx2_AddRef(iface);
return S_OK;
}
if (dwFlags)
FIXME("dwFlags 0x%x ignored\n", dwFlags);
- return IInternetZoneManager_GetZoneAttributes(iface, dwZone, pZoneAttributes);
+ return IInternetZoneManagerEx2_GetZoneAttributes(iface, dwZone, pZoneAttributes);
}
if(FAILED(hres))
return hres;
- hres = CreateUri(ret_url, Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME, 0, ppSecUri);
- if(FAILED(hres)) {
- CoTaskMemFree(ret_url);
- return hres;
- }
-
/* File URIs have to hierarchical. */
hres = IUri_GetScheme(pUri, (DWORD*)&scheme_type);
if(SUCCEEDED(hres) && scheme_type == URL_SCHEME_FILE) {
CoTaskMemFree(ret_url);
return hres;
}
+
+ /********************************************************************
+ * CompareSecurityIds (URLMON.@)
+ */
+ HRESULT WINAPI CompareSecurityIds(BYTE *secid1, DWORD size1, BYTE *secid2, DWORD size2, DWORD reserved)
+ {
+ FIXME("(%p %d %p %d %x)\n", secid1, size1, secid2, size2, reserved);
+ return E_NOTIMPL;
+ }
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
- typedef struct name_space {
+ typedef struct {
LPWSTR protocol;
IClassFactory *cf;
CLSID clsid;
BOOL urlmon;
- struct name_space *next;
+ struct list entry;
} name_space;
- typedef struct mime_filter {
+ typedef struct {
IClassFactory *cf;
CLSID clsid;
LPWSTR mime;
- struct mime_filter *next;
+ struct list entry;
} mime_filter;
- static name_space *name_space_list = NULL;
- static mime_filter *mime_filter_list = NULL;
+ static struct list name_space_list = LIST_INIT(name_space_list);
+ static struct list mime_filter_list = LIST_INIT(mime_filter_list);
static CRITICAL_SECTION session_cs;
static CRITICAL_SECTION_DEBUG session_cs_dbg =
{
name_space *iter;
- for(iter = name_space_list; iter; iter = iter->next) {
- if(!strcmpW(iter->protocol, protocol))
+ LIST_FOR_EACH_ENTRY(iter, &name_space_list, name_space, entry) {
+ if(!strcmpiW(iter->protocol, protocol))
return iter;
}
return SUCCEEDED(hres) ? S_OK : MK_E_SYNTAX;
}
- static HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL urlmon_protocol)
+ HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL urlmon_protocol)
{
name_space *new_name_space;
EnterCriticalSection(&session_cs);
- new_name_space->next = name_space_list;
- name_space_list = new_name_space;
+ list_add_head(&name_space_list, &new_name_space->entry);
LeaveCriticalSection(&session_cs);
static HRESULT unregister_namespace(IClassFactory *cf, LPCWSTR protocol)
{
- name_space *iter, *last = NULL;
+ name_space *iter;
EnterCriticalSection(&session_cs);
- for(iter = name_space_list; iter; iter = iter->next) {
- if(iter->cf == cf && !strcmpW(iter->protocol, protocol))
- break;
- last = iter;
- }
-
- if(iter) {
- if(last)
- last->next = iter->next;
- else
- name_space_list = iter->next;
- }
+ LIST_FOR_EACH_ENTRY(iter, &name_space_list, name_space, entry) {
+ if(iter->cf == cf && !strcmpiW(iter->protocol, protocol)) {
+ list_remove(&iter->entry);
- LeaveCriticalSection(&session_cs);
+ LeaveCriticalSection(&session_cs);
- if(iter) {
- if(!iter->urlmon)
- IClassFactory_Release(iter->cf);
- heap_free(iter->protocol);
- heap_free(iter);
+ if(!iter->urlmon)
+ IClassFactory_Release(iter->cf);
+ heap_free(iter->protocol);
+ heap_free(iter);
+ return S_OK;
+ }
}
+ LeaveCriticalSection(&session_cs);
return S_OK;
}
-
- void register_urlmon_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL do_register)
- {
- if(do_register)
- register_namespace(cf, clsid, protocol, TRUE);
- else
- unregister_namespace(cf, protocol);
- }
-
BOOL is_registered_protocol(LPCWSTR url)
{
DWORD schema_len;
IInternetProtocol *get_mime_filter(LPCWSTR mime)
{
+ static const WCHAR filtersW[] = {'P','r','o','t','o','c','o','l','s',
+ '\\','F','i','l','t','e','r',0 };
+ static const WCHAR CLSIDW[] = {'C','L','S','I','D',0};
+
IClassFactory *cf = NULL;
IInternetProtocol *ret;
mime_filter *iter;
+ HKEY hlist, hfilter;
+ WCHAR clsidw[64];
+ CLSID clsid;
+ DWORD res, type, size;
HRESULT hres;
EnterCriticalSection(&session_cs);
- for(iter = mime_filter_list; iter; iter = iter->next) {
+ LIST_FOR_EACH_ENTRY(iter, &mime_filter_list, mime_filter, entry) {
if(!strcmpW(iter->mime, mime)) {
cf = iter->cf;
break;
LeaveCriticalSection(&session_cs);
- if(!cf)
+ if(cf) {
+ hres = IClassFactory_CreateInstance(cf, NULL, &IID_IInternetProtocol, (void**)&ret);
+ if(FAILED(hres)) {
+ WARN("CreateInstance failed: %08x\n", hres);
+ return NULL;
+ }
+
+ return ret;
+ }
+
+ res = RegOpenKeyW(HKEY_CLASSES_ROOT, filtersW, &hlist);
+ if(res != ERROR_SUCCESS) {
+ TRACE("Could not open MIME filters key\n");
return NULL;
+ }
- hres = IClassFactory_CreateInstance(cf, NULL, &IID_IInternetProtocol, (void**)&ret);
+ res = RegOpenKeyW(hlist, mime, &hfilter);
+ CloseHandle(hlist);
+ if(res != ERROR_SUCCESS)
+ return NULL;
+
+ size = sizeof(clsidw);
+ res = RegQueryValueExW(hfilter, CLSIDW, NULL, &type, (LPBYTE)clsidw, &size);
+ CloseHandle(hfilter);
+ if(res!=ERROR_SUCCESS || type!=REG_SZ) {
+ WARN("Could not get filter CLSID for %s\n", debugstr_w(mime));
+ return NULL;
+ }
+
+ hres = CLSIDFromString(clsidw, &clsid);
if(FAILED(hres)) {
- WARN("CreateInstance failed: %08x\n", hres);
+ WARN("CLSIDFromString failed for %s (%x)\n", debugstr_w(mime), hres);
+ return NULL;
+ }
+
+ hres = CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IInternetProtocol, (void**)&ret);
+ if(FAILED(hres)) {
+ WARN("CoCreateInstance failed: %08x\n", hres);
return NULL;
}
EnterCriticalSection(&session_cs);
- filter->next = mime_filter_list;
- mime_filter_list = filter;
+ list_add_head(&mime_filter_list, &filter->entry);
LeaveCriticalSection(&session_cs);
static HRESULT WINAPI InternetSession_UnregisterMimeFilter(IInternetSession *iface,
IClassFactory *pCF, LPCWSTR pwzType)
{
- mime_filter *iter, *prev = NULL;
+ mime_filter *iter;
TRACE("(%p %s)\n", pCF, debugstr_w(pwzType));
EnterCriticalSection(&session_cs);
- for(iter = mime_filter_list; iter; iter = iter->next) {
- if(iter->cf == pCF && !strcmpW(iter->mime, pwzType))
- break;
- prev = iter;
- }
-
- if(iter) {
- if(prev)
- prev->next = iter->next;
- else
- mime_filter_list = iter->next;
- }
+ LIST_FOR_EACH_ENTRY(iter, &mime_filter_list, mime_filter, entry) {
+ if(iter->cf == pCF && !strcmpW(iter->mime, pwzType)) {
+ list_remove(&iter->entry);
- LeaveCriticalSection(&session_cs);
+ LeaveCriticalSection(&session_cs);
- if(iter) {
- IClassFactory_Release(iter->cf);
- heap_free(iter->mime);
- heap_free(iter);
+ IClassFactory_Release(iter->cf);
+ heap_free(iter->mime);
+ heap_free(iter);
+ return S_OK;
+ }
}
+ LeaveCriticalSection(&session_cs);
return S_OK;
}
static void ensure_useragent(void)
{
- DWORD size = sizeof(DWORD), res, type;
- HKEY hkey;
-
- static const WCHAR user_agentW[] = {'U','s','e','r',' ','A','g','e','n','t',0};
+ OSVERSIONINFOW info = {sizeof(info)};
+ const WCHAR *os_type, *is_nt;
+ WCHAR buf[512];
+ BOOL is_wow;
+
+ static const WCHAR formatW[] =
+ {'M','o','z','i','l','l','a','/','4','.','0',
+ ' ','(','c','o','m','p','a','t','i','b','l','e',';',
+ ' ','M','S','I','E',' ','8','.','0',';',
+ ' ','W','i','n','d','o','w','s',' ','%','s','%','d','.','%','d',';',
+ ' ','%','s',';',' ','T','r','i','d','e','n','t','/','5','.','0',')',0};
+ static const WCHAR ntW[] = {'N','T',' ',0};
+ static const WCHAR win32W[] = {'W','i','n','3','2',0};
+ static const WCHAR win64W[] = {'W','i','n','6','4',0};
+ static const WCHAR wow64W[] = {'W','O','W','6','4',0};
+ static const WCHAR emptyW[] = {0};
if(user_agent)
return;
- res = RegOpenKeyW(HKEY_CURRENT_USER, internet_settings_keyW, &hkey);
- if(res != ERROR_SUCCESS)
- return;
+ GetVersionExW(&info);
+ is_nt = info.dwPlatformId == VER_PLATFORM_WIN32_NT ? ntW : emptyW;
- res = RegQueryValueExW(hkey, user_agentW, NULL, &type, NULL, &size);
- if(res == ERROR_SUCCESS && type == REG_SZ) {
- user_agent = heap_alloc(size);
- res = RegQueryValueExW(hkey, user_agentW, NULL, &type, (LPBYTE)user_agent, &size);
- if(res != ERROR_SUCCESS) {
- heap_free(user_agent);
- user_agent = NULL;
- }
- }else {
- WARN("Could not find User Agent value: %u\n", res);
- }
+ if(sizeof(void*) == 8)
+ os_type = win64W;
+ else if(IsWow64Process(GetCurrentProcess(), &is_wow) && is_wow)
+ os_type = wow64W;
+ else
+ os_type = win32W;
- RegCloseKey(hkey);
+ sprintfW(buf, formatW, is_nt, info.dwMajorVersion, info.dwMinorVersion, os_type);
+ user_agent = heap_strdupW(buf);
}
LPWSTR get_useragent(void)
void free_session(void)
{
+ name_space *ns_iter, *ns_last;
+ mime_filter *mf_iter, *mf_last;
+
+ LIST_FOR_EACH_ENTRY_SAFE(ns_iter, ns_last, &name_space_list, name_space, entry) {
+ if(!ns_iter->urlmon)
+ IClassFactory_Release(ns_iter->cf);
+ heap_free(ns_iter->protocol);
+ heap_free(ns_iter);
+ }
+
+ LIST_FOR_EACH_ENTRY_SAFE(mf_iter, mf_last, &mime_filter_list, mime_filter, entry) {
+ IClassFactory_Release(mf_iter->cf);
+ heap_free(mf_iter->mime);
+ heap_free(mf_iter);
+ }
+
heap_free(user_agent);
}
LONG ref;
- LPOLESTR URLName; /* URL string identified by this URLmoniker */
+ IUri *uri;
+ BSTR URLName;
} URLMoniker;
static inline URLMoniker *impl_from_IMoniker(IMoniker *iface)
return E_NOINTERFACE;
}
- IMoniker_AddRef((IUnknown*)*ppv);
+ IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
TRACE("(%p) ref=%u\n",This, refCount);
if (!refCount) {
- heap_free(This->URLName);
+ if(This->uri)
+ IUri_Release(This->uri);
+ SysFreeString(This->URLName);
heap_free(This);
URLMON_UnlockModule();
static HRESULT WINAPI URLMoniker_Load(IMoniker* iface,IStream* pStm)
{
URLMoniker *This = impl_from_IMoniker(iface);
- HRESULT res;
+ WCHAR *new_uri_str;
+ IUri *new_uri;
+ BSTR new_url;
ULONG size;
ULONG got;
+ HRESULT hres;
TRACE("(%p,%p)\n",This,pStm);
* Writes a ULONG containing length of unicode string, followed
* by that many unicode characters
*/
- res = IStream_Read(pStm, &size, sizeof(ULONG), &got);
- if(SUCCEEDED(res)) {
- if(got == sizeof(ULONG)) {
- heap_free(This->URLName);
- This->URLName = heap_alloc(size);
- if(!This->URLName)
- res = E_OUTOFMEMORY;
- else {
- res = IStream_Read(pStm, This->URLName, size, NULL);
- This->URLName[size/sizeof(WCHAR) - 1] = 0;
- }
- }
- else
- res = E_FAIL;
+ hres = IStream_Read(pStm, &size, sizeof(ULONG), &got);
+ if(FAILED(hres))
+ return hres;
+ if(got != sizeof(ULONG))
+ return E_FAIL;
+
+ new_uri_str = heap_alloc(size+sizeof(WCHAR));
+ if(!new_uri_str)
+ return E_OUTOFMEMORY;
+
+ hres = IStream_Read(pStm, new_uri_str, size, NULL);
+ new_uri_str[size/sizeof(WCHAR)] = 0;
+ if(SUCCEEDED(hres))
+ hres = CreateUri(new_uri_str, 0, 0, &new_uri);
+ heap_free(new_uri_str);
+ if(FAILED(hres))
+ return hres;
+
+ hres = IUri_GetDisplayUri(new_uri, &new_url);
+ if(FAILED(hres)) {
+ IUri_Release(new_uri);
+ return hres;
}
- return res;
+ SysFreeString(This->URLName);
+ if(This->uri)
+ IUri_Release(This->uri);
+
+ This->uri = new_uri;
+ This->URLName = new_url;
+ return S_OK;
}
static HRESULT WINAPI URLMoniker_Save(IMoniker *iface, IStream* pStm, BOOL fClearDirty)
if(!pStm)
return E_INVALIDARG;
- size = (strlenW(This->URLName) + 1)*sizeof(WCHAR);
+ size = (SysStringLen(This->URLName) + 1)*sizeof(WCHAR);
res=IStream_Write(pStm,&size,sizeof(ULONG),NULL);
if(SUCCEEDED(res))
res=IStream_Write(pStm,This->URLName,size,NULL);
if(!pcbSize)
return E_INVALIDARG;
- pcbSize->QuadPart = sizeof(ULONG) + ((strlenW(This->URLName)+1) * sizeof(WCHAR));
+ pcbSize->QuadPart = sizeof(ULONG) + ((SysStringLen(This->URLName)+1) * sizeof(WCHAR));
return S_OK;
}
{
URLMoniker *This = impl_from_IMoniker(iface);
IRunningObjectTable *obj_tbl;
- IUri *uri;
HRESULT hres;
- TRACE("(%p)->(%p,%p,%s,%p): stub\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppv);
+ TRACE("(%p)->(%p,%p,%s,%p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppv);
hres = IBindCtx_GetRunningObjectTable(pbc, &obj_tbl);
if(SUCCEEDED(hres)) {
IRunningObjectTable_Release(obj_tbl);
}
- hres = CreateUri(This->URLName, Uri_CREATE_FILE_USE_DOS_PATH, 0, &uri);
- if(FAILED(hres))
- return hres;
-
- hres = bind_to_object(iface, uri, pbc, riid, ppv);
+ if(!This->uri) {
+ *ppv = NULL;
+ return MK_E_SYNTAX;
+ }
- IUri_Release(uri);
- return hres;
+ return bind_to_object(&This->IMoniker_iface, This->uri, pbc, riid, ppv);
}
static HRESULT WINAPI URLMoniker_BindToStorage(IMoniker* iface, IBindCtx* pbc,
IMoniker* pmkToLeft, REFIID riid, void **ppvObject)
{
URLMoniker *This = impl_from_IMoniker(iface);
- IUri *uri;
- HRESULT hres;
TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObject);
if(pmkToLeft)
FIXME("Unsupported pmkToLeft\n");
- hres = CreateUri(This->URLName, Uri_CREATE_FILE_USE_DOS_PATH, 0, &uri);
- if(FAILED(hres))
- return hres;
-
- hres = bind_to_storage(uri, pbc, riid, ppvObject);
+ if(!This->uri)
+ return MK_E_SYNTAX;
- IUri_Release(uri);
- return hres;
+ return bind_to_storage(This->uri, pbc, riid, ppvObject);
}
static HRESULT WINAPI URLMoniker_Reduce(IMoniker *iface, IBindCtx *pbc,
if(result == 0)
res = S_OK;
}
- IUnknown_Release(bind);
+ IBindCtx_Release(bind);
return res;
}
/* FIXME: If this is a partial URL, try and get a URL moniker from SZ_URLCONTEXT in the bind context,
then look at pmkToLeft to try and complete the URL
*/
- len = lstrlenW(This->URLName)+1;
+ len = SysStringLen(This->URLName)+1;
*ppszDisplayName = CoTaskMemAlloc(len*sizeof(WCHAR));
if(!*ppszDisplayName)
return E_OUTOFMEMORY;
{
URLMoniker *This = impl_from_IUriContainer(iface);
- FIXME("(%p)->(%p)\n", This, ppIUri);
+ TRACE("(%p)->(%p)\n", This, ppIUri);
- *ppIUri = NULL;
- return S_FALSE;
+ if(!This->uri) {
+ *ppIUri = NULL;
+ return S_FALSE;
+ }
+
+ IUri_AddRef(This->uri);
+ *ppIUri = This->uri;
+ return S_OK;
}
static const IUriContainerVtbl UriContainerVtbl = {
UriContainer_GetIUri
};
- static URLMoniker *alloc_moniker(void)
- {
- URLMoniker *ret;
-
- ret = heap_alloc(sizeof(URLMoniker));
- if(!ret)
- return NULL;
-
- ret->IMoniker_iface.lpVtbl = &URLMonikerVtbl;
- ret->IUriContainer_iface.lpVtbl = &UriContainerVtbl;
- ret->ref = 1;
- ret->URLName = NULL;
-
- return ret;
- }
-
- static HRESULT URLMoniker_Init(URLMoniker *This, LPCOLESTR lpszLeftURLName, LPCOLESTR lpszURLName)
+ static HRESULT create_moniker(IUri *uri, URLMoniker **ret)
{
+ URLMoniker *mon;
HRESULT hres;
- DWORD sizeStr = 0;
- TRACE("(%p,%s,%s)\n",This,debugstr_w(lpszLeftURLName),debugstr_w(lpszURLName));
+ mon = heap_alloc(sizeof(*mon));
+ if(!mon)
+ return E_OUTOFMEMORY;
- This->URLName = heap_alloc(INTERNET_MAX_URL_LENGTH*sizeof(WCHAR));
+ mon->IMoniker_iface.lpVtbl = &URLMonikerVtbl;
+ mon->IUriContainer_iface.lpVtbl = &UriContainerVtbl;
+ mon->ref = 1;
- if(lpszLeftURLName)
- hres = CoInternetCombineUrl(lpszLeftURLName, lpszURLName, URL_FILE_USE_PATHURL,
- This->URLName, INTERNET_MAX_URL_LENGTH, &sizeStr, 0);
- else
- hres = CoInternetParseUrl(lpszURLName, PARSE_CANONICALIZE, URL_FILE_USE_PATHURL,
- This->URLName, INTERNET_MAX_URL_LENGTH, &sizeStr, 0);
+ if(uri) {
+ /* FIXME: try to avoid it */
+ hres = IUri_GetDisplayUri(uri, &mon->URLName);
+ if(FAILED(hres)) {
+ heap_free(mon);
+ return hres;
+ }
- if(FAILED(hres)) {
- heap_free(This->URLName);
- return hres;
+ IUri_AddRef(uri);
+ mon->uri = uri;
+ }else {
+ mon->URLName = NULL;
+ mon->uri = NULL;
}
URLMON_LockModule();
-
- if(sizeStr != INTERNET_MAX_URL_LENGTH)
- This->URLName = heap_realloc(This->URLName, (sizeStr+1)*sizeof(WCHAR));
-
- TRACE("URLName = %s\n", debugstr_w(This->URLName));
-
+ *ret = mon;
return S_OK;
}
HRESULT StdURLMoniker_Construct(IUnknown *outer, void **ppv)
{
+ URLMoniker *mon;
+ HRESULT hres;
+
TRACE("(%p %p)\n", outer, ppv);
- *ppv = alloc_moniker();
- return *ppv ? S_OK : E_OUTOFMEMORY;
+ hres = create_moniker(NULL, &mon);
+ if(FAILED(hres))
+ return hres;
+
+ *ppv = &mon->IMoniker_iface;
+ return S_OK;
}
+ static const DWORD create_flags_map[3] = {
+ Uri_CREATE_FILE_USE_DOS_PATH, /* URL_MK_LEGACY */
+ 0, /* URL_MK_UNIFORM */
+ Uri_CREATE_NO_CANONICALIZE /* URL_MK_NO_CANONICALIZE */
+ };
+
+ static const DWORD combine_flags_map[3] = {
+ URL_FILE_USE_PATHURL, /* URL_MK_LEGACY */
+ 0, /* URL_MK_UNIFORM */
+ URL_DONT_SIMPLIFY /* URL_MK_NO_CANONICALIZE */
+ };
+
/***********************************************************************
* CreateURLMonikerEx (URLMON.@)
*
*/
HRESULT WINAPI CreateURLMonikerEx(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk, DWORD dwFlags)
{
+ IUri *uri, *base_uri = NULL;
URLMoniker *obj;
HRESULT hres;
- LPOLESTR lefturl = NULL;
TRACE("(%p, %s, %p, %08x)\n", pmkContext, debugstr_w(szURL), ppmk, dwFlags);
if (!szURL || !ppmk)
return E_INVALIDARG;
- if (dwFlags & URL_MK_UNIFORM) FIXME("ignoring flag URL_MK_UNIFORM\n");
+ if(dwFlags >= sizeof(create_flags_map)/sizeof(*create_flags_map)) {
+ FIXME("Unsupported flags %x\n", dwFlags);
+ return E_INVALIDARG;
+ }
+
+ if(pmkContext) {
+ IUriContainer *uri_container;
+
+ hres = IMoniker_QueryInterface(pmkContext, &IID_IUriContainer, (void**)&uri_container);
+ if(SUCCEEDED(hres)) {
+ hres = IUriContainer_GetIUri(uri_container, &base_uri);
+ IUriContainer_Release(uri_container);
+ if(FAILED(hres))
+ return hres;
+ }
+ }
+
+ if(base_uri) {
+ hres = CoInternetCombineUrlEx(base_uri, szURL, combine_flags_map[dwFlags], &uri, 0);
+ IUri_Release(base_uri);
+ }else {
+ hres = CreateUri(szURL, Uri_CREATE_ALLOW_RELATIVE|Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME|create_flags_map[dwFlags], 0, &uri);
+ }
+ if(FAILED(hres))
+ return hres;
+
+ hres = create_moniker(uri, &obj);
+ IUri_Release(uri);
+ if(FAILED(hres))
+ return hres;
+
+ *ppmk = &obj->IMoniker_iface;
+ return S_OK;
+ }
+
+ /***********************************************************************
+ * CreateURLMonikerEx2 (URLMON.@)
+ */
+ HRESULT WINAPI CreateURLMonikerEx2(IMoniker *pmkContext, IUri *pUri, IMoniker **ppmk, DWORD dwFlags)
+ {
+ IUri *context_uri = NULL, *uri;
+ IUriContainer *uri_container;
+ URLMoniker *ret;
+ HRESULT hres;
+
+ TRACE("(%p %p %p %x)\n", pmkContext, pUri, ppmk, dwFlags);
+
+ if (ppmk)
+ *ppmk = NULL;
- if(!(obj = alloc_moniker()))
- return E_OUTOFMEMORY;
+ if (!pUri || !ppmk)
+ return E_INVALIDARG;
+
+ if(dwFlags >= sizeof(create_flags_map)/sizeof(*create_flags_map)) {
+ FIXME("Unsupported flags %x\n", dwFlags);
+ return E_INVALIDARG;
+ }
if(pmkContext) {
- IBindCtx* bind;
- DWORD dwMksys = 0;
- IMoniker_IsSystemMoniker(pmkContext, &dwMksys);
- if(dwMksys == MKSYS_URLMONIKER && SUCCEEDED(CreateBindCtx(0, &bind))) {
- IMoniker_GetDisplayName(pmkContext, bind, NULL, &lefturl);
- TRACE("lefturl = %s\n", debugstr_w(lefturl));
- IBindCtx_Release(bind);
+ hres = IMoniker_QueryInterface(pmkContext, &IID_IUriContainer, (void**)&uri_container);
+ if(SUCCEEDED(hres)) {
+ hres = IUriContainer_GetIUri(uri_container, &context_uri);
+ if(FAILED(hres))
+ context_uri = NULL;
+ IUriContainer_Release(uri_container);
}
}
-
- hres = URLMoniker_Init(obj, lefturl, szURL);
- CoTaskMemFree(lefturl);
- if(SUCCEEDED(hres))
- hres = URLMoniker_QueryInterface(&obj->IMoniker_iface, &IID_IMoniker, (void**)ppmk);
- IMoniker_Release(&obj->IMoniker_iface);
- return hres;
+
+ if(context_uri) {
+ hres = CoInternetCombineIUri(context_uri, pUri, combine_flags_map[dwFlags], &uri, 0);
+ IUri_Release(context_uri);
+ if(FAILED(hres))
+ return hres;
+ }else {
+ uri = pUri;
+ IUri_AddRef(uri);
+ }
+
+ hres = create_moniker(uri, &ret);
+ IUri_Release(uri);
+ if(FAILED(hres))
+ return hres;
+
+ *ppmk = &ret->IMoniker_iface;
+ return S_OK;
}
/**********************************************************************
FIXME("%s %p\n", debugstr_w(szDistUnit), psdi );
return E_FAIL;
}
-
- /***********************************************************************
- * AsyncInstallDistributionUnit (URLMON.@)
- */
- HRESULT WINAPI AsyncInstallDistributionUnit( LPCWSTR szDistUnit, LPCWSTR szTYPE,
- LPCWSTR szExt, DWORD dwFileVersionMS, DWORD dwFileVersionLS,
- LPCWSTR szURL, IBindCtx *pbc, LPVOID pvReserved, DWORD flags )
- {
- FIXME(": stub\n");
- return E_NOTIMPL;
- }
IsEqualGUID(&IID_IUnknown, riid))
{
*ppv = iface;
- IUnknown_AddRef(iface);
+ IBindStatusCallback_AddRef(iface);
return S_OK;
}
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+ //#include <limits.h>
+
#include "urlmon_main.h"
#include <wine/debug.h>
#include <strsafe.h>
- #define UINT_MAX 0xffffffff
- #define USHORT_MAX 0xffff
-
#define URI_DISPLAY_NO_ABSOLUTE_URI 0x1
#define URI_DISPLAY_NO_DEFAULT_PORT_AUTH 0x2
typedef struct {
IUri IUri_iface;
IUriBuilderFactory IUriBuilderFactory_iface;
+ IPersistStream IPersistStream_iface;
+ IMarshal IMarshal_iface;
LONG ref;
BOOL has_implicit_scheme;
BOOL has_implicit_ip;
UINT implicit_ipv4;
+ BOOL must_have_path;
const WCHAR *scheme;
DWORD scheme_len;
{URL_SCHEME_HTTPS, 443},
};
- /* List of 3 character top level domain names Windows seems to recognize.
+ /* List of 3-character top level domain names Windows seems to recognize.
* There might be more, but, these are the only ones I've found so far.
*/
static const struct {
}
static inline BOOL is_unc_path(const WCHAR *str) {
- return (str[0] == '\\' && str[0] == '\\');
+ return (str[0] == '\\' && str[1] == '\\');
}
static inline BOOL is_forbidden_dos_path_char(WCHAR val) {
}
/* A URI is implicitly a file path if it begins with
- * a drive letter (eg X:) or starts with "\\" (UNC path).
+ * a drive letter (e.g. X:) or starts with "\\" (UNC path).
*/
static inline BOOL is_implicit_file_path(const WCHAR *str) {
return (is_unc_path(str) || (is_alpha(str[0]) && str[1] == ':'));
/* Characters that delimit the end of the authority
* section of a URI. Sometimes a '\\' is considered
- * an authority delimeter.
+ * an authority delimiter.
*/
static inline BOOL is_auth_delim(WCHAR val, BOOL acceptSlash) {
return (val == '#' || val == '/' || val == '?' ||
/* Determines if the URI is hierarchical using the information already parsed into
* data and using the current location of parsing in the URI string.
*
- * Windows considers a URI hierarchical if on of the following is true:
+ * Windows considers a URI hierarchical if one of the following is true:
* A.) It's a wildcard scheme.
* B.) It's an implicit file scheme.
* C.) It's a known hierarchical scheme and it has two '\\' after the scheme name.
* (the '\\' will be converted into "//" during canonicalization).
- * D.) It's not a relative URI and "//" appears after the scheme name.
+ * D.) "//" appears after the scheme name (or at the beginning if no scheme is given).
*/
static inline BOOL is_hierarchical_uri(const WCHAR **ptr, const parse_data *data) {
const WCHAR *start = *ptr;
else if(is_hierarchical_scheme(data->scheme_type) && (*ptr)[0] == '\\' && (*ptr)[1] == '\\') {
*ptr += 2;
return TRUE;
- } else if(!data->is_relative && check_hierarchical(ptr))
+ } else if(check_hierarchical(ptr))
return TRUE;
*ptr = start;
return FALSE;
}
- /* Checks if the two Uri's are logically equivalent. It's a simple
- * comparison, since they are both of type Uri, and it can access
- * the properties of each Uri directly without the need to go
- * through the "IUri_Get*" interface calls.
- */
- static BOOL are_equal_simple(const Uri *a, const Uri *b) {
- if(a->scheme_type == b->scheme_type) {
- const BOOL known_scheme = a->scheme_type != URL_SCHEME_UNKNOWN;
- const BOOL are_hierarchical =
- (a->authority_start > -1 && b->authority_start > -1);
-
- if(a->scheme_type == URL_SCHEME_FILE) {
- if(a->canon_len == b->canon_len)
- return !StrCmpIW(a->canon_uri, b->canon_uri);
- }
-
- /* Only compare the scheme names (if any) if their unknown scheme types. */
- if(!known_scheme) {
- if((a->scheme_start > -1 && b->scheme_start > -1) &&
- (a->scheme_len == b->scheme_len)) {
- /* Make sure the schemes are the same. */
- if(StrCmpNW(a->canon_uri+a->scheme_start, b->canon_uri+b->scheme_start, a->scheme_len))
- return FALSE;
- } else if(a->scheme_len != b->scheme_len)
- /* One of the Uri's has a scheme name, while the other doesn't. */
- return FALSE;
- }
-
- /* If they have a userinfo component, perform case sensitive compare. */
- if((a->userinfo_start > -1 && b->userinfo_start > -1) &&
- (a->userinfo_len == b->userinfo_len)) {
- if(StrCmpNW(a->canon_uri+a->userinfo_start, b->canon_uri+b->userinfo_start, a->userinfo_len))
- return FALSE;
- } else if(a->userinfo_len != b->userinfo_len)
- /* One of the Uri's had a userinfo, while the other one doesn't. */
- return FALSE;
-
- /* Check if they have a host name. */
- if((a->host_start > -1 && b->host_start > -1) &&
- (a->host_len == b->host_len)) {
- /* Perform a case insensitive compare if they are a known scheme type. */
- if(known_scheme) {
- if(StrCmpNIW(a->canon_uri+a->host_start, b->canon_uri+b->host_start, a->host_len))
- return FALSE;
- } else if(StrCmpNW(a->canon_uri+a->host_start, b->canon_uri+b->host_start, a->host_len))
- return FALSE;
- } else if(a->host_len != b->host_len)
- /* One of the Uri's had a host, while the other one didn't. */
- return FALSE;
-
- if(a->has_port && b->has_port) {
- if(a->port != b->port)
- return FALSE;
- } else if(a->has_port || b->has_port)
- /* One had a port, while the other one didn't. */
- return FALSE;
-
- /* Windows is weird with how it handles paths. For example
- * One URI could be "http://google.com" (after canonicalization)
- * and one could be "http://google.com/" and the IsEqual function
- * would still evaluate to TRUE, but, only if they are both hierarchical
- * URIs.
- */
- if((a->path_start > -1 && b->path_start > -1) &&
- (a->path_len == b->path_len)) {
- if(StrCmpNW(a->canon_uri+a->path_start, b->canon_uri+b->path_start, a->path_len))
- return FALSE;
- } else if(are_hierarchical && a->path_len == -1 && b->path_len == 0) {
- if(*(a->canon_uri+a->path_start) != '/')
- return FALSE;
- } else if(are_hierarchical && b->path_len == 1 && a->path_len == 0) {
- if(*(b->canon_uri+b->path_start) != '/')
- return FALSE;
- } else if(a->path_len != b->path_len)
- return FALSE;
-
- /* Compare the query strings of the two URIs. */
- if((a->query_start > -1 && b->query_start > -1) &&
- (a->query_len == b->query_len)) {
- if(StrCmpNW(a->canon_uri+a->query_start, b->canon_uri+b->query_start, a->query_len))
- return FALSE;
- } else if(a->query_len != b->query_len)
- return FALSE;
-
- if((a->fragment_start > -1 && b->fragment_start > -1) &&
- (a->fragment_len == b->fragment_len)) {
- if(StrCmpNW(a->canon_uri+a->fragment_start, b->canon_uri+b->fragment_start, a->fragment_len))
- return FALSE;
- } else if(a->fragment_len != b->fragment_len)
- return FALSE;
-
- /* If we get here, the two URIs are equivalent. */
- return TRUE;
- }
-
- return FALSE;
- }
-
/* Computes the size of the given IPv6 address.
- * Each h16 component is 16bits, if there is an IPv4 address, it's
- * 32bits. If there's an elision it can be 16bits to 128bits, depending
+ * Each h16 component is 16 bits. If there is an IPv4 address, it's
+ * 32 bits. If there's an elision it can be 16 to 128 bits, depending
* on the number of other components.
*
* Modeled after google-url's CheckIPv6ComponentsSize function
if(address->elision) {
/* An elision can be anywhere from 2 bytes up to 16 bytes.
- * It size depends on the size of the h16 and IPv4 components.
+ * Its size depends on the size of the h16 and IPv4 components.
*/
address->elision_size = 16 - address->components_size;
if(address->elision_size < 2)
* the two characters following the '%' aren't valid hex values then
* this function returns the NULL character.
*
- * Eg.
+ * E.g.
* "%2E" will result in '.' being returned by this function.
*/
static WCHAR decode_pct_val(const WCHAR *ptr) {
*domain_start = -1;
/* There has to be at least enough room for a '.' followed by a
- * 3 character TLD for a domain to even exist in the host name.
+ * 3-character TLD for a domain to even exist in the host name.
*/
if(host_len < 4)
return;
} else if(last_tld-host == 3) {
DWORD i;
- /* If there's three characters in front of last_tld and
+ /* If there are three characters in front of last_tld and
* they are on the list of recognized TLDs, then this
* host doesn't have a domain (since the host only contains
* a TLD name.
/* Computes the location where the elision should occur in the IPv6
* address using the numerical values of each component stored in
* 'values'. If the address shouldn't contain an elision then 'index'
- * is assigned -1 as it's value. Otherwise 'index' will contain the
+ * is assigned -1 as its value. Otherwise 'index' will contain the
* starting index (into values) where the elision should be, and 'count'
* will contain the number of cells the elision covers.
*
* NOTES:
- * Windows will expand an elision if the elision only represents 1 h16
+ * Windows will expand an elision if the elision only represents one h16
* component of the address.
*
* Ex: [1::2:3:4:5:6:7] -> [1:0:2:3:4:5:6:7]
* characters inside of the URI string.
*/
static BSTR pre_process_uri(LPCWSTR uri) {
- BSTR ret;
+ const WCHAR *start, *end, *ptr;
+ WCHAR *ptr2;
DWORD len;
- const WCHAR *start, *end;
- WCHAR *buf, *ptr;
-
- len = lstrlenW(uri);
+ BSTR ret;
start = uri;
/* Skip leading controls and whitespace. */
- while(iscntrlW(*start) || isspaceW(*start)) ++start;
+ while(*start && (iscntrlW(*start) || isspaceW(*start))) ++start;
- end = uri+len-1;
- if(start == end)
- /* URI consisted only of control/whitespace. */
- ret = SysAllocStringLen(NULL, 0);
- else {
- while(iscntrlW(*end) || isspaceW(*end)) --end;
+ /* URI consisted only of control/whitespace. */
+ if(!*start)
+ return SysAllocStringLen(NULL, 0);
- buf = heap_alloc(((end+1)-start)*sizeof(WCHAR));
- if(!buf)
- return NULL;
+ end = start + strlenW(start);
+ while(--end > start && (iscntrlW(*end) || isspaceW(*end)));
- for(ptr = buf; start < end+1; ++start) {
- if(!iscntrlW(*start))
- *ptr++ = *start;
- }
+ len = ++end - start;
+ for(ptr = start; ptr < end; ptr++) {
+ if(iscntrlW(*ptr))
+ len--;
+ }
- ret = SysAllocStringLen(buf, ptr-buf);
- heap_free(buf);
+ ret = SysAllocStringLen(NULL, len);
+ if(!ret)
+ return NULL;
+
+ for(ptr = start, ptr2=ret; ptr < end; ptr++) {
+ if(!iscntrlW(*ptr))
+ *ptr2++ = *ptr;
}
return ret;
return ret;
}
- /* Converts an IPv4 address in numerical form into it's fully qualified
+ /* Converts an IPv4 address in numerical form into its fully qualified
* string form. This function returns the number of characters written
* to 'dest'. If 'dest' is NULL this function will return the number of
* characters that would have been written.
return ret;
}
- /* Converts an h16 component (from an IPv6 address) into it's
+ /* Converts a h16 component (from an IPv6 address) into its
* numerical value.
*
* This function assumes that the h16 component has already been validated.
/* Means we just passed the elision and need to add its values to
* 'number' before we do anything else.
*/
- DWORD j = 0;
+ INT j;
for(j = 0; j < address->elision_size; j+=2)
number[cur_component++] = 0;
/* Case when the elision appears after the h16 components. */
if(!already_passed_elision && address->elision) {
- for(i = 0; i < address->elision_size; i+=2)
+ INT j;
+ for(j = 0; j < address->elision_size; j+=2)
number[cur_component++] = 0;
}
++(*ptr);
c2 = *ptr;
- /* Since the 1 digit requirment was meet, it doesn't
+ /* Since the 1-digit requirement was met, it doesn't
* matter if this is a DIGIT value, it's considered a
* dec-octet.
*/
TRACE("(%p %p %x): URI is an implicit file path.\n", ptr, data, flags);
} else {
- /* Window's does not consider anything that can implicitly be a file
+ /* Windows does not consider anything that can implicitly be a file
* path to be a valid URI if the ALLOW_IMPLICIT_FILE_SCHEME flag is not set...
*/
TRACE("(%p %p %x): URI is implicitly a file path, but, the ALLOW_IMPLICIT_FILE_SCHEME flag wasn't set.\n",
return FALSE;
}
} else if(!parse_scheme_name(ptr, data, extras)) {
- /* No Scheme was found, this means it could be:
+ /* No scheme was found, this means it could be:
* a) an implicit Wildcard scheme
* b) a relative URI
- * c) a invalid URI.
+ * c) an invalid URI.
*/
if(flags & Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME) {
data->scheme = wildcardW;
* ex:
* ftp://user:pass:word@winehq.org
*
- * Would yield, "user" as the username and "pass:word" as the password.
+ * would yield "user" as the username and "pass:word" as the password.
*
* 2) Windows allows any character to appear in the "userinfo" part of
- * a URI, as long as it's not an authority delimeter character set.
+ * a URI, as long as it's not an authority delimiter character set.
*/
static void parse_userinfo(const WCHAR **ptr, parse_data *data, DWORD flags) {
const WCHAR *start = *ptr;
port = port*10 + (**ptr-'0');
- if(port > USHORT_MAX) {
+ if(port > USHRT_MAX) {
*ptr = data->port;
data->port = NULL;
return FALSE;
/* Attempts to parse a IPv4 address from the URI.
*
* NOTES:
- * Window's normalizes IPv4 addresses, This means there's three
+ * Windows normalizes IPv4 addresses, This means there are three
* possibilities for the URI to contain an IPv4 address.
* 1) A well formed address (ex. 192.2.2.2).
* 2) A partially formed address. For example "192.0" would
data->has_implicit_ip = TRUE;
}
+ data->host_len = *ptr - data->host;
+ data->host_type = Uri_HOST_IPV4;
+
/* Check if what we found is the only part of the host name (if it isn't
* we don't have an IPv4 address).
*/
return FALSE;
}
} else if(!is_auth_delim(**ptr, !is_unknown)) {
- /* Found more data which belongs the host, so this isn't an IPv4. */
+ /* Found more data which belongs to the host, so this isn't an IPv4. */
*ptr = data->host;
data->host = NULL;
data->has_implicit_ip = FALSE;
return FALSE;
}
- data->host_len = *ptr - data->host;
- data->host_type = Uri_HOST_IPV4;
-
TRACE("(%p %p %x): IPv4 address found. host=%s host_len=%d host_type=%d\n",
ptr, data, flags, debugstr_wn(data->host, data->host_len),
data->host_len, data->host_type);
* Windows doesn't like host names which start with '[' and end with ']'
* and don't contain a valid IP literal address in between them.
*
- * On Windows if an '[' is encountered in the host name the ':' no longer
- * counts as a delimiter until you reach the next ']' or an "authority delimeter".
+ * On Windows if a '[' is encountered in the host name the ':' no longer
+ * counts as a delimiter until you reach the next ']' or an "authority delimiter".
*
* A reg-name CAN be empty.
*/
* path can also have a '|' instead of a ':' after the drive letter.
*/
if(is_drive_path(*ptr)) {
- /* Regular old drive paths don't have a host type (or host name). */
+ /* Regular old drive paths have no host type (or host name). */
data->host_type = Uri_HOST_UNKNOWN;
data->host = *ptr;
data->host_len = 0;
return FALSE;
} else
/* Windows gives up on trying to parse a port when it
- * encounters 1 invalid port.
+ * encounters an invalid port.
*/
ignore_col = TRUE;
} else {
if(ip.elision_size == 2) {
/* For some reason on Windows if an elision that represents
- * only 1 h16 component is encountered at the very begin or
+ * only one h16 component is encountered at the very begin or
* end of an IPv6 address, Windows does not consider it a
* valid IPv6 address.
*
const BOOL is_file = data->scheme_type == URL_SCHEME_FILE;
if(is_path_delim(**ptr)) {
- if(data->scheme_type == URL_SCHEME_WILDCARD) {
- /* Wildcard schemes don't get a '/' attached if their path is
- * empty.
- */
+ if(data->scheme_type == URL_SCHEME_WILDCARD && !data->must_have_path) {
data->path = NULL;
data->path_len = 0;
} else if(!(flags & Uri_CREATE_NO_CANONICALIZE)) {
return TRUE;
}
- /* Parses the path of a opaque URI (much less strict then the parser
+ /* Parses the path of an opaque URI (much less strict then the parser
* for a hierarchical URI).
*
* NOTE:
/* Determines how the URI should be parsed after the scheme information.
*
- * If the scheme is followed, by "//" then, it is treated as an hierarchical URI
+ * If the scheme is followed by "//", then it is treated as a hierarchical URI
* which then the authority and path information will be parsed out. Otherwise, the
* URI will be treated as an opaque URI which the authority information is not parsed
* out.
* NOTES:
* If the URI is of an unknown scheme type and has a "//" following the scheme then it
* is treated as a hierarchical URI, but, if the CREATE_NO_CRACK_UNKNOWN_SCHEMES flag is
- * set then it is considered an opaque URI reguardless of what follows the scheme information
+ * set then it is considered an opaque URI regardless of what follows the scheme information
* (per MSDN documentation).
*/
static BOOL parse_hierpart(const WCHAR **ptr, parse_data *data, DWORD flags) {
const WCHAR *start = *ptr;
+ data->must_have_path = FALSE;
+
+ /* For javascript: URIs, simply set everything as a path */
+ if(data->scheme_type == URL_SCHEME_JAVASCRIPT) {
+ data->path = *ptr;
+ data->path_len = strlenW(*ptr);
+ data->is_opaque = TRUE;
+ *ptr += data->path_len;
+ return TRUE;
+ }
+
/* Checks if the authority information needs to be parsed. */
if(is_hierarchical_uri(ptr, data)) {
/* Only treat it as a hierarchical URI if the scheme_type is known or
TRACE("(%p %p %x): Treating URI as an hierarchical URI.\n", ptr, data, flags);
data->is_opaque = FALSE;
+ if(data->scheme_type == URL_SCHEME_WILDCARD && !data->has_implicit_scheme) {
+ if(**ptr == '/' && *(*ptr+1) == '/') {
+ data->must_have_path = TRUE;
+ *ptr += 2;
+ }
+ }
+
/* TODO: Handle hierarchical URI's, parse authority then parse the path. */
if(!parse_authority(ptr, data, flags))
return FALSE;
return parse_path_hierarchical(ptr, data, flags);
} else
- /* Reset ptr to it's starting position so opaque path parsing
+ /* Reset ptr to its starting position so opaque path parsing
* begins at the correct location.
*/
*ptr = start;
*
* NOTES:
* If NO_DECODE_EXTRA_INFO flag is set, then invalid percent encoded
- * data is allowed appear in the query string. For unknown scheme types
- * invalid percent encoded data is allowed to appear reguardless.
+ * data is allowed to appear in the query string. For unknown scheme types
+ * invalid percent encoded data is allowed to appear regardless.
*/
static BOOL parse_query(const WCHAR **ptr, parse_data *data, DWORD flags) {
const BOOL known_scheme = data->scheme_type != URL_SCHEME_UNKNOWN;
*
* NOTES:
* If NO_DECODE_EXTRA_INFO flag is set, then invalid percent encoded
- * data is allowed appear in the query string. For unknown scheme types
- * invalid percent encoded data is allowed to appear reguardless.
+ * data is allowed to appear in the query string. For unknown scheme types
+ * invalid percent encoded data is allowed to appear regardless.
*/
static BOOL parse_fragment(const WCHAR **ptr, parse_data *data, DWORD flags) {
const BOOL known_scheme = data->scheme_type != URL_SCHEME_UNKNOWN;
if(*ptr == '%') {
/* Only decode % encoded values for known scheme types. */
if(data->scheme_type != URL_SCHEME_UNKNOWN) {
- /* See if the value really needs decoded. */
+ /* See if the value really needs decoding. */
WCHAR val = decode_pct_val(ptr);
if(is_unreserved(val)) {
if(!computeOnly)
if(*ptr == '%') {
/* Only decode % encoded values for known scheme types. */
if(data->scheme_type != URL_SCHEME_UNKNOWN) {
- /* See if the value really needs decoded. */
+ /* See if the value really needs decoding. */
WCHAR val = decode_pct_val(ptr);
if(is_unreserved(val)) {
if(!computeOnly)
* Things that happen:
* 1) If Uri_CREATE_NO_CANONICALIZE flag is not set, then the reg_name is
* lower cased. Unless it's an unknown scheme type, which case it's
- * no lower cased reguardless.
+ * no lower cased regardless.
*
* 2) Unreserved % encoded characters are decoded for known
* scheme types.
if(*ptr == '%' && known_scheme) {
WCHAR val = decode_pct_val(ptr);
if(is_unreserved(val)) {
- /* If NO_CANONICALZE is not set, then windows lower cases the
+ /* If NO_CANONICALIZE is not set, then windows lower cases the
* decoded value.
*/
if(!(flags & Uri_CREATE_NO_CANONICALIZE) && isupperW(val)) {
uri->host_start = uri->canon_len;
TRACE("%u\n", data->implicit_ipv4);
- /* For unknown scheme types Window's doesn't convert
- * the value into an IP address, but, it still considers
+ /* For unknown scheme types Windows doesn't convert
+ * the value into an IP address, but it still considers
* it an IPv4 address.
*/
if(data->scheme_type == URL_SCHEME_UNKNOWN) {
* If the parse_data represents a URI that has an implicit IPv4 address
* (ex. http://256/, this function will convert 256 into 0.0.1.0). If
* the implicit IP address exceeds the value of UINT_MAX (maximum value
- * for an IPv4 address) it's canonicalized as if were a reg-name.
+ * for an IPv4 address) it's canonicalized as if it were a reg-name.
*
* If the parse_data contains a partial or full IPv4 address it normalizes it.
* A partial IPv4 address is something like "192.0" and would be normalized to
* be normalized to "192.2.1.3".
*
* NOTES:
- * Window's ONLY normalizes IPv4 address for known scheme types (one that isn't
+ * Windows ONLY normalizes IPv4 address for known scheme types (one that isn't
* URL_SCHEME_UNKNOWN). For unknown scheme types, it simply copies the data from
* the original URI into the canonicalized URI, but, it still recognizes URI's
* host type as HOST_IPV4.
/* Attempts to canonicalize the IPv6 address of the URI.
*
* Multiple things happen during the canonicalization of an IPv6 address:
- * 1) Any leading zero's in an h16 component are removed.
+ * 1) Any leading zero's in a h16 component are removed.
* Ex: [0001:0022::] -> [1:22::]
*
* 2) The longest sequence of zero h16 components are compressed
- * into a "::" (elision). If there's a tie, the first is choosen.
+ * into a "::" (elision). If there's a tie, the first is chosen.
*
* Ex: [0:0:0:0:1:6:7:8] -> [::1:6:7:8]
* [0:0:0:0:1:2::] -> [::1:2:0:0]
* also normalized.
* Ex: [::001.002.022.000] -> [::1.2.22.0]
*
- * 4) If an elision is present, but, only represents 1 h16 component
+ * 4) If an elision is present, but, only represents one h16 component
* it's expanded.
*
* Ex: [1::2:3:4:5:6:7] -> [1:0:2:3:4:5:6:7]
* Things that happen:
* 1). Forbidden characters are percent encoded, unless the NO_ENCODE_FORBIDDEN
* flag is set or it's a file URI. Forbidden characters are always encoded
- * for file schemes reguardless and forbidden characters are never encoded
+ * for file schemes regardless and forbidden characters are never encoded
* for unknown scheme types.
*
* 2). For known scheme types '\\' are changed to '/'.
* file:///c:/test%20test -> file:///c:/test%20test
* file:///c:/test%test -> file:///c:/test%25test
*/
- static BOOL canonicalize_path_hierarchical(const parse_data *data, Uri *uri,
- DWORD flags, BOOL computeOnly) {
+ static DWORD canonicalize_path_hierarchical(const WCHAR *path, DWORD path_len, URL_SCHEME scheme_type, BOOL has_host, DWORD flags,
+ WCHAR *ret_path) {
+ const BOOL known_scheme = scheme_type != URL_SCHEME_UNKNOWN;
+ const BOOL is_file = scheme_type == URL_SCHEME_FILE;
+ const BOOL is_res = scheme_type == URL_SCHEME_RES;
const WCHAR *ptr;
- const BOOL known_scheme = data->scheme_type != URL_SCHEME_UNKNOWN;
- const BOOL is_file = data->scheme_type == URL_SCHEME_FILE;
- const BOOL is_res = data->scheme_type == URL_SCHEME_RES;
-
BOOL escape_pct = FALSE;
+ DWORD len = 0;
- if(!data->path) {
- uri->path_start = -1;
- uri->path_len = 0;
- return TRUE;
- }
+ if(!path)
+ return 0;
- uri->path_start = uri->canon_len;
- ptr = data->path;
+ ptr = path;
- if(is_file && uri->host_start == -1) {
+ if(is_file && !has_host) {
/* Check if a '/' needs to be appended for the file scheme. */
- if(data->path_len > 1 && is_drive_path(ptr) && !(flags & Uri_CREATE_FILE_USE_DOS_PATH)) {
- if(!computeOnly)
- uri->canon_uri[uri->canon_len] = '/';
- uri->canon_len++;
+ if(path_len > 1 && is_drive_path(ptr) && !(flags & Uri_CREATE_FILE_USE_DOS_PATH)) {
+ if(ret_path)
+ ret_path[len] = '/';
+ len++;
escape_pct = TRUE;
} else if(*ptr == '/') {
if(!(flags & Uri_CREATE_FILE_USE_DOS_PATH)) {
/* Copy the extra '/' over. */
- if(!computeOnly)
- uri->canon_uri[uri->canon_len] = '/';
- ++uri->canon_len;
+ if(ret_path)
+ ret_path[len] = '/';
+ len++;
}
++ptr;
}
if(is_drive_path(ptr)) {
- if(!computeOnly) {
- uri->canon_uri[uri->canon_len] = *ptr;
- /* If theres a '|' after the drive letter, convert it to a ':'. */
- uri->canon_uri[uri->canon_len+1] = ':';
+ if(ret_path) {
+ ret_path[len] = *ptr;
+ /* If there's a '|' after the drive letter, convert it to a ':'. */
+ ret_path[len+1] = ':';
}
ptr += 2;
- uri->canon_len += 2;
+ len += 2;
}
}
- if(!is_file && *(data->path) && *(data->path) != '/') {
+ if(!is_file && *path && *path != '/') {
/* Prepend a '/' to the path if it doesn't have one. */
- if(!computeOnly)
- uri->canon_uri[uri->canon_len] = '/';
- ++uri->canon_len;
+ if(ret_path)
+ ret_path[len] = '/';
+ len++;
}
- for(; ptr < data->path+data->path_len; ++ptr) {
+ for(; ptr < path+path_len; ++ptr) {
BOOL do_default_action = TRUE;
if(*ptr == '%' && !is_res) {
const WCHAR *tmp = ptr;
WCHAR val;
- /* Check if the % represents a valid encoded char, or if it needs encoded. */
+ /* Check if the % represents a valid encoded char, or if it needs encoding. */
BOOL force_encode = !check_pct_encoded(&tmp) && is_file && !(flags&Uri_CREATE_FILE_USE_DOS_PATH);
val = decode_pct_val(ptr);
if(force_encode || escape_pct) {
/* Escape the percent sign in the file URI. */
- if(!computeOnly)
- pct_encode_val(*ptr, uri->canon_uri+uri->canon_len);
- uri->canon_len += 3;
+ if(ret_path)
+ pct_encode_val(*ptr, ret_path+len);
+ len += 3;
do_default_action = FALSE;
} else if((is_unreserved(val) && known_scheme) ||
(is_file && (is_unreserved(val) || is_reserved(val) ||
(val && flags&Uri_CREATE_FILE_USE_DOS_PATH && !is_forbidden_dos_path_char(val))))) {
- if(!computeOnly)
- uri->canon_uri[uri->canon_len] = val;
- ++uri->canon_len;
+ if(ret_path)
+ ret_path[len] = val;
+ len++;
ptr += 2;
continue;
}
} else if(*ptr == '/' && is_file && (flags & Uri_CREATE_FILE_USE_DOS_PATH)) {
/* Convert the '/' back to a '\\'. */
- if(!computeOnly)
- uri->canon_uri[uri->canon_len] = '\\';
- ++uri->canon_len;
+ if(ret_path)
+ ret_path[len] = '\\';
+ len++;
do_default_action = FALSE;
} else if(*ptr == '\\' && known_scheme) {
if(!(is_file && (flags & Uri_CREATE_FILE_USE_DOS_PATH))) {
/* Convert '\\' into a '/'. */
- if(!computeOnly)
- uri->canon_uri[uri->canon_len] = '/';
- ++uri->canon_len;
+ if(ret_path)
+ ret_path[len] = '/';
+ len++;
do_default_action = FALSE;
}
} else if(known_scheme && !is_res && !is_unreserved(*ptr) && !is_reserved(*ptr) &&
(!(flags & Uri_CREATE_NO_ENCODE_FORBIDDEN_CHARACTERS) || is_file)) {
if(!(is_file && (flags & Uri_CREATE_FILE_USE_DOS_PATH))) {
/* Escape the forbidden character. */
- if(!computeOnly)
- pct_encode_val(*ptr, uri->canon_uri+uri->canon_len);
- uri->canon_len += 3;
+ if(ret_path)
+ pct_encode_val(*ptr, ret_path+len);
+ len += 3;
do_default_action = FALSE;
}
}
if(do_default_action) {
- if(!computeOnly)
- uri->canon_uri[uri->canon_len] = *ptr;
- ++uri->canon_len;
+ if(ret_path)
+ ret_path[len] = *ptr;
+ len++;
}
}
- uri->path_len = uri->canon_len - uri->path_start;
-
/* Removing the dot segments only happens when it's not in
* computeOnly mode and it's not a wildcard scheme. File schemes
* with USE_DOS_PATH set don't get dot segments removed.
*/
if(!(is_file && (flags & Uri_CREATE_FILE_USE_DOS_PATH)) &&
- data->scheme_type != URL_SCHEME_WILDCARD) {
- if(!(flags & Uri_CREATE_NO_CANONICALIZE) && !computeOnly) {
+ scheme_type != URL_SCHEME_WILDCARD) {
+ if(!(flags & Uri_CREATE_NO_CANONICALIZE) && ret_path) {
/* Remove the dot segments (if any) and reset everything to the new
* correct length.
*/
- DWORD new_len = remove_dot_segments(uri->canon_uri+uri->path_start, uri->path_len);
- uri->canon_len -= uri->path_len-new_len;
- uri->path_len = new_len;
+ len = remove_dot_segments(ret_path, len);
}
}
- if(!computeOnly)
- TRACE("Canonicalized path %s len=%d\n",
- debugstr_wn(uri->canon_uri+uri->path_start, uri->path_len),
- uri->path_len);
-
- return TRUE;
+ if(ret_path)
+ TRACE("Canonicalized path %s len=%d\n", debugstr_wn(ret_path, len), len);
+ return len;
}
/* Attempts to canonicalize the path for an opaque URI.
const WCHAR *ptr;
const BOOL known_scheme = data->scheme_type != URL_SCHEME_UNKNOWN;
const BOOL is_file = data->scheme_type == URL_SCHEME_FILE;
+ const BOOL is_mk = data->scheme_type == URL_SCHEME_MK;
if(!data->path) {
uri->path_start = -1;
uri->path_start = uri->canon_len;
+ if(is_mk){
+ /* hijack this flag for SCHEME_MK to tell the function when to start
+ * converting slashes */
+ flags |= Uri_CREATE_FILE_USE_DOS_PATH;
+ }
+
+ /* For javascript: URIs, simply copy path part without any canonicalization */
+ if(data->scheme_type == URL_SCHEME_JAVASCRIPT) {
+ if(!computeOnly)
+ memcpy(uri->canon_uri+uri->canon_len, data->path, data->path_len*sizeof(WCHAR));
+ uri->path_len = data->path_len;
+ uri->canon_len += data->path_len;
+ return TRUE;
+ }
+
/* Windows doesn't allow a "//" to appear after the scheme
* of a URI, if it's an opaque URI.
*/
++uri->canon_len;
do_default_action = FALSE;
} else if(*ptr == '\\') {
- if(is_file && !(flags & Uri_CREATE_FILE_USE_DOS_PATH)) {
+ if((data->is_relative || is_mk || is_file) && !(flags & Uri_CREATE_FILE_USE_DOS_PATH)) {
/* Convert to a '/'. */
if(!computeOnly)
uri->canon_uri[uri->canon_len] = '/';
++uri->canon_len;
do_default_action = FALSE;
}
+ } else if(is_mk && *ptr == ':' && ptr + 1 < data->path + data->path_len && *(ptr + 1) == ':') {
+ flags &= ~Uri_CREATE_FILE_USE_DOS_PATH;
} else if(known_scheme && !is_unreserved(*ptr) && !is_reserved(*ptr) &&
!(flags & Uri_CREATE_NO_ENCODE_FORBIDDEN_CHARACTERS)) {
if(!(is_file && (flags & Uri_CREATE_FILE_USE_DOS_PATH))) {
}
}
- if(data->scheme_type == URL_SCHEME_MK && !computeOnly && !(flags & Uri_CREATE_NO_CANONICALIZE)) {
+ if(is_mk && !computeOnly && !(flags & Uri_CREATE_NO_CANONICALIZE)) {
DWORD new_len = remove_dot_segments(uri->canon_uri + uri->path_start,
uri->canon_len - uri->path_start);
uri->canon_len = uri->path_start + new_len;
*/
if((data->is_relative && (data->host || data->has_port)) ||
(!data->is_relative && data->scheme_type != URL_SCHEME_WILDCARD)) {
+ if(data->scheme_type == URL_SCHEME_WILDCARD)
+ FIXME("Here\n");
+
if(!computeOnly) {
INT pos = uri->canon_len;
if(!canonicalize_path_opaque(data, uri, flags, computeOnly))
return FALSE;
} else {
- if(!canonicalize_path_hierarchical(data, uri, flags, computeOnly))
- return FALSE;
+ if(!computeOnly)
+ uri->path_start = uri->canon_len;
+ uri->path_len = canonicalize_path_hierarchical(data->path, data->path_len, data->scheme_type, data->host_len != 0,
+ flags, computeOnly ? NULL : uri->canon_uri+uri->canon_len);
+ uri->canon_len += uri->path_len;
+ if(!computeOnly && !uri->path_len)
+ uri->path_start = -1;
}
} else {
/* Opaque URI's don't have an authority. */
uri->scheme_start = pos;
TRACE("(%p %p %x): Canonicalized scheme=%s, len=%d.\n", data, uri, flags,
- debugstr_wn(uri->canon_uri, uri->scheme_len), data->scheme_len);
+ debugstr_wn(uri->canon_uri+uri->scheme_start, data->scheme_len), data->scheme_len);
}
/* This happens in both computation modes. */
return TRUE;
}
- /* Compute's what the length of the URI specified by the parse_data will be
+ /* Computes what the length of the URI specified by the parse_data will be
* after canonicalization occurs using the specified flags.
*
* This function will return a non-zero value indicating the length of the canonicalized
}
/* Canonicalizes the URI data specified in the parse_data, using the given flags. If the
- * canonicalization succeededs it will store all the canonicalization information
+ * canonicalization succeeds it will store all the canonicalization information
* in the pointer to the Uri.
*
* To canonicalize a URI this function first computes what the length of the URI
- * specified by the parse_data will be. Once this is done it will then perfom the actual
+ * specified by the parse_data will be. Once this is done it will then perform the actual
* canonicalization of the URI.
*/
static HRESULT canonicalize_uri(const parse_data *data, Uri *uri, DWORD flags) {
*/
if(uri->canon_len < uri->canon_size) {
/* This happens if the URI is hierarchical and dot
- * segments were removed from it's path.
+ * segments were removed from its path.
*/
WCHAR *tmp = heap_realloc(uri->canon_uri, (uri->canon_len+1)*sizeof(WCHAR));
if(!tmp)
static const WCHAR nullW[] = {0};
ptr = nullW;
check_len = FALSE;
+ expected_len = -1;
}
component = ptr;
if(!valid || (check_len && expected_len != data->path_len)) {
TRACE("(%p %p %x): Invalid path component %s.\n", builder, data, flags,
- debugstr_wn(component, check_len ? expected_len : -1) );
+ debugstr_wn(component, expected_len) );
return INET_E_INVALID_URL;
}
/* The URI is opaque if it doesn't have an authority component. */
if(!data->is_relative)
- data->is_opaque = !data->username && !data->password && !data->host && !data->has_port;
+ data->is_opaque = !data->username && !data->password && !data->host && !data->has_port
+ && data->scheme_type != URL_SCHEME_FILE;
else
data->is_opaque = !data->host && !data->has_port;
return S_OK;
}
+ static HRESULT compare_file_paths(const Uri *a, const Uri *b, BOOL *ret)
+ {
+ WCHAR *canon_path_a, *canon_path_b;
+ DWORD len_a, len_b;
+
+ if(!a->path_len) {
+ *ret = !b->path_len;
+ return S_OK;
+ }
+
+ if(!b->path_len) {
+ *ret = FALSE;
+ return S_OK;
+ }
+
+ /* Fast path */
+ if(a->path_len == b->path_len && !memicmpW(a->canon_uri+a->path_start, b->canon_uri+b->path_start, a->path_len)) {
+ *ret = TRUE;
+ return S_OK;
+ }
+
+ len_a = canonicalize_path_hierarchical(a->canon_uri+a->path_start, a->path_len, a->scheme_type, FALSE, 0, NULL);
+ len_b = canonicalize_path_hierarchical(b->canon_uri+b->path_start, b->path_len, b->scheme_type, FALSE, 0, NULL);
+
+ canon_path_a = heap_alloc(len_a*sizeof(WCHAR));
+ if(!canon_path_a)
+ return E_OUTOFMEMORY;
+ canon_path_b = heap_alloc(len_b*sizeof(WCHAR));
+ if(!canon_path_b) {
+ heap_free(canon_path_a);
+ return E_OUTOFMEMORY;
+ }
+
+ len_a = canonicalize_path_hierarchical(a->canon_uri+a->path_start, a->path_len, a->scheme_type, FALSE, 0, canon_path_a);
+ len_b = canonicalize_path_hierarchical(b->canon_uri+b->path_start, b->path_len, b->scheme_type, FALSE, 0, canon_path_b);
+
+ *ret = len_a == len_b && !memicmpW(canon_path_a, canon_path_b, len_a);
+
+ heap_free(canon_path_a);
+ heap_free(canon_path_b);
+ return S_OK;
+ }
+
+ /* Checks if the two Uri's are logically equivalent. It's a simple
+ * comparison, since they are both of type Uri, and it can access
+ * the properties of each Uri directly without the need to go
+ * through the "IUri_Get*" interface calls.
+ */
+ static HRESULT compare_uris(const Uri *a, const Uri *b, BOOL *ret) {
+ const BOOL known_scheme = a->scheme_type != URL_SCHEME_UNKNOWN;
+ const BOOL are_hierarchical = a->authority_start > -1 && b->authority_start > -1;
+ HRESULT hres;
+
+ *ret = FALSE;
+
+ if(a->scheme_type != b->scheme_type)
+ return S_OK;
+
+ /* Only compare the scheme names (if any) if their unknown scheme types. */
+ if(!known_scheme) {
+ if((a->scheme_start > -1 && b->scheme_start > -1) &&
+ (a->scheme_len == b->scheme_len)) {
+ /* Make sure the schemes are the same. */
+ if(StrCmpNW(a->canon_uri+a->scheme_start, b->canon_uri+b->scheme_start, a->scheme_len))
+ return S_OK;
+ } else if(a->scheme_len != b->scheme_len)
+ /* One of the Uri's has a scheme name, while the other doesn't. */
+ return S_OK;
+ }
+
+ /* If they have a userinfo component, perform case sensitive compare. */
+ if((a->userinfo_start > -1 && b->userinfo_start > -1) &&
+ (a->userinfo_len == b->userinfo_len)) {
+ if(StrCmpNW(a->canon_uri+a->userinfo_start, b->canon_uri+b->userinfo_start, a->userinfo_len))
+ return S_OK;
+ } else if(a->userinfo_len != b->userinfo_len)
+ /* One of the Uri's had a userinfo, while the other one doesn't. */
+ return S_OK;
+
+ /* Check if they have a host name. */
+ if((a->host_start > -1 && b->host_start > -1) &&
+ (a->host_len == b->host_len)) {
+ /* Perform a case insensitive compare if they are a known scheme type. */
+ if(known_scheme) {
+ if(StrCmpNIW(a->canon_uri+a->host_start, b->canon_uri+b->host_start, a->host_len))
+ return S_OK;
+ } else if(StrCmpNW(a->canon_uri+a->host_start, b->canon_uri+b->host_start, a->host_len))
+ return S_OK;
+ } else if(a->host_len != b->host_len)
+ /* One of the Uri's had a host, while the other one didn't. */
+ return S_OK;
+
+ if(a->has_port && b->has_port) {
+ if(a->port != b->port)
+ return S_OK;
+ } else if(a->has_port || b->has_port)
+ /* One had a port, while the other one didn't. */
+ return S_OK;
+
+ /* Windows is weird with how it handles paths. For example
+ * One URI could be "http://google.com" (after canonicalization)
+ * and one could be "http://google.com/" and the IsEqual function
+ * would still evaluate to TRUE, but, only if they are both hierarchical
+ * URIs.
+ */
+ if(a->scheme_type == URL_SCHEME_FILE) {
+ BOOL cmp;
+
+ hres = compare_file_paths(a, b, &cmp);
+ if(FAILED(hres) || !cmp)
+ return hres;
+ } else if((a->path_start > -1 && b->path_start > -1) &&
+ (a->path_len == b->path_len)) {
+ if(StrCmpNW(a->canon_uri+a->path_start, b->canon_uri+b->path_start, a->path_len))
+ return S_OK;
+ } else if(are_hierarchical && a->path_len == -1 && b->path_len == 0) {
+ if(*(a->canon_uri+a->path_start) != '/')
+ return S_OK;
+ } else if(are_hierarchical && b->path_len == 1 && a->path_len == 0) {
+ if(*(b->canon_uri+b->path_start) != '/')
+ return S_OK;
+ } else if(a->path_len != b->path_len)
+ return S_OK;
+
+ /* Compare the query strings of the two URIs. */
+ if((a->query_start > -1 && b->query_start > -1) &&
+ (a->query_len == b->query_len)) {
+ if(StrCmpNW(a->canon_uri+a->query_start, b->canon_uri+b->query_start, a->query_len))
+ return S_OK;
+ } else if(a->query_len != b->query_len)
+ return S_OK;
+
+ if((a->fragment_start > -1 && b->fragment_start > -1) &&
+ (a->fragment_len == b->fragment_len)) {
+ if(StrCmpNW(a->canon_uri+a->fragment_start, b->canon_uri+b->fragment_start, a->fragment_len))
+ return S_OK;
+ } else if(a->fragment_len != b->fragment_len)
+ return S_OK;
+
+ /* If we get here, the two URIs are equivalent. */
+ *ret = TRUE;
+ return S_OK;
+ }
+
static void convert_to_dos_path(const WCHAR *path, DWORD path_len,
WCHAR *output, DWORD *output_len)
{
return CONTAINING_RECORD(iface, Uri, IUri_iface);
}
- static inline void destory_uri_obj(Uri *This)
+ static inline void destroy_uri_obj(Uri *This)
{
SysFreeString(This->raw_uri);
heap_free(This->canon_uri);
TRACE("(%p)->(IID_IUri %p)\n", This, ppv);
*ppv = &This->IUri_iface;
}else if(IsEqualGUID(&IID_IUriBuilderFactory, riid)) {
- TRACE("(%p)->(IID_IUriBuilderFactory %p)\n", This, riid);
+ TRACE("(%p)->(IID_IUriBuilderFactory %p)\n", This, ppv);
*ppv = &This->IUriBuilderFactory_iface;
+ }else if(IsEqualGUID(&IID_IPersistStream, riid)) {
+ TRACE("(%p)->(IID_IPersistStream %p)\n", This, ppv);
+ *ppv = &This->IPersistStream_iface;
+ }else if(IsEqualGUID(&IID_IMarshal, riid)) {
+ TRACE("(%p)->(IID_IMarshal %p)\n", This, ppv);
+ *ppv = &This->IMarshal_iface;
}else if(IsEqualGUID(&IID_IUriObj, riid)) {
TRACE("(%p)->(IID_IUriObj %p)\n", This, ppv);
*ppv = This;
TRACE("(%p) ref=%d\n", This, ref);
if(!ref)
- destory_uri_obj(This);
+ destroy_uri_obj(This);
return ref;
}
{
Uri *This = impl_from_IUri(iface);
HRESULT hres;
- TRACE("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags);
+ TRACE("(%p %s)->(%d %p %x)\n", This, debugstr_w(This->canon_uri), uriProp, pbstrProperty, dwFlags);
+ if(!This->create_flags)
+ return E_UNEXPECTED;
if(!pbstrProperty)
return E_POINTER;
{
Uri *This = impl_from_IUri(iface);
HRESULT hres;
- TRACE("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags);
+ TRACE("(%p %s)->(%d %p %x)\n", This, debugstr_w(This->canon_uri), uriProp, pcchProperty, dwFlags);
+ if(!This->create_flags)
+ return E_UNEXPECTED;
if(!pcchProperty)
return E_INVALIDARG;
Uri *This = impl_from_IUri(iface);
HRESULT hres;
- TRACE("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags);
+ TRACE("(%p %s)->(%d %p %x)\n", This, debugstr_w(This->canon_uri), uriProp, pcchProperty, dwFlags);
+ if(!This->create_flags)
+ return E_UNEXPECTED;
if(!pcchProperty)
return E_INVALIDARG;
static HRESULT WINAPI Uri_HasProperty(IUri *iface, Uri_PROPERTY uriProp, BOOL *pfHasProperty)
{
Uri *This = impl_from_IUri(iface);
- TRACE("(%p)->(%d %p)\n", This, uriProp, pfHasProperty);
+
+ TRACE("(%p %s)->(%d %p)\n", This, debugstr_w(This->canon_uri), uriProp, pfHasProperty);
if(!pfHasProperty)
return E_INVALIDARG;
static HRESULT WINAPI Uri_GetProperties(IUri *iface, DWORD *pdwProperties)
{
Uri *This = impl_from_IUri(iface);
- TRACE("(%p)->(%p)\n", This, pdwProperties);
+ TRACE("(%p %s)->(%p)\n", This, debugstr_w(This->canon_uri), pdwProperties);
+ if(!This->create_flags)
+ return E_UNEXPECTED;
if(!pdwProperties)
return E_INVALIDARG;
Uri *This = impl_from_IUri(iface);
Uri *other;
- TRACE("(%p)->(%p %p)\n", This, pUri, pfEqual);
+ TRACE("(%p %s)->(%p %p)\n", This, debugstr_w(This->canon_uri), pUri, pfEqual);
+ if(!This->create_flags)
+ return E_UNEXPECTED;
if(!pfEqual)
return E_POINTER;
}
/* Try to convert it to a Uri (allows for a more simple comparison). */
- if((other = get_uri_obj(pUri)))
- *pfEqual = are_equal_simple(This, other);
- else {
- /* Do it the hard way. */
+ if(!(other = get_uri_obj(pUri))) {
FIXME("(%p)->(%p %p) No support for unknown IUri's yet.\n", iface, pUri, pfEqual);
return E_NOTIMPL;
}
- return S_OK;
+ TRACE("comparing to %s\n", debugstr_w(other->canon_uri));
+ return compare_uris(This, other, pfEqual);
}
static const IUriVtbl UriVtbl = {
static HRESULT WINAPI UriBuilderFactory_QueryInterface(IUriBuilderFactory *iface, REFIID riid, void **ppv)
{
Uri *This = impl_from_IUriBuilderFactory(iface);
-
- if(IsEqualGUID(&IID_IUnknown, riid)) {
- TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
- *ppv = &This->IUriBuilderFactory_iface;
- }else if(IsEqualGUID(&IID_IUriBuilderFactory, riid)) {
- TRACE("(%p)->(IID_IUriBuilderFactory %p)\n", This, ppv);
- *ppv = &This->IUriBuilderFactory_iface;
- }else if(IsEqualGUID(&IID_IUri, riid)) {
- TRACE("(%p)->(IID_IUri %p)\n", This, ppv);
- *ppv = &This->IUri_iface;
- }else {
- TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
- *ppv = NULL;
- return E_NOINTERFACE;
- }
-
- IUnknown_AddRef((IUnknown*)*ppv);
- return S_OK;
+ return IUri_QueryInterface(&This->IUri_iface, riid, ppv);
}
static ULONG WINAPI UriBuilderFactory_AddRef(IUriBuilderFactory *iface)
{
Uri *This = impl_from_IUriBuilderFactory(iface);
- LONG ref = InterlockedIncrement(&This->ref);
-
- TRACE("(%p) ref=%d\n", This, ref);
-
- return ref;
+ return IUri_AddRef(&This->IUri_iface);
}
static ULONG WINAPI UriBuilderFactory_Release(IUriBuilderFactory *iface)
{
Uri *This = impl_from_IUriBuilderFactory(iface);
- LONG ref = InterlockedDecrement(&This->ref);
-
- TRACE("(%p) ref=%d\n", This, ref);
-
- if(!ref)
- destory_uri_obj(This);
-
- return ref;
+ return IUri_Release(&This->IUri_iface);
}
static HRESULT WINAPI UriBuilderFactory_CreateIUriBuilder(IUriBuilderFactory *iface,
UriBuilderFactory_CreateInitializedIUriBuilder
};
- static Uri* create_uri_obj(void) {
- Uri *ret = heap_alloc_zero(sizeof(Uri));
- if(ret) {
- ret->IUri_iface.lpVtbl = &UriVtbl;
- ret->IUriBuilderFactory_iface.lpVtbl = &UriBuilderFactoryVtbl;
- ret->ref = 1;
+ static inline Uri* impl_from_IPersistStream(IPersistStream *iface)
+ {
+ return CONTAINING_RECORD(iface, Uri, IPersistStream_iface);
+ }
+
+ static HRESULT WINAPI PersistStream_QueryInterface(IPersistStream *iface, REFIID riid, void **ppvObject)
+ {
+ Uri *This = impl_from_IPersistStream(iface);
+ return IUri_QueryInterface(&This->IUri_iface, riid, ppvObject);
+ }
+
+ static ULONG WINAPI PersistStream_AddRef(IPersistStream *iface)
+ {
+ Uri *This = impl_from_IPersistStream(iface);
+ return IUri_AddRef(&This->IUri_iface);
+ }
+
+ static ULONG WINAPI PersistStream_Release(IPersistStream *iface)
+ {
+ Uri *This = impl_from_IPersistStream(iface);
+ return IUri_Release(&This->IUri_iface);
+ }
+
+ static HRESULT WINAPI PersistStream_GetClassID(IPersistStream *iface, CLSID *pClassID)
+ {
+ Uri *This = impl_from_IPersistStream(iface);
+ TRACE("(%p)->(%p)\n", This, pClassID);
+
+ if(!pClassID)
+ return E_INVALIDARG;
+
+ *pClassID = CLSID_CUri;
+ return S_OK;
+ }
+
+ static HRESULT WINAPI PersistStream_IsDirty(IPersistStream *iface)
+ {
+ Uri *This = impl_from_IPersistStream(iface);
+ TRACE("(%p)\n", This);
+ return S_FALSE;
+ }
+
+ struct persist_uri {
+ DWORD size;
+ DWORD unk1[2];
+ DWORD create_flags;
+ DWORD unk2[3];
+ DWORD fields_no;
+ BYTE data[1];
+ };
+
+ static HRESULT WINAPI PersistStream_Load(IPersistStream *iface, IStream *pStm)
+ {
+ Uri *This = impl_from_IPersistStream(iface);
+ struct persist_uri *data;
+ parse_data parse;
+ DWORD size;
+ HRESULT hr;
+
+ TRACE("(%p)->(%p)\n", This, pStm);
+
+ if(This->create_flags)
+ return E_UNEXPECTED;
+ if(!pStm)
+ return E_INVALIDARG;
+
+ hr = IStream_Read(pStm, &size, sizeof(DWORD), NULL);
+ if(FAILED(hr))
+ return hr;
+ data = heap_alloc(size);
+ if(!data)
+ return E_OUTOFMEMORY;
+ hr = IStream_Read(pStm, data->unk1, size-sizeof(DWORD)-2, NULL);
+ if(FAILED(hr)) {
+ heap_free(data);
+ return hr;
}
- return ret;
+ if(size < sizeof(struct persist_uri)) {
+ heap_free(data);
+ return S_OK;
+ }
+
+ if(*(DWORD*)data->data != Uri_PROPERTY_RAW_URI) {
+ heap_free(data);
+ ERR("Can't find raw_uri\n");
+ return E_UNEXPECTED;
+ }
+
+ This->raw_uri = SysAllocString((WCHAR*)(data->data+sizeof(DWORD)*2));
+ if(!This->raw_uri) {
+ heap_free(data);
+ return E_OUTOFMEMORY;
+ }
+ This->create_flags = data->create_flags;
+ heap_free(data);
+ TRACE("%x %s\n", This->create_flags, debugstr_w(This->raw_uri));
+
+ memset(&parse, 0, sizeof(parse_data));
+ parse.uri = This->raw_uri;
+ if(!parse_uri(&parse, This->create_flags)) {
+ SysFreeString(This->raw_uri);
+ This->create_flags = 0;
+ return E_UNEXPECTED;
+ }
+
+ hr = canonicalize_uri(&parse, This, This->create_flags);
+ if(FAILED(hr)) {
+ SysFreeString(This->raw_uri);
+ This->create_flags = 0;
+ return hr;
+ }
+
+ return S_OK;
+ }
+
+ static inline BYTE* persist_stream_add_strprop(Uri *This, BYTE *p, DWORD type, DWORD len, WCHAR *data)
+ {
+ len *= sizeof(WCHAR);
+ *(DWORD*)p = type;
+ p += sizeof(DWORD);
+ *(DWORD*)p = len+sizeof(WCHAR);
+ p += sizeof(DWORD);
+ memcpy(p, data, len);
+ p += len;
+ *(WCHAR*)p = 0;
+ return p+sizeof(WCHAR);
+ }
+
+ static inline void persist_stream_save(Uri *This, IStream *pStm, BOOL marshal, struct persist_uri *data)
+ {
+ BYTE *p = NULL;
+
+ data->create_flags = This->create_flags;
+
+ if(This->create_flags) {
+ data->fields_no = 1;
+ p = persist_stream_add_strprop(This, data->data, Uri_PROPERTY_RAW_URI,
+ SysStringLen(This->raw_uri), This->raw_uri);
+ }
+ if(This->scheme_type!=URL_SCHEME_HTTP && This->scheme_type!=URL_SCHEME_HTTPS
+ && This->scheme_type!=URL_SCHEME_FTP)
+ return;
+
+ if(This->fragment_len) {
+ data->fields_no++;
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_FRAGMENT,
+ This->fragment_len, This->canon_uri+This->fragment_start);
+ }
+
+ if(This->host_len) {
+ data->fields_no++;
+ if(This->host_type == Uri_HOST_IPV6)
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_HOST,
+ This->host_len-2, This->canon_uri+This->host_start+1);
+ else
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_HOST,
+ This->host_len, This->canon_uri+This->host_start);
+ }
+
+ if(This->userinfo_split > -1) {
+ data->fields_no++;
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_PASSWORD,
+ This->userinfo_len-This->userinfo_split-1,
+ This->canon_uri+This->userinfo_start+This->userinfo_split+1);
+ }
+
+ if(This->path_len) {
+ data->fields_no++;
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_PATH,
+ This->path_len, This->canon_uri+This->path_start);
+ } else if(marshal) {
+ WCHAR no_path = '/';
+ data->fields_no++;
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_PATH, 1, &no_path);
+ }
+
+ if(This->has_port) {
+ data->fields_no++;
+ *(DWORD*)p = Uri_PROPERTY_PORT;
+ p += sizeof(DWORD);
+ *(DWORD*)p = sizeof(DWORD);
+ p += sizeof(DWORD);
+ *(DWORD*)p = This->port;
+ p += sizeof(DWORD);
+ }
+
+ if(This->query_len) {
+ data->fields_no++;
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_QUERY,
+ This->query_len, This->canon_uri+This->query_start);
+ }
+
+ if(This->scheme_len) {
+ data->fields_no++;
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_SCHEME_NAME,
+ This->scheme_len, This->canon_uri+This->scheme_start);
+ }
+
+ if(This->userinfo_start>-1 && This->userinfo_split!=0) {
+ data->fields_no++;
+ if(This->userinfo_split > -1)
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_USER_NAME,
+ This->userinfo_split, This->canon_uri+This->userinfo_start);
+ else
+ p = persist_stream_add_strprop(This, p, Uri_PROPERTY_USER_NAME,
+ This->userinfo_len, This->canon_uri+This->userinfo_start);
+ }
+ }
+
+ static HRESULT WINAPI PersistStream_Save(IPersistStream *iface, IStream *pStm, BOOL fClearDirty)
+ {
+ Uri *This = impl_from_IPersistStream(iface);
+ struct persist_uri *data;
+ ULARGE_INTEGER size;
+ HRESULT hres;
+
+ TRACE("(%p)->(%p %x)\n", This, pStm, fClearDirty);
+
+ if(!pStm)
+ return E_INVALIDARG;
+
+ hres = IPersistStream_GetSizeMax(&This->IPersistStream_iface, &size);
+ if(FAILED(hres))
+ return hres;
+
+ data = heap_alloc_zero(size.u.LowPart);
+ if(!data)
+ return E_OUTOFMEMORY;
+ data->size = size.u.LowPart;
+ persist_stream_save(This, pStm, FALSE, data);
+
+ hres = IStream_Write(pStm, data, data->size-2, NULL);
+ heap_free(data);
+ return hres;
+ }
+
+ static HRESULT WINAPI PersistStream_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *pcbSize)
+ {
+ Uri *This = impl_from_IPersistStream(iface);
+ TRACE("(%p)->(%p)\n", This, pcbSize);
+
+ if(!pcbSize)
+ return E_INVALIDARG;
+
+ pcbSize->u.LowPart = 2+sizeof(struct persist_uri);
+ pcbSize->u.HighPart = 0;
+ if(This->create_flags)
+ pcbSize->u.LowPart += (SysStringLen(This->raw_uri)+1)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ else /* there's no place for fields no */
+ pcbSize->u.LowPart -= sizeof(DWORD);
+ if(This->scheme_type!=URL_SCHEME_HTTP && This->scheme_type!=URL_SCHEME_HTTPS
+ && This->scheme_type!=URL_SCHEME_FTP)
+ return S_OK;
+
+ if(This->fragment_len)
+ pcbSize->u.LowPart += (This->fragment_len+1)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ if(This->host_len) {
+ if(This->host_type == Uri_HOST_IPV6)
+ pcbSize->u.LowPart += (This->host_len-1)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ else
+ pcbSize->u.LowPart += (This->host_len+1)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ }
+ if(This->userinfo_split > -1)
+ pcbSize->u.LowPart += (This->userinfo_len-This->userinfo_split)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ if(This->path_len)
+ pcbSize->u.LowPart += (This->path_len+1)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ if(This->has_port)
+ pcbSize->u.LowPart += 3*sizeof(DWORD);
+ if(This->query_len)
+ pcbSize->u.LowPart += (This->query_len+1)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ if(This->scheme_len)
+ pcbSize->u.LowPart += (This->scheme_len+1)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ if(This->userinfo_start>-1 && This->userinfo_split!=0) {
+ if(This->userinfo_split > -1)
+ pcbSize->u.LowPart += (This->userinfo_split+1)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ else
+ pcbSize->u.LowPart += (This->userinfo_len+1)*sizeof(WCHAR) + 2*sizeof(DWORD);
+ }
+ return S_OK;
+ }
+
+ static const IPersistStreamVtbl PersistStreamVtbl = {
+ PersistStream_QueryInterface,
+ PersistStream_AddRef,
+ PersistStream_Release,
+ PersistStream_GetClassID,
+ PersistStream_IsDirty,
+ PersistStream_Load,
+ PersistStream_Save,
+ PersistStream_GetSizeMax
+ };
+
+ static inline Uri* impl_from_IMarshal(IMarshal *iface)
+ {
+ return CONTAINING_RECORD(iface, Uri, IMarshal_iface);
+ }
+
+ static HRESULT WINAPI Marshal_QueryInterface(IMarshal *iface, REFIID riid, void **ppvObject)
+ {
+ Uri *This = impl_from_IMarshal(iface);
+ return IUri_QueryInterface(&This->IUri_iface, riid, ppvObject);
+ }
+
+ static ULONG WINAPI Marshal_AddRef(IMarshal *iface)
+ {
+ Uri *This = impl_from_IMarshal(iface);
+ return IUri_AddRef(&This->IUri_iface);
+ }
+
+ static ULONG WINAPI Marshal_Release(IMarshal *iface)
+ {
+ Uri *This = impl_from_IMarshal(iface);
+ return IUri_Release(&This->IUri_iface);
+ }
+
+ static HRESULT WINAPI Marshal_GetUnmarshalClass(IMarshal *iface, REFIID riid, void *pv,
+ DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid)
+ {
+ Uri *This = impl_from_IMarshal(iface);
+ TRACE("(%p)->(%s %p %x %p %x %p)\n", This, debugstr_guid(riid), pv,
+ dwDestContext, pvDestContext, mshlflags, pCid);
+
+ if(!pCid || (dwDestContext!=MSHCTX_LOCAL && dwDestContext!=MSHCTX_NOSHAREDMEM
+ && dwDestContext!=MSHCTX_INPROC))
+ return E_INVALIDARG;
+
+ *pCid = CLSID_CUri;
+ return S_OK;
+ }
+
+ struct inproc_marshal_uri {
+ DWORD size;
+ DWORD mshlflags;
+ DWORD unk[4]; /* process identifier? */
+ Uri *uri;
+ };
+
+ static HRESULT WINAPI Marshal_GetMarshalSizeMax(IMarshal *iface, REFIID riid, void *pv,
+ DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize)
+ {
+ Uri *This = impl_from_IMarshal(iface);
+ ULARGE_INTEGER size;
+ HRESULT hres;
+ TRACE("(%p)->(%s %p %x %p %x %p)\n", This, debugstr_guid(riid), pv,
+ dwDestContext, pvDestContext, mshlflags, pSize);
+
+ if(!pSize || (dwDestContext!=MSHCTX_LOCAL && dwDestContext!=MSHCTX_NOSHAREDMEM
+ && dwDestContext!=MSHCTX_INPROC))
+ return E_INVALIDARG;
+
+ if(dwDestContext == MSHCTX_INPROC) {
+ *pSize = sizeof(struct inproc_marshal_uri);
+ return S_OK;
+ }
+
+ hres = IPersistStream_GetSizeMax(&This->IPersistStream_iface, &size);
+ if(FAILED(hres))
+ return hres;
+ if(!This->path_len && (This->scheme_type==URL_SCHEME_HTTP
+ || This->scheme_type==URL_SCHEME_HTTPS
+ || This->scheme_type==URL_SCHEME_FTP))
+ size.u.LowPart += 3*sizeof(DWORD);
+ *pSize = size.u.LowPart+2*sizeof(DWORD);
+ return S_OK;
+ }
+
+ static HRESULT WINAPI Marshal_MarshalInterface(IMarshal *iface, IStream *pStm, REFIID riid,
+ void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags)
+ {
+ Uri *This = impl_from_IMarshal(iface);
+ DWORD *data;
+ DWORD size;
+ HRESULT hres;
+
+ TRACE("(%p)->(%p %s %p %x %p %x)\n", This, pStm, debugstr_guid(riid), pv,
+ dwDestContext, pvDestContext, mshlflags);
+
+ if(!pStm || mshlflags!=MSHLFLAGS_NORMAL || (dwDestContext!=MSHCTX_LOCAL
+ && dwDestContext!=MSHCTX_NOSHAREDMEM && dwDestContext!=MSHCTX_INPROC))
+ return E_INVALIDARG;
+
+ if(dwDestContext == MSHCTX_INPROC) {
+ struct inproc_marshal_uri data;
+
+ data.size = sizeof(data);
+ data.mshlflags = MSHCTX_INPROC;
+ data.unk[0] = 0;
+ data.unk[1] = 0;
+ data.unk[2] = 0;
+ data.unk[3] = 0;
+ data.uri = This;
+
+ hres = IStream_Write(pStm, &data, data.size, NULL);
+ if(FAILED(hres))
+ return hres;
+
+ IUri_AddRef(&This->IUri_iface);
+ return S_OK;
+ }
+
+ hres = IMarshal_GetMarshalSizeMax(iface, riid, pv, dwDestContext,
+ pvDestContext, mshlflags, &size);
+ if(FAILED(hres))
+ return hres;
+
+ data = heap_alloc_zero(size);
+ if(!data)
+ return E_OUTOFMEMORY;
+
+ data[0] = size;
+ data[1] = dwDestContext;
+ data[2] = size-2*sizeof(DWORD);
+ persist_stream_save(This, pStm, TRUE, (struct persist_uri*)(data+2));
+
+ hres = IStream_Write(pStm, data, data[0]-2, NULL);
+ heap_free(data);
+ return hres;
+ }
+
+ static HRESULT WINAPI Marshal_UnmarshalInterface(IMarshal *iface,
+ IStream *pStm, REFIID riid, void **ppv)
+ {
+ Uri *This = impl_from_IMarshal(iface);
+ DWORD header[2];
+ HRESULT hres;
+
+ TRACE("(%p)->(%p %s %p)\n", This, pStm, debugstr_guid(riid), ppv);
+
+ if(This->create_flags)
+ return E_UNEXPECTED;
+ if(!pStm || !riid || !ppv)
+ return E_INVALIDARG;
+
+ hres = IStream_Read(pStm, header, sizeof(header), NULL);
+ if(FAILED(hres))
+ return hres;
+
+ if(header[1]!=MSHCTX_LOCAL && header[1]!=MSHCTX_NOSHAREDMEM
+ && header[1]!=MSHCTX_INPROC)
+ return E_UNEXPECTED;
+
+ if(header[1] == MSHCTX_INPROC) {
+ struct inproc_marshal_uri data;
+ parse_data parse;
+
+ hres = IStream_Read(pStm, data.unk, sizeof(data)-2*sizeof(DWORD), NULL);
+ if(FAILED(hres))
+ return hres;
+
+ This->raw_uri = SysAllocString(data.uri->raw_uri);
+ if(!This->raw_uri) {
+ return E_OUTOFMEMORY;
+ }
+
+ memset(&parse, 0, sizeof(parse_data));
+ parse.uri = This->raw_uri;
+
+ if(!parse_uri(&parse, data.uri->create_flags))
+ return E_INVALIDARG;
+
+ hres = canonicalize_uri(&parse, This, data.uri->create_flags);
+ if(FAILED(hres))
+ return hres;
+
+ This->create_flags = data.uri->create_flags;
+ IUri_Release(&data.uri->IUri_iface);
+
+ return IUri_QueryInterface(&This->IUri_iface, riid, ppv);
+ }
+
+ hres = IPersistStream_Load(&This->IPersistStream_iface, pStm);
+ if(FAILED(hres))
+ return hres;
+
+ return IUri_QueryInterface(&This->IUri_iface, riid, ppv);
+ }
+
+ static HRESULT WINAPI Marshal_ReleaseMarshalData(IMarshal *iface, IStream *pStm)
+ {
+ Uri *This = impl_from_IMarshal(iface);
+ LARGE_INTEGER off;
+ DWORD header[2];
+ HRESULT hres;
+
+ TRACE("(%p)->(%p)\n", This, pStm);
+
+ if(!pStm)
+ return E_INVALIDARG;
+
+ hres = IStream_Read(pStm, header, 2*sizeof(DWORD), NULL);
+ if(FAILED(hres))
+ return hres;
+
+ if(header[1] == MSHCTX_INPROC) {
+ struct inproc_marshal_uri data;
+
+ hres = IStream_Read(pStm, data.unk, sizeof(data)-2*sizeof(DWORD), NULL);
+ if(FAILED(hres))
+ return hres;
+
+ IUri_Release(&data.uri->IUri_iface);
+ return S_OK;
+ }
+
+ off.u.LowPart = header[0]-sizeof(header)-2;
+ off.u.HighPart = 0;
+ return IStream_Seek(pStm, off, STREAM_SEEK_CUR, NULL);
+ }
+
+ static HRESULT WINAPI Marshal_DisconnectObject(IMarshal *iface, DWORD dwReserved)
+ {
+ Uri *This = impl_from_IMarshal(iface);
+ TRACE("(%p)->(%x)\n", This, dwReserved);
+ return S_OK;
+ }
+
+ static const IMarshalVtbl MarshalVtbl = {
+ Marshal_QueryInterface,
+ Marshal_AddRef,
+ Marshal_Release,
+ Marshal_GetUnmarshalClass,
+ Marshal_GetMarshalSizeMax,
+ Marshal_MarshalInterface,
+ Marshal_UnmarshalInterface,
+ Marshal_ReleaseMarshalData,
+ Marshal_DisconnectObject
+ };
+
+ HRESULT Uri_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
+ {
+ Uri *ret = heap_alloc_zero(sizeof(Uri));
+
+ TRACE("(%p %p)\n", pUnkOuter, ppobj);
+
+ *ppobj = ret;
+ if(!ret)
+ return E_OUTOFMEMORY;
+
+ ret->IUri_iface.lpVtbl = &UriVtbl;
+ ret->IUriBuilderFactory_iface.lpVtbl = &UriBuilderFactoryVtbl;
+ ret->IPersistStream_iface.lpVtbl = &PersistStreamVtbl;
+ ret->IMarshal_iface.lpVtbl = &MarshalVtbl;
+ ret->ref = 1;
+
+ *ppobj = &ret->IUri_iface;
+ return S_OK;
}
/***********************************************************************
*
* RETURNS
* Success: Returns S_OK. ppURI contains the pointer to the newly allocated IUri.
- * Failure: E_INVALIDARG if there's invalid flag combinations in dwFlags, or an
- * invalid parameters, or pwzURI doesn't represnt a valid URI.
+ * Failure: E_INVALIDARG if there are invalid flag combinations in dwFlags, or an
+ * invalid parameter, or pwzURI doesn't represent a valid URI.
* E_OUTOFMEMORY if any memory allocation fails.
*
* NOTES
if(!ppURI)
return E_INVALIDARG;
- if(!pwzURI || !*pwzURI) {
+ if(!pwzURI) {
*ppURI = NULL;
return E_INVALIDARG;
}
if(dwFlags & ~supported_flags)
FIXME("Ignoring unsupported flag(s) %x\n", dwFlags & ~supported_flags);
- ret = create_uri_obj();
- if(!ret) {
+ hr = Uri_Construct(NULL, (void**)&ret);
+ if(FAILED(hr)) {
*ppURI = NULL;
- return E_OUTOFMEMORY;
+ return hr;
}
/* Explicitly set the default flags if it doesn't cause a flag conflict. */
memset(&data, 0, sizeof(parse_data));
data.uri = ret->raw_uri;
- /* Validate and parse the URI into it's components. */
+ /* Validate and parse the URI into its components. */
if(!parse_uri(&data, dwFlags)) {
/* Encountered an unsupported or invalid URI */
IUri_Release(&ret->IUri_iface);
*
* PARAMS
* pwzURI [I] The URI to parse and perform canonicalization on.
- * pwzFragment [I] The explict fragment string which should be added to pwzURI.
+ * pwzFragment [I] The explicit fragment string which should be added to pwzURI.
* dwFlags [I] The flags which will be passed to CreateUri.
* dwReserved [I] Reserved (not used).
* ppURI [O] The resulting IUri after parsing/canonicalization.
* Success: S_OK. ppURI contains the pointer to the newly allocated IUri.
* Failure: E_INVALIDARG if pwzURI already contains a fragment and pwzFragment
* isn't NULL. Will also return E_INVALIDARG for the same reasons as
- * CreateUri will. E_OUTOFMEMORY if any allocations fail.
+ * CreateUri will. E_OUTOFMEMORY if any allocation fails.
*/
HRESULT WINAPI CreateUriWithFragment(LPCWSTR pwzURI, LPCWSTR pwzFragment, DWORD dwFlags,
DWORD_PTR dwReserved, IUri **ppURI)
return hr;
}
- ret = create_uri_obj();
- if(!ret) {
+ hr = Uri_Construct(NULL, (void**)&ret);
+ if(FAILED(hr)) {
*uri = NULL;
- return E_OUTOFMEMORY;
+ return hr;
}
hr = generate_uri(builder, &data, ret, create_flags);
Uri *uri;
if((uri = get_uri_obj(pIUri))) {
+ if(!uri->create_flags) {
+ heap_free(ret);
+ return E_UNEXPECTED;
+ }
IUri_AddRef(pIUri);
ret->uri = uri;
WCHAR *ptr;
if(base_len) {
- /* Find the characters the will be copied over from
- * the base path.
- */
- end = memrchrW(base, '/', base_len);
- if(!end && data->scheme_type == URL_SCHEME_FILE)
- /* Try looking for a '\\'. */
- end = memrchrW(base, '\\', base_len);
+ if(data->scheme_type == URL_SCHEME_MK && *relative == '/') {
+ /* Find '::' segment */
+ for(end = base; end < base+base_len-1; end++) {
+ if(end[0] == ':' && end[1] == ':') {
+ end++;
+ break;
+ }
+ }
+
+ /* If not found, try finding the end of @xxx: */
+ if(end == base+base_len-1)
+ end = *base == '@' ? memchr(base, ':', base_len) : NULL;
+ }else {
+ /* Find the characters that will be copied over from the base path. */
+ end = memrchrW(base, '/', base_len);
+ if(!end && data->scheme_type == URL_SCHEME_FILE)
+ /* Try looking for a '\\'. */
+ end = memrchrW(base, '\\', base_len);
+ }
}
if(end) {
*ptr = '\0';
*result_len = (ptr-*result);
+ TRACE("ret %s\n", debugstr_wn(*result, *result_len));
return S_OK;
}
Uri *ret;
HRESULT hr;
parse_data data;
+ Uri *proc_uri = base;
DWORD create_flags = 0, len = 0;
memset(&data, 0, sizeof(parse_data));
parse_uri(&data, 0);
- ret = create_uri_obj();
- if(!ret) {
+ hr = Uri_Construct(NULL, (void**)&ret);
+ if(FAILED(hr)) {
*result = NULL;
- return E_OUTOFMEMORY;
+ return hr;
}
if(extras & COMBINE_URI_FORCE_FLAG_USE) {
create_flags |= Uri_CREATE_ALLOW_RELATIVE;
}
- if(base->authority_start > -1) {
- if(base->userinfo_start > -1 && base->userinfo_split != 0) {
- data.username = base->canon_uri+base->userinfo_start;
- data.username_len = (base->userinfo_split > -1) ? base->userinfo_split : base->userinfo_len;
+ if(relative->authority_start > -1)
+ proc_uri = relative;
+
+ if(proc_uri->authority_start > -1) {
+ if(proc_uri->userinfo_start > -1 && proc_uri->userinfo_split != 0) {
+ data.username = proc_uri->canon_uri+proc_uri->userinfo_start;
+ data.username_len = (proc_uri->userinfo_split > -1) ? proc_uri->userinfo_split : proc_uri->userinfo_len;
}
- if(base->userinfo_split > -1) {
- data.password = base->canon_uri+base->userinfo_start+base->userinfo_split+1;
- data.password_len = base->userinfo_len-base->userinfo_split-1;
+ if(proc_uri->userinfo_split > -1) {
+ data.password = proc_uri->canon_uri+proc_uri->userinfo_start+proc_uri->userinfo_split+1;
+ data.password_len = proc_uri->userinfo_len-proc_uri->userinfo_split-1;
}
- if(base->host_start > -1) {
- data.host = base->canon_uri+base->host_start;
- data.host_len = base->host_len;
- data.host_type = base->host_type;
+ if(proc_uri->host_start > -1) {
+ data.host = proc_uri->canon_uri+proc_uri->host_start;
+ data.host_len = proc_uri->host_len;
+ data.host_type = proc_uri->host_type;
}
- if(base->has_port) {
+ if(proc_uri->has_port) {
data.has_port = TRUE;
- data.port_value = base->port;
+ data.port_value = proc_uri->port;
}
} else if(base->scheme_type != URL_SCHEME_FILE)
data.is_opaque = TRUE;
- if(relative->path_start == -1 || !relative->path_len) {
- if(base->path_start > -1) {
- data.path = base->canon_uri+base->path_start;
- data.path_len = base->path_len;
- } else if((base->path_start == -1 || !base->path_len) && !data.is_opaque) {
+ if(proc_uri == relative || relative->path_start == -1 || !relative->path_len) {
+ if(proc_uri->path_start > -1) {
+ data.path = proc_uri->canon_uri+proc_uri->path_start;
+ data.path_len = proc_uri->path_len;
+ } else if(!data.is_opaque) {
/* Just set the path as a '/' if the base didn't have
* one and if it's an hierarchical URI.
*/
data.path_len = 1;
}
- if(relative->query_start > -1) {
- data.query = relative->canon_uri+relative->query_start;
- data.query_len = relative->query_len;
- } else if(base->query_start > -1) {
- data.query = base->canon_uri+base->query_start;
- data.query_len = base->query_len;
+ if(relative->query_start > -1)
+ proc_uri = relative;
+
+ if(proc_uri->query_start > -1) {
+ data.query = proc_uri->canon_uri+proc_uri->query_start;
+ data.query_len = proc_uri->query_len;
}
} else {
const WCHAR *ptr, **pptr;
* relative path doesn't begin with a '/' then the base path and relative
* path are merged together.
*/
- if(relative->path_len && *(relative->canon_uri+relative->path_start) == '/') {
+ if(relative->path_len && *(relative->canon_uri+relative->path_start) == '/' && data.scheme_type != URL_SCHEME_MK) {
WCHAR *tmp = NULL;
BOOL copy_drive_path = FALSE;
generate_raw_uri(&data, data.uri, raw_flags);
- ret = create_uri_obj();
- if(!ret) {
+ hr = Uri_Construct(NULL, (void**)&ret);
+ if(FAILED(hr)) {
SysFreeString(data.uri);
heap_free(path);
*result = NULL;
- return E_OUTOFMEMORY;
+ return hr;
}
if(flags & URL_DONT_SIMPLIFY)
buffer[len++] = 0;
- /* The null terminator isn't included the length. */
+ /* The null terminator isn't included in the length. */
*result_len = len-1;
if(len > output_len)
return STRSAFE_E_INSUFFICIENT_BUFFER;
--- /dev/null
+ /*
+ * Copyright 2005 Jacek Caban
+ *
+ * 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
+ */
+
+ #include <windef.h>
+ #include <winuser.h>
+ #include <commctrl.h>
+
+ #include "resource.h"
+
+ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
+
+ ID_AXINSTALL_WARNING_DLG DIALOG 0, 0, 260, 115
+ STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+ CAPTION "Security Warning"
+ FONT 8, "MS Shell Dlg"
+ {
+ CONTROL "Do you want to install this software?",
+ 100, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 10, 10, 240, 23
+ CONTROL "Location:", 101, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 10, 26, 40, 13
+ CONTROL "", ID_AXINSTALL_LOCATION, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 50, 26, 200, 13
+ DEFPUSHBUTTON "Don't install", IDCANCEL, 200, 48, 50, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "", ID_AXINSTALL_INSTALL_BTN, 144, 48, 50, 14, WS_GROUP | WS_TABSTOP | WS_DISABLED
+ CONTROL "", 102, "static", SS_ETCHEDHORZ, 10, 70, 240, 1
+ ICON "", ID_AXINSTALL_ICON, 10, 82, 32, 32, WS_CHILD | WS_VISIBLE
+ CONTROL "When installed, an ActiveX component has full access to your computer. Do not click install unless you have absolute trust in the above source.",
+ 22002, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 46, 80, 194, 23
+ }
+
+ STRINGTABLE
+ {
+ IDS_AXINSTALL_FAILURE "Installation of component failed: %08x"
+ IDS_AXINSTALL_INSTALLN "Install (%d)"
+ IDS_AXINSTALL_INSTALL "Install"
+ }
+
+ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+ /* @makedep: urlmon.rgs */
+ 1 WINE_REGISTRY urlmon.rgs
+
+ 2 WINE_REGISTRY urlmon_urlmon.rgs
+
+ /* @makedep: urlmon.inf */
+ REGINST REGINST urlmon.inf
+
+ #define WINE_FILENAME_STR "urlmon.dll"
+ #define WINE_FILEVERSION 6,0,2800,1485
+ #define WINE_FILEVERSION_STR "6.0.2800.1485"
+ #define WINE_PRODUCTVERSION 6,0,2800,1485
+ #define WINE_PRODUCTVERSION_STR "6.0.2800.1485"
+
+ #include "wine/wine_common_ver.rc"
@ stdcall BindAsyncMoniker(ptr long ptr ptr ptr)
@ stdcall CoGetClassObjectFromURL(ptr wstr long long wstr ptr long ptr ptr ptr)
@ stub CoInstall
- @ stdcall CoInternetCombineUrl(wstr wstr long wstr long ptr long)
+ @ stdcall CoInternetCombineUrl(wstr wstr long ptr long ptr long)
@ stdcall CoInternetCombineUrlEx(ptr wstr long ptr long)
@ stdcall CoInternetCompareUrl(wstr wstr long)
@ stdcall CoInternetCombineIUri(ptr ptr long ptr long)
@ stdcall CoInternetGetSecurityUrlEx(ptr ptr long long)
@ stdcall CoInternetGetSession(long ptr long)
@ stdcall CoInternetIsFeatureEnabled(long long)
+ @ stdcall CoInternetIsFeatureEnabledForUrl(long long wstr ptr)
+ @ stdcall CoInternetIsFeatureZoneElevationEnabled(wstr wstr ptr long)
@ stdcall CoInternetParseUrl(wstr long long wstr long ptr long)
@ stdcall CoInternetParseIUri(ptr long long wstr long ptr long)
@ stdcall CoInternetQueryInfo(ptr long long ptr long ptr long)
@ stdcall CoInternetSetFeatureEnabled(long long long)
- @ stub CompareSecurityIds
- @ stub CopyBindInfo
+ @ stdcall CompareSecurityIds(ptr long ptr long long)
+ @ stdcall CopyBindInfo(ptr ptr)
@ stdcall CopyStgMedium(ptr ptr)
@ stdcall CreateAsyncBindCtx(long ptr ptr ptr)
@ stdcall CreateAsyncBindCtxEx(ptr long ptr ptr ptr long)
@ stdcall CreateUriWithFragment(wstr wstr long long ptr)
@ stdcall CreateURLMoniker(ptr wstr ptr)
@ stdcall CreateURLMonikerEx(ptr wstr ptr long)
+ @ stdcall CreateURLMonikerEx2(ptr ptr ptr long)
@ stdcall -private DllCanUnloadNow()
@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stdcall -private DllInstall(long wstr)
@ stdcall RegisterBindStatusCallback(ptr ptr ptr long)
@ stdcall RegisterFormatEnumerator(ptr ptr long)
@ stub RegisterMediaTypeClass
- @ stub RegisterMediaTypes
+ @ stdcall RegisterMediaTypes(long ptr ptr)
@ stdcall ReleaseBindInfo(ptr)
@ stdcall RevokeBindStatusCallback(ptr ptr)
@ stdcall RevokeFormatEnumerator(ptr ptr)
@ stub WriteHitLogging
@ stub ZonesReInit
- 410 stdcall @(long long) URLMON_410
- 423 stdcall @(long long long long) URLMON_423
+ 111 stdcall @(wstr) IsProtectedModeURL
+ 328 stdcall @(ptr ptr) propsys.VariantCompare
+ 329 stdcall @(ptr ptr) propsys.VariantToGUID
+ 331 stdcall @(ptr long ptr) propsys.InitPropVariantFromBuffer
+ 335 stdcall @(ptr long ptr) propsys.InitVariantFromBuffer
+ 350 stdcall @(ptr ptr) propsys.PropVariantToGUID
+ 362 stdcall @(ptr ptr) propsys.InitVariantFromGUIDAsString
+ 363 stdcall @(long long ptr) propsys.InitVariantFromResource
+ 387 stdcall @(ptr long) propsys.VariantToUInt32WithDefault
+ 410 stdcall @(long long) LogSqmBits
+ 423 stdcall @(long long long long) LogSqmUXCommandOffsetInternal
+ 444 stdcall @(long long long) MapUriToBrowserEmulationState
+ 445 stdcall @(long long) MapBrowserEmulationModeToUserAgent
+ 455 stdcall @() FlushUrlmonZonesCache
#define NO_SHLWAPI_REG
//#include "shlwapi.h"
#include <advpub.h>
+ #include <initguid.h>
#include <wine/debug.h>
- //#include "urlmon.h"
+ #include "urlmon.h"
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
+ DEFINE_GUID(CLSID_CUri, 0xDF2FCE13, 0x25EC, 0x45BB, 0x9D,0x4C, 0xCE,0xCD,0x47,0xC2,0x43,0x0C);
+
LONG URLMON_refCount = 0;
+ HINSTANCE urlmon_instance;
static HMODULE hCabinet = NULL;
static DWORD urlmon_tls = TLS_OUT_OF_INDEXES;
- static void init_session(BOOL);
+ static void init_session(void);
static struct list tls_list = LIST_INIT(tls_list);
if (hCabinet)
FreeLibrary(hCabinet);
- init_session(FALSE);
free_session();
free_tls_list();
}
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
- init_session(TRUE);
+ urlmon_instance = hinstDLL;
+ init_session();
break;
case DLL_PROCESS_DETACH:
process_detach();
+ DeleteCriticalSection(&tls_cs);
break;
case DLL_THREAD_DETACH:
return TRUE;
}
+ const char *debugstr_bindstatus(ULONG status)
+ {
+ switch(status) {
+ #define X(x) case x: return #x
+ X(BINDSTATUS_FINDINGRESOURCE);
+ X(BINDSTATUS_CONNECTING);
+ X(BINDSTATUS_REDIRECTING);
+ X(BINDSTATUS_BEGINDOWNLOADDATA);
+ X(BINDSTATUS_DOWNLOADINGDATA);
+ X(BINDSTATUS_ENDDOWNLOADDATA);
+ X(BINDSTATUS_BEGINDOWNLOADCOMPONENTS);
+ X(BINDSTATUS_INSTALLINGCOMPONENTS);
+ X(BINDSTATUS_ENDDOWNLOADCOMPONENTS);
+ X(BINDSTATUS_USINGCACHEDCOPY);
+ X(BINDSTATUS_SENDINGREQUEST);
+ X(BINDSTATUS_CLASSIDAVAILABLE);
+ X(BINDSTATUS_MIMETYPEAVAILABLE);
+ X(BINDSTATUS_CACHEFILENAMEAVAILABLE);
+ X(BINDSTATUS_BEGINSYNCOPERATION);
+ X(BINDSTATUS_ENDSYNCOPERATION);
+ X(BINDSTATUS_BEGINUPLOADDATA);
+ X(BINDSTATUS_UPLOADINGDATA);
+ X(BINDSTATUS_ENDUPLOADINGDATA);
+ X(BINDSTATUS_PROTOCOLCLASSID);
+ X(BINDSTATUS_ENCODING);
+ X(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE);
+ X(BINDSTATUS_CLASSINSTALLLOCATION);
+ X(BINDSTATUS_DECODING);
+ X(BINDSTATUS_LOADINGMIMEHANDLER);
+ X(BINDSTATUS_CONTENTDISPOSITIONATTACH);
+ X(BINDSTATUS_FILTERREPORTMIMETYPE);
+ X(BINDSTATUS_CLSIDCANINSTANTIATE);
+ X(BINDSTATUS_IUNKNOWNAVAILABLE);
+ X(BINDSTATUS_DIRECTBIND);
+ X(BINDSTATUS_RAWMIMETYPE);
+ X(BINDSTATUS_PROXYDETECTING);
+ X(BINDSTATUS_ACCEPTRANGES);
+ X(BINDSTATUS_COOKIE_SENT);
+ X(BINDSTATUS_COMPACT_POLICY_RECEIVED);
+ X(BINDSTATUS_COOKIE_SUPPRESSED);
+ X(BINDSTATUS_COOKIE_STATE_UNKNOWN);
+ X(BINDSTATUS_COOKIE_STATE_ACCEPT);
+ X(BINDSTATUS_COOKIE_STATE_REJECT);
+ X(BINDSTATUS_COOKIE_STATE_PROMPT);
+ X(BINDSTATUS_COOKIE_STATE_LEASH);
+ X(BINDSTATUS_COOKIE_STATE_DOWNGRADE);
+ X(BINDSTATUS_POLICY_HREF);
+ X(BINDSTATUS_P3P_HEADER);
+ X(BINDSTATUS_SESSION_COOKIE_RECEIVED);
+ X(BINDSTATUS_PERSISTENT_COOKIE_RECEIVED);
+ X(BINDSTATUS_SESSION_COOKIES_ALLOWED);
+ X(BINDSTATUS_CACHECONTROL);
+ X(BINDSTATUS_CONTENTDISPOSITIONFILENAME);
+ X(BINDSTATUS_MIMETEXTPLAINMISMATCH);
+ X(BINDSTATUS_PUBLISHERAVAILABLE);
+ X(BINDSTATUS_DISPLAYNAMEAVAILABLE);
+ #undef X
+ default:
+ return wine_dbg_sprintf("(invalid status %u)", status);
+ }
+ }
/***********************************************************************
* DllInstall (URLMON.@)
{ { &ClassFactoryVtbl }, StdURLMoniker_Construct};
static ClassFactory MimeFilterCF =
{ { &ClassFactoryVtbl }, MimeFilter_Construct};
+ static ClassFactory CUriCF =
+ { { &ClassFactoryVtbl }, Uri_Construct};
struct object_creation_info
{
{ &CLSID_InternetSecurityManager, &SecurityManagerCF.IClassFactory_iface, NULL },
{ &CLSID_InternetZoneManager, &ZoneManagerCF.IClassFactory_iface, NULL },
{ &CLSID_StdURLMoniker, &StdURLMonikerCF.IClassFactory_iface, NULL },
- { &CLSID_DeCompMimeFilter, &MimeFilterCF.IClassFactory_iface, NULL }
+ { &CLSID_DeCompMimeFilter, &MimeFilterCF.IClassFactory_iface, NULL },
+ { &CLSID_CUri, &CUriCF.IClassFactory_iface, NULL }
};
- static void init_session(BOOL init)
+ static void init_session(void)
{
unsigned int i;
for(i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++) {
-
if(object_creation[i].protocol)
- register_urlmon_namespace(object_creation[i].cf, object_creation[i].clsid,
- object_creation[i].protocol, init);
+ register_namespace(object_creation[i].cf, object_creation[i].clsid,
+ object_creation[i].protocol, TRUE);
}
}
if(src->u.lpszFileName && !src->pUnkForRelease) {
DWORD size = (strlenW(src->u.lpszFileName)+1)*sizeof(WCHAR);
dst->u.lpszFileName = CoTaskMemAlloc(size);
+ if(!dst->u.lpszFileName)
+ return E_OUTOFMEMORY;
memcpy(dst->u.lpszFileName, src->u.lpszFileName, size);
}
break;
if(dst->u.pstg)
IStorage_AddRef(dst->u.pstg);
break;
+ case TYMED_HGLOBAL:
+ if(dst->u.hGlobal) {
+ SIZE_T size = GlobalSize(src->u.hGlobal);
+ char *src_ptr, *dst_ptr;
+
+ dst->u.hGlobal = GlobalAlloc(GMEM_FIXED, size);
+ if(!dst->u.hGlobal)
+ return E_OUTOFMEMORY;
+ dst_ptr = GlobalLock(dst->u.hGlobal);
+ src_ptr = GlobalLock(src->u.hGlobal);
+ memcpy(dst_ptr, src_ptr, size);
+ GlobalUnlock(src_ptr);
+ GlobalUnlock(dst_ptr);
+ }
+ break;
default:
FIXME("Unimplemented tymed %d\n", src->tymed);
}
return S_OK;
}
+ /***********************************************************************
+ * CopyBindInfo (URLMON.@)
+ */
+ HRESULT WINAPI CopyBindInfo(const BINDINFO *pcbiSrc, BINDINFO *pcbiDest)
+ {
+ DWORD size;
+ HRESULT hres;
+
+ TRACE("(%p %p)\n", pcbiSrc, pcbiDest);
+
+ if(!pcbiSrc || !pcbiDest)
+ return E_POINTER;
+ if(!pcbiSrc->cbSize || !pcbiDest->cbSize)
+ return E_INVALIDARG;
+
+ size = pcbiDest->cbSize;
+ if(size > pcbiSrc->cbSize) {
+ memcpy(pcbiDest, pcbiSrc, pcbiSrc->cbSize);
+ memset((char*)pcbiDest+pcbiSrc->cbSize, 0, size-pcbiSrc->cbSize);
+ } else {
+ memcpy(pcbiDest, pcbiSrc, size);
+ }
+ pcbiDest->cbSize = size;
+
+ size = FIELD_OFFSET(BINDINFO, szExtraInfo)+sizeof(void*);
+ if(pcbiSrc->cbSize>=size && pcbiDest->cbSize>=size && pcbiSrc->szExtraInfo) {
+ size = (strlenW(pcbiSrc->szExtraInfo)+1)*sizeof(WCHAR);
+ pcbiDest->szExtraInfo = CoTaskMemAlloc(size);
+ if(!pcbiDest->szExtraInfo)
+ return E_OUTOFMEMORY;
+ memcpy(pcbiDest->szExtraInfo, pcbiSrc->szExtraInfo, size);
+ }
+
+ size = FIELD_OFFSET(BINDINFO, stgmedData)+sizeof(STGMEDIUM);
+ if(pcbiSrc->cbSize>=size && pcbiDest->cbSize>=size) {
+ hres = CopyStgMedium(&pcbiSrc->stgmedData, &pcbiDest->stgmedData);
+ if(FAILED(hres)) {
+ CoTaskMemFree(pcbiDest->szExtraInfo);
+ return hres;
+ }
+ }
+
+ size = FIELD_OFFSET(BINDINFO, szCustomVerb)+sizeof(void*);
+ if(pcbiSrc->cbSize>=size && pcbiDest->cbSize>=size && pcbiSrc->szCustomVerb) {
+ size = (strlenW(pcbiSrc->szCustomVerb)+1)*sizeof(WCHAR);
+ pcbiDest->szCustomVerb = CoTaskMemAlloc(size);
+ if(!pcbiDest->szCustomVerb) {
+ CoTaskMemFree(pcbiDest->szExtraInfo);
+ ReleaseStgMedium(&pcbiDest->stgmedData);
+ return E_OUTOFMEMORY;
+ }
+ memcpy(pcbiDest->szCustomVerb, pcbiSrc->szCustomVerb, size);
+ }
+
+ size = FIELD_OFFSET(BINDINFO, securityAttributes)+sizeof(SECURITY_ATTRIBUTES);
+ if(pcbiDest->cbSize >= size)
+ memset(&pcbiDest->securityAttributes, 0, sizeof(SECURITY_ATTRIBUTES));
+
+ if(pcbiSrc->pUnk)
+ IUnknown_AddRef(pcbiDest->pUnk);
+
+ return S_OK;
+ }
+
static BOOL text_richtext_filter(const BYTE *b, DWORD size)
{
return size > 5 && !memcmp(b, "{\\rtf", 5);
static BOOL text_html_filter(const BYTE *b, DWORD size)
{
- DWORD i;
+ if(size < 6)
+ return FALSE;
- if(size < 5)
+ if((b[0] == '<'
+ && (b[1] == 'h' || b[1] == 'H')
+ && (b[2] == 't' || b[2] == 'T')
+ && (b[3] == 'm' || b[3] == 'M')
+ && (b[4] == 'l' || b[4] == 'L'))
+ || (b[0] == '<'
+ && (b[1] == 'h' || b[1] == 'H')
+ && (b[2] == 'e' || b[2] == 'E')
+ && (b[3] == 'a' || b[3] == 'A')
+ && (b[4] == 'd' || b[4] == 'D'))) return TRUE;
+
+ return FALSE;
+ }
+
+ static BOOL text_xml_filter(const BYTE *b, DWORD size)
+ {
+ if(size < 7)
return FALSE;
- for(i=0; i < size-5; i++) {
- if(b[i] == '<'
- && (b[i+1] == 'h' || b[i+1] == 'H')
- && (b[i+2] == 't' || b[i+2] == 'T')
- && (b[i+3] == 'm' || b[i+3] == 'M')
- && (b[i+4] == 'l' || b[i+4] == 'L'))
- return TRUE;
- }
+ if(b[0] == '<' && b[1] == '?'
+ && (b[2] == 'x' || b[2] == 'X')
+ && (b[3] == 'm' || b[3] == 'M')
+ && (b[4] == 'l' || b[4] == 'L')
+ && b[5] == ' ') return TRUE;
return FALSE;
}
static BOOL image_tiff_filter(const BYTE *b, DWORD size)
{
- return size > 2 && b[0] == 0x4d && b[1] == 0x4d;
+ static const BYTE magic1[] = {0x4d,0x4d,0x00,0x2a};
+ static const BYTE magic2[] = {0x49,0x49,0x2a,0xff};
+
+ return size >= 4 && (!memcmp(b, magic1, 4) || !memcmp(b, magic2, 4));
}
static BOOL image_xpng_filter(const BYTE *b, DWORD size)
return size > 2 && b[0] == 'M' && b[1] == 'Z';
}
+ static inline BOOL is_text_plain_char(BYTE b)
+ {
+ if(b < 0x20 && b != '\n' && b != '\r' && b != '\t')
+ return FALSE;
+ return TRUE;
+ }
+
static BOOL text_plain_filter(const BYTE *b, DWORD size)
{
const BYTE *ptr;
for(ptr = b; ptr < b+size-1; ptr++) {
- if(*ptr < 0x20 && *ptr != '\n' && *ptr != '\r' && *ptr != '\t')
+ if(!is_text_plain_char(*ptr))
return FALSE;
}
static HRESULT find_mime_from_buffer(const BYTE *buf, DWORD size, const WCHAR *proposed_mime, WCHAR **ret_mime)
{
LPCWSTR ret = NULL;
- DWORD len, i;
+ int len, i, any_pos_mime = -1;
static const WCHAR text_htmlW[] = {'t','e','x','t','/','h','t','m','l',0};
static const WCHAR text_richtextW[] = {'t','e','x','t','/','r','i','c','h','t','e','x','t',0};
+ static const WCHAR text_xmlW[] = {'t','e','x','t','/','x','m','l',0};
static const WCHAR audio_basicW[] = {'a','u','d','i','o','/','b','a','s','i','c',0};
static const WCHAR audio_wavW[] = {'a','u','d','i','o','/','w','a','v',0};
static const WCHAR image_gifW[] = {'i','m','a','g','e','/','g','i','f',0};
static const struct {
LPCWSTR mime;
BOOL (*filter)(const BYTE *,DWORD);
- } mime_filters[] = {
+ } mime_filters_any_pos[] = {
{text_htmlW, text_html_filter},
+ {text_xmlW, text_xml_filter}
+ }, mime_filters[] = {
{text_richtextW, text_richtext_filter},
/* {audio_xaiffW, audio_xaiff_filter}, */
{audio_basicW, audio_basic_filter},
return S_OK;
}
- if(proposed_mime && strcmpW(proposed_mime, app_octetstreamW)) {
- for(i=0; i < sizeof(mime_filters)/sizeof(*mime_filters); i++) {
- if(!strcmpW(proposed_mime, mime_filters[i].mime))
+ if(proposed_mime && (!strcmpW(proposed_mime, app_octetstreamW)
+ || !strcmpW(proposed_mime, text_plainW)))
+ proposed_mime = NULL;
+
+ if(proposed_mime) {
+ ret = proposed_mime;
+
+ for(i=0; i < sizeof(mime_filters_any_pos)/sizeof(*mime_filters_any_pos); i++) {
+ if(!strcmpW(proposed_mime, mime_filters_any_pos[i].mime)) {
+ any_pos_mime = i;
+ for(len=size; len>0; len--) {
+ if(mime_filters_any_pos[i].filter(buf+size-len, len))
+ break;
+ }
+ if(!len)
+ ret = NULL;
break;
+ }
}
- if(i == sizeof(mime_filters)/sizeof(*mime_filters) || mime_filters[i].filter(buf, size)) {
- len = strlenW(proposed_mime)+1;
- *ret_mime = CoTaskMemAlloc(len*sizeof(WCHAR));
- if(!*ret_mime)
- return E_OUTOFMEMORY;
+ if(i == sizeof(mime_filters_any_pos)/sizeof(*mime_filters_any_pos)) {
+ for(i=0; i < sizeof(mime_filters)/sizeof(*mime_filters); i++) {
+ if(!strcmpW(proposed_mime, mime_filters[i].mime)) {
+ if(!mime_filters[i].filter(buf, size))
+ ret = NULL;
+ break;
+ }
+ }
+ }
+ }
- memcpy(*ret_mime, proposed_mime, len*sizeof(WCHAR));
- return S_OK;
+ /* Looks like a bug in native implementation, html and xml mimes
+ * are not looked for if none of them was proposed */
+ if(!proposed_mime || any_pos_mime!=-1) {
+ for(len=size; !ret && len>0; len--) {
+ for(i=0; i<sizeof(mime_filters_any_pos)/sizeof(*mime_filters_any_pos); i++) {
+ if(mime_filters_any_pos[i].filter(buf+size-len, len)) {
+ ret = mime_filters_any_pos[i].mime;
+ break;
+ }
+ }
}
}
i++;
}
- TRACE("found %s for %s\n", debugstr_w(ret), debugstr_an((const char*)buf, min(32, size)));
+ if(any_pos_mime!=-1 && ret==text_plainW)
+ ret = mime_filters_any_pos[any_pos_mime].mime;
+ else if(proposed_mime && ret==app_octetstreamW) {
+ for(len=size; ret==app_octetstreamW && len>0; len--) {
+ if(!is_text_plain_char(buf[size-len]))
+ break;
+ for(i=0; i<sizeof(mime_filters_any_pos)/sizeof(*mime_filters_any_pos); i++) {
+ if(mime_filters_any_pos[i].filter(buf+size-len, len)) {
+ ret = text_plainW;
+ break;
+ }
+ }
+ }
- if(proposed_mime) {
- if(i == sizeof(mime_filters)/sizeof(*mime_filters))
+ if(ret == app_octetstreamW)
ret = proposed_mime;
-
- /* text/html is a special case */
- if(!strcmpW(proposed_mime, text_htmlW) && !strcmpW(ret, text_plainW))
- ret = text_htmlW;
}
+ TRACE("found %s for %s\n", debugstr_w(ret), debugstr_an((const char*)buf, min(32, size)));
len = strlenW(ret)+1;
*ret_mime = CoTaskMemAlloc(len*sizeof(WCHAR));
LPVOID pBuffer, DWORD cbBuffer, LPCWSTR pszMimeType, DWORD dwReserved,
CLSID *pclsid)
{
- FIXME("(%p, %s, %p, %d, %p, 0x%08x, %p): stub\n", pBC,
- debugstr_w(pszFilename), pBuffer, cbBuffer, debugstr_w(pszMimeType),
- dwReserved, pclsid);
+ FIXME("(%p, %s, %p, %d, %s, 0x%08x, %p): stub\n", pBC, debugstr_w(pszFilename), pBuffer,
+ cbBuffer, debugstr_w(pszMimeType), dwReserved, pclsid);
return E_NOTIMPL;
}
}
/***********************************************************************
- * URLMON_410 (URLMON.410)
+ * IsProtectedModeURL (URLMON.111)
+ * Undocumented, added in IE7
+ */
+ BOOL WINAPI IsProtectedModeURL(const WCHAR *url)
+ {
+ FIXME("stub: %s\n", debugstr_w(url));
+ return TRUE;
+ }
+
+ /***********************************************************************
+ * LogSqmBits (URLMON.410)
* Undocumented, added in IE8
*/
- BOOL WINAPI URLMON_410(DWORD unknown1, DWORD unknown2)
+ int WINAPI LogSqmBits(DWORD unk1, DWORD unk2)
{
- FIXME("stub: %d %d\n", unknown1, unknown2);
- return FALSE;
+ FIXME("stub: %d %d\n", unk1, unk2);
+ return 0;
}
/***********************************************************************
- * URLMON_423 (URLMON.423)
+ * LogSqmUXCommandOffsetInternal (URLMON.423)
* Undocumented, added in IE8
*/
- BOOL WINAPI URLMON_423(DWORD unknown1, DWORD unknown2, DWORD unknown3, DWORD unknown4)
+ void WINAPI LogSqmUXCommandOffsetInternal(DWORD unk1, DWORD unk2, DWORD unk3, DWORD unk4)
{
- FIXME("stub: %d %d %d %d\n", unknown1, unknown2, unknown3, unknown4);
- return FALSE;
+ FIXME("stub: %d %d %d %d\n", unk1, unk2, unk3, unk4);
+ }
+
+ /***********************************************************************
+ * MapUriToBrowserEmulationState (URLMON.444)
+ * Undocumented, added in IE8
+ */
+ int WINAPI MapUriToBrowserEmulationState(DWORD unk1, DWORD unk2, DWORD unk3)
+ {
+ FIXME("stub: %d %d %d\n", unk1, unk2, unk3);
+ return 0;
+ }
+
+ /***********************************************************************
+ * MapBrowserEmulationModeToUserAgent (URLMON.445)
+ * Undocumented, added in IE8
+ */
+ int WINAPI MapBrowserEmulationModeToUserAgent(DWORD unk1, DWORD unk2)
+ {
+ FIXME("stub: %d %d\n", unk1, unk2);
+ return 0;
+ }
+
+ /***********************************************************************
+ * FlushUrlmonZonesCache (URLMON.455)
+ * Undocumented, added in IE8
+ */
+ void WINAPI FlushUrlmonZonesCache(void)
+ {
+ FIXME("stub\n");
+ }
+
+ /***********************************************************************
+ * RegisterMediaTypes
+ * Added in IE3, registers known MIME-type strings.
+ */
+ HRESULT WINAPI RegisterMediaTypes(UINT types, LPCSTR *szTypes, CLIPFORMAT *cfTypes)
+ {
+ FIXME("stub: %u %p %p\n", types, szTypes, cfTypes);
+ return E_INVALIDARG;
}
extern HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj) DECLSPEC_HIDDEN;
extern HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj) DECLSPEC_HIDDEN;
extern HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj) DECLSPEC_HIDDEN;
+ extern HRESULT Uri_Construct(IUnknown *pUnkOuter, LPVOID *ppobj) DECLSPEC_HIDDEN;
extern BOOL WINAPI URLMON_DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) DECLSPEC_HIDDEN;
extern HRESULT WINAPI URLMON_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) DECLSPEC_HIDDEN;
extern HRESULT WINAPI URLMON_DllUnregisterServer(void) DECLSPEC_HIDDEN;
extern GUID const CLSID_PSFactoryBuffer DECLSPEC_HIDDEN;
+ extern GUID const CLSID_CUri DECLSPEC_HIDDEN;
/**********************************************************************
* Dll lifetime tracking declaration for urlmon.dll
static inline void URLMON_LockModule(void) { InterlockedIncrement( &URLMON_refCount ); }
static inline void URLMON_UnlockModule(void) { InterlockedDecrement( &URLMON_refCount ); }
+ extern HINSTANCE urlmon_instance;
+
IInternetProtocolInfo *get_protocol_info(LPCWSTR) DECLSPEC_HIDDEN;
HRESULT get_protocol_handler(IUri*,CLSID*,BOOL*,IClassFactory**) DECLSPEC_HIDDEN;
IInternetProtocol *get_mime_filter(LPCWSTR) DECLSPEC_HIDDEN;
BOOL is_registered_protocol(LPCWSTR) DECLSPEC_HIDDEN;
- void register_urlmon_namespace(IClassFactory*,REFIID,LPCWSTR,BOOL) DECLSPEC_HIDDEN;
+ HRESULT register_namespace(IClassFactory*,REFIID,LPCWSTR,BOOL) DECLSPEC_HIDDEN;
HINTERNET get_internet_session(IInternetBindInfo*) DECLSPEC_HIDDEN;
LPWSTR get_useragent(void) DECLSPEC_HIDDEN;
void free_session(void) DECLSPEC_HIDDEN;
HRESULT create_default_callback(IBindStatusCallback**) DECLSPEC_HIDDEN;
HRESULT wrap_callback(IBindStatusCallback*,IBindStatusCallback**) DECLSPEC_HIDDEN;
+ IBindStatusCallback *bsc_from_bctx(IBindCtx*) DECLSPEC_HIDDEN;
+
+ typedef HRESULT (*stop_cache_binding_proc_t)(void*,const WCHAR*,HRESULT,const WCHAR*);
+ HRESULT download_to_cache(IUri*,stop_cache_binding_proc_t,void*,IBindStatusCallback*) DECLSPEC_HIDDEN;
typedef struct ProtocolVtbl ProtocolVtbl;
ULONG current_position;
ULONG content_length;
ULONG available_bytes;
+ ULONG query_available;
IStream *post_stream;
#define FLAG_LAST_DATA_REPORTED 0x0010
#define FLAG_RESULT_REPORTED 0x0020
#define FLAG_ERROR 0x0040
+ #define FLAG_SYNC_READ 0x0080
HRESULT protocol_start(Protocol*,IInternetProtocol*,IUri*,IInternetProtocolSink*,IInternetBindInfo*) DECLSPEC_HIDDEN;
HRESULT protocol_continue(Protocol*,PROTOCOLDATA*) DECLSPEC_HIDDEN;
HRESULT protocol_lock_request(Protocol*) DECLSPEC_HIDDEN;
HRESULT protocol_unlock_request(Protocol*) DECLSPEC_HIDDEN;
HRESULT protocol_abort(Protocol*,HRESULT) DECLSPEC_HIDDEN;
+ HRESULT protocol_syncbinding(Protocol*) DECLSPEC_HIDDEN;
void protocol_close_connection(Protocol*) DECLSPEC_HIDDEN;
void find_domain_name(const WCHAR*,DWORD,INT*) DECLSPEC_HIDDEN;
- typedef struct {
- IInternetProtocol IInternetProtocol_iface;
- IInternetProtocolSink IInternetProtocolSink_iface;
-
- LONG ref;
-
- IInternetProtocolSink *protocol_sink;
- IInternetProtocol *protocol;
- } ProtocolProxy;
-
- HRESULT create_protocol_proxy(IInternetProtocol*,IInternetProtocolSink*,ProtocolProxy**) DECLSPEC_HIDDEN;
-
typedef struct _task_header_t task_header_t;
typedef struct {
struct {
IInternetProtocol IInternetProtocol_iface;
+ IInternetProtocolSink IInternetProtocolSink_iface;
} default_protocol_handler;
IInternetProtocol *protocol_handler;
+ IInternetProtocolSink *protocol_sink_handler;
LONG priority;
DWORD buf_size;
LPWSTR mime;
IUri *uri;
- ProtocolProxy *filter_proxy;
+ BSTR display_uri;
} BindProtocol;
HRESULT create_binding_protocol(BOOL,BindProtocol**) DECLSPEC_HIDDEN;
HWND get_notif_hwnd(void) DECLSPEC_HIDDEN;
void release_notif_hwnd(HWND) DECLSPEC_HIDDEN;
+ const char *debugstr_bindstatus(ULONG) DECLSPEC_HIDDEN;
+
static inline void *heap_alloc(size_t len)
{
return HeapAlloc(GetProcessHeap(), 0, len);
size = (strlenW(str)+1)*sizeof(WCHAR);
ret = heap_alloc(size);
- memcpy(ret, str, size);
+ if(ret)
+ memcpy(ret, str, size);
}
return ret;
if(str) {
DWORD len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
ret = heap_alloc(len*sizeof(WCHAR));
- MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
+ if(ret)
+ MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
+ }
+
+ return ret;
+ }
+
+ static inline char *heap_strdupWtoA(const WCHAR *str)
+ {
+ char *ret = NULL;
+
+ if(str) {
+ size_t size = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
+ ret = heap_alloc(size);
+ if(ret)
+ WideCharToMultiByte(CP_ACP, 0, str, -1, ret, size, NULL, NULL);
}
return ret;
#include "urlmon.idl"
- #ifndef __WIDL__
- #define threading(model)
- #define progid(str)
- #define vi_progid(str)
- #endif
-
- #ifndef __midl
[
helpstring("URL Moniker"),
threading(apartment),
uuid(79eac9e0-baf9-11ce-8c82-00aa004ba90b)
]
coclass StdURLMoniker { interface IMoniker; }
- #endif
[
helpstring("http: Asynchronous Pluggable Protocol Handler"),
]
coclass MkProtocol { interface IInternetProtocolEx; interface IInternetPriority; }
- #ifndef __midl
[
helpstring("file:, local: Asynchronous Pluggable Protocol Handler"),
threading(apartment),
uuid(79eac9e7-baf9-11ce-8c82-00aa004ba90b)
]
coclass FileProtocol { interface IInternetProtocolEx; interface IInternetPriority; }
- #endif
[
helpstring("CDL: Asynchronous Pluggable Protocol Handler"),
uuid(8f6b0360-b80d-11d0-a9b3-006097942311)
]
coclass DeCompMimeFilter { interface IInternetProtocol; interface IInternetProtocolSink; }
+
+ [
+ helpstring("CUri"),
+ threading(apartment),
+ uuid(df2fce13-25ec-45bb-9d4c-cecd47c2430c)
+ ]
+ coclass CUri { interface IUri; }
--- /dev/null
+ HKCR
+ {
+ NoRemove Interface
+ {
+ '{79EAC9C0-BAF9-11CE-8C82-00AA004BA90B}' = s 'IBinding'
+ {
+ NumMethods = s 9
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{79EAC9C1-BAF9-11CE-8C82-00AA004BA90B}' = s 'IBindStatusCallback'
+ {
+ NumMethods = s 11
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{AAA74EF9-8EE7-4659-88D9-F8C504DA73CC}' = s 'IBindStatusCallbackEx'
+ {
+ NumMethods = s 12
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{79EAC9D0-BAF9-11CE-8C82-00AA004BA90B}' = s 'IAuthenticate'
+ {
+ NumMethods = s 4
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{79EAC9D2-BAF9-11CE-8C82-00AA004BA90B}' = s 'IHttpNegotiate'
+ {
+ NumMethods = s 5
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{4F9F9FCB-E0F4-48EB-B7AB-FA2EA9365CB4}' = s 'IHttpNegotiate2'
+ {
+ NumMethods = s 6
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{FC4801A1-2BA9-11CF-A229-00AA003D7352}' = s 'IBindHost'
+ {
+ NumMethods = s 6
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{79EAC9D6-BAFA-11CE-8C82-00AA004BA90B}' = s 'IWinInetInfo'
+ {
+ NumMethods = s 4
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{79EAC9D8-BAFA-11CE-8C82-00AA004BA90B}' = s 'IWinInetHttpInfo'
+ {
+ NumMethods = s 5
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{79EAC9D7-BAFA-11CE-8C82-00AA004BA90B}' = s 'IHttpSecurity'
+ {
+ NumMethods = s 5
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{79EAC9C9-BAF9-11CE-8C82-00AA004BA90B}' = s 'IPersistMoniker'
+ {
+ NumMethods = s 9
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{A5CA5F7F-1847-4D87-9C5B-918509F7511D}' = s 'IMonikerProp'
+ {
+ NumMethods = s 4
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{79EAC9EE-BAF9-11CE-8C82-00AA004BA90B}' = s 'IInternetSecurityManager'
+ {
+ NumMethods = s 11
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{F164EDF1-CC7C-4F0D-9A94-34222625C393}' = s 'IInternetSecurityManagerEx'
+ {
+ NumMethods = s 12
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{F1E50292-A795-4117-8E09-2B560A72AC60}' = s 'IInternetSecurityManagerEx2'
+ {
+ NumMethods = s 16
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ '{A39EE748-6A27-4817-A6F2-13914BEF5890}' = s 'IUri'
+ {
+ NumMethods = s 28
+ ProxyStubClsid32 = s '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}'
+ }
+ }
+ NoRemove CLSID
+ {
+ '{79EAC9E0-BAF9-11CE-8C82-00AA004BA90B}' = s 'URL Moniker'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{79EAC9E2-BAF9-11CE-8C82-00AA004BA90B}' = s 'http: Asynchronous Pluggable Protocol Handler'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{79EAC9E3-BAF9-11CE-8C82-00AA004BA90B}' = s 'ftp: Asynchronous Pluggable Protocol Handler'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{79EAC9E4-BAF9-11CE-8C82-00AA004BA90B}' = s 'gopher: Asynchronous Pluggable Protocol Handler'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{79EAC9E5-BAF9-11CE-8C82-00AA004BA90B}' = s 'https: Asynchronous Pluggable Protocol Handler'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{79EAC9E6-BAF9-11CE-8C82-00AA004BA90B}' = s 'mk: Asynchronous Pluggable Protocol Handler'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{79EAC9E7-BAF9-11CE-8C82-00AA004BA90B}' = s 'file:, local: Asynchronous Pluggable Protocol Handler'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{3DD53D40-7B8B-11D0-B013-00AA0059CE02}' = s 'CDL: Asynchronous Pluggable Protocol Handler'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{7B8A2D94-0AC9-11D1-896C-00C04FB6BFC4}' = s 'Security Manager'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+ }
+ '{7B8A2D95-0AC9-11D1-896C-00C04FB6BFC4}' = s 'URL Zone Manager'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
+ }
+ '{79EAC9F1-BAF9-11CE-8C82-00AA004BA90B}' = s 'URLMoniker ProxyStub Factory'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{8F6B0360-B80D-11D0-A9B3-006097942311}' = s 'AP lzdhtml encoding/decoding Filter'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ '{DF2FCE13-25EC-45BB-9D4C-CECD47C2430C}' = s 'CUri'
+ {
+ InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
+ }
+ }
+ }
DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
DWORD *pdwReserved)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ TRACE("(%p %x %p %p %p %p)\n", This, dwOption, pBuffer, pcbBuf, pdwFlags, pdwReserved);
+ return IWinInetHttpInfo_RemoteQueryInfo_Proxy(This, dwOption, pBuffer, pcbBuf, pdwFlags, pdwReserved);
}
HRESULT __RPC_STUB IWinInetHttpInfo_QueryInfo_Stub(IWinInetHttpInfo* This,
DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
DWORD *pdwReserved)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ TRACE("(%p %x %p %p %p %p)\n", This, dwOption, pBuffer, pcbBuf, pdwFlags, pdwReserved);
+ return IWinInetHttpInfo_QueryInfo(This, dwOption, pBuffer, pcbBuf, pdwFlags, pdwReserved);
}
HRESULT CALLBACK IWinInetInfo_QueryOption_Proxy(IWinInetInfo* This,
DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ TRACE("(%p %x %p %p)\n", This, dwOption, pBuffer, pcbBuf);
+ return IWinInetInfo_RemoteQueryOption_Proxy(This, dwOption, pBuffer, pcbBuf);
}
HRESULT __RPC_STUB IWinInetInfo_QueryOption_Stub(IWinInetInfo* This,
DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf)
{
- FIXME("stub\n");
- return E_NOTIMPL;
+ TRACE("(%p %x %p %p)\n", This, dwOption, pBuffer, pcbBuf);
+ return IWinInetInfo_QueryOption(This, dwOption, pBuffer, pcbBuf);
}
HRESULT CALLBACK IBindHost_MonikerBindToStorage_Proxy(IBindHost* This,
FIXME("stub\n");
return E_NOTIMPL;
}
-
- HRESULT STDMETHODCALLTYPE IWindowForBindingUI_GetWindow_Proxy(
- IWindowForBindingUI* This, REFGUID rguidReason, HWND *phwnd)
- {
- FIXME("stub\n");
- return E_NOTIMPL;
- }
-
- void __RPC_STUB IWindowForBindingUI_GetWindow_Stub(IRpcStubBuffer* This,
- IRpcChannelBuffer* pRpcChannelBuffer, PRPC_MESSAGE pRpcMessage,
- DWORD* pdwStubPhase)
- {
- FIXME("stub\n");
- }
/*
- * PROJECT: ReactOS userenv.dll
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: dll/win32/userenv/lang/it-IT.rc
- * PURPOSE: Italian Translation of dll/win32/userenv/lang/en-US.rc
- * TRANSLATOR: Copyright (C) 2007 Daniele Forsi (dforsi at gmail.com) Italian Translation
- *
- * UPDATE HISTORY:
- * 11 Feb 2009: Gabriel Ilardi (gabrielilardi at hotmail.it) - compatibility fixes/update.
- */
+ * PROJECT: ReactOS userenv.dll
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: dll/win32/userenv/lang/it-IT.rc
+ * PURPOSE: Italian Translation of dll/win32/userenv/lang/en-US.rc
+ * TRANSLATOR: Copyright (C) 2007 Daniele Forsi (dforsi at gmail.com) Italian Translation
+ *
+ * UPDATE HISTORY:
+ * 11 Feb 2009: Gabriel Ilardi (gabrielilardi at hotmail.it) - compatibility fixes/update.
+ */
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
IDS_MYMUSIC "Documenti\\Musica"
IDS_MYVIDEOS "Documenti\\Video"
IDS_TEMPLATES "Modelli"
- IDS_RECENT "Recent"
- IDS_SENDTO "SendTo"
+ IDS_RECENT "Recenti"
+ IDS_SENDTO "Invia a"
IDS_PRINTHOOD "Stampanti"
IDS_NETHOOD "Risorse di rete"
IDS_LOCALSETTINGS "Impostazioni locali"
//#include <stdarg.h>
#include <stdio.h>
//#include <string.h>
- //#include <setjmp.h>
+ #include <setjmp.h>
#ifdef SONAME_LIBJPEG
/* This is a hack, so jpeglib.h does not redefine INT32 and the like*/
DPRINT1("Controler EHCI has Port Power Control\n");
}
- DPRINT1("Controller Port Routing Rules %d\n", m_Capabilities.HCSParams.PortRouteRules);
- DPRINT1("Number of Ports per Companion Controller %d\n", m_Capabilities.HCSParams.PortPerCHC);
- DPRINT1("Number of Companion Controller %d\n", m_Capabilities.HCSParams.CHCCount);
+ DPRINT1("Controller Port Routing Rules %lu\n", m_Capabilities.HCSParams.PortRouteRules);
+ DPRINT1("Number of Ports per Companion Controller %lu\n", m_Capabilities.HCSParams.PortPerCHC);
+ DPRINT1("Number of Companion Controller %lu\n", m_Capabilities.HCSParams.CHCCount);
if (m_Capabilities.HCSParams.PortIndicator)
{
m_Capabilities.HCSParamsLong = READ_REGISTER_ULONG((PULONG)((ULONG)ResourceBase + EHCI_HCSPARAMS));
m_Capabilities.HCCParamsLong = READ_REGISTER_ULONG((PULONG)((ULONG)ResourceBase + EHCI_HCCPARAMS));
- DPRINT1("Controller has %d Length\n", m_Capabilities.Length);
+ DPRINT1("Controller has %c Length\n", m_Capabilities.Length);
DPRINT1("Controller EHCI Version %x\n", m_Capabilities.HCIVersion);
DPRINT1("Controller EHCI Caps HCSParamsLong %x\n", m_Capabilities.HCSParamsLong);
DPRINT1("Controller EHCI Caps HCCParamsLong %x\n", m_Capabilities.HCCParamsLong);
- DPRINT1("Controller has %d Ports\n", m_Capabilities.HCSParams.PortCount);
+ DPRINT1("Controller has %lu Ports\n", m_Capabilities.HCSParams.PortCount);
//
// print capabilities
// lets wait a bit
//
Timeout.QuadPart = 50;
- DPRINT1("Waiting %d milliseconds for port reset\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for port reset\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
// delay is 50 ms for port reset as per USB 2.0 spec
//
Timeout.QuadPart = 50;
- DPRINT1("Waiting %d milliseconds for port reset\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for port reset\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
// delay is 50 ms
//
Timeout.QuadPart = 50;
- DPRINT1("Waiting %d milliseconds for port to recover after reset\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for port to recover after reset\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
// delay is 100 ms
//
Timeout.QuadPart = 100;
- DPRINT1("Waiting %d milliseconds for port to stabilize after connection\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for port to stabilize after connection\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
// delay is 20 ms
//
Timeout.QuadPart = 20;
- DPRINT1("Waiting %d milliseconds for port power up\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for port power up\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
{
if (PortStatus & EHCI_PRT_CONNECTED)
{
- DPRINT1("Device connected on port %d\n", i);
+ DPRINT1("Device connected on port %lu\n", i);
if (This->m_Capabilities.HCSParams.CHCCount)
{
}
else
{
- DPRINT1("Device disconnected on port %d\n", i);
+ DPRINT1("Device disconnected on port %lu\n", i);
//
// work to do
if (Entry == &HeadQueueHead->LinkedQueueHeads)
{
- DPRINT1("Warnnig; Only %d QueueHeads in HeadQueueHead\n", Index);
+ DPRINT1("Warning; Only %lu QueueHeads in HeadQueueHead\n", Index);
Count = Index + 1;
break;
}
LastQueueHead->HorizontalLinkPointer = QueueHead->HorizontalLinkPointer;
LastQueueHead->NextQueueHead = QueueHead->NextQueueHead;
- DPRINT1("Periodic QueueHead %p Addr $x unlinked\n", QueueHead, QueueHead->PhysicalAddr);
+ DPRINT1("Periodic QueueHead %p Addr %x unlinked\n", QueueHead, QueueHead->PhysicalAddr);
// insert into completed list
InsertTailList(&m_CompletedRequestAsyncList, &QueueHead->LinkedQueueHeads);
//
IsQueueHeadComplete = Request->IsQueueHeadComplete(QueueHead);
- DPRINT("Request %p QueueHead %p Complete %d\n", Request, QueueHead, IsQueueHeadComplete);
+ DPRINT("Request %p QueueHead %p Complete %c\n", Request, QueueHead, IsQueueHeadComplete);
//
// check if queue head is complete
//
IsQueueHeadComplete = Request->IsQueueHeadComplete(QueueHead);
- DPRINT("Request %p QueueHead %p Complete %d\n", Request, QueueHead, IsQueueHeadComplete);
+ DPRINT("Request %p QueueHead %p Complete %c\n", Request, QueueHead, IsQueueHeadComplete);
//
// check if queue head is complete
// delay is 100 ms
//
Timeout.QuadPart = WaitInMs;
- DPRINT1("Waiting %d milliseconds for controller to transition state\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for controller to transition state\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
// delay is 100 ms
//
Timeout.QuadPart = 100;
- DPRINT1("Waiting %d milliseconds for port to stabilize after connection\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for port to stabilize after connection\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
// delay is multiplied by 2 ms
//
Timeout.QuadPart *= 2;
- DPRINT1("Waiting %d milliseconds for port power up\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for port power up\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
//
// device connected
//
- DPRINT1("New device arrival at Port %d LowSpeed %x\n", Index, (PortStatus & OHCI_RH_PORTSTATUS_LSDA));
+ DPRINT1("New device arrival at Port %lu LowSpeed %x\n", Index, (PortStatus & OHCI_RH_PORTSTATUS_LSDA));
//
// enable port
//
// This is a port reset complete interrupt
//
- DPRINT1("Port %d completed reset\n", Index);
+ DPRINT1("Port %lu completed reset\n", Index);
//
// Queue a work item
DPRINT1("EndpointDescriptor %p Addr %x\n", Descriptor, Descriptor->PhysicalAddress.LowPart);
DPRINT1("EndpointDescriptor HeadPhysicalDescriptor %x HeadLogicalDescriptor %p\n", Descriptor->HeadPhysicalDescriptor, Descriptor->HeadLogicalDescriptor);
DPRINT1("EndpointDescriptor TailPhysicalDescriptor %x\n", Descriptor->TailPhysicalDescriptor);
- DPRINT1("EndpointDescriptor NextDescriptor %x\n", Descriptor->NextDescriptor);
+ DPRINT1("EndpointDescriptor NextDescriptor %p\n", Descriptor->NextDescriptor);
DPRINT1("EndpointDescriptor NextPhysicalEndpoint %x\n", Descriptor->NextPhysicalEndpoint);
DPRINT1("EndpointDescriptor Flags %x\n", Descriptor->Flags);
GeneralDescriptor = (POHCI_GENERAL_TD)Descriptor->HeadLogicalDescriptor;
while(GeneralDescriptor)
{
- DPRINT1("Descriptor %d Address %p Addr %x\n", Count, GeneralDescriptor, GeneralDescriptor->PhysicalAddress);
- DPRINT1("Descriptor %d BufferLogical %p BufferPhysical %x\n", Count, GeneralDescriptor->BufferLogical, GeneralDescriptor->BufferPhysical);
- DPRINT1("Descriptor %d BufferSize %d\n", Count, GeneralDescriptor->BufferSize);
- DPRINT1("Descriptor %d LastPhysicalByteAddress %x\n", Count, GeneralDescriptor->LastPhysicalByteAddress);
- DPRINT1("Descriptor %d Flags %x\n", Count, GeneralDescriptor->Flags);
- DPRINT1("Descriptor %d NextLogicalDescriptor %p NextPhysicalDescriptor %x\n", Count, GeneralDescriptor->NextLogicalDescriptor, GeneralDescriptor->NextPhysicalDescriptor);
+ DPRINT1("Descriptor %lu Address %p Addr %x\n", Count, GeneralDescriptor, GeneralDescriptor->PhysicalAddress);
+ DPRINT1("Descriptor %lu BufferLogical %p BufferPhysical %x\n", Count, GeneralDescriptor->BufferLogical, GeneralDescriptor->BufferPhysical);
+ DPRINT1("Descriptor %lu BufferSize %lu\n", Count, GeneralDescriptor->BufferSize);
+ DPRINT1("Descriptor %lu LastPhysicalByteAddress %x\n", Count, GeneralDescriptor->LastPhysicalByteAddress);
+ DPRINT1("Descriptor %lu Flags %x\n", Count, GeneralDescriptor->Flags);
+ DPRINT1("Descriptor %lu NextLogicalDescriptor %p NextPhysicalDescriptor %x\n", Count, GeneralDescriptor->NextLogicalDescriptor, GeneralDescriptor->NextPhysicalDescriptor);
Count++;
GeneralDescriptor = (POHCI_GENERAL_TD)GeneralDescriptor->NextLogicalDescriptor;
VOID
DumpConfigurationDescriptor(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor)
{
- DPRINT1("Dumping ConfigurationDescriptor %x\n", ConfigurationDescriptor);
+ DPRINT1("Dumping ConfigurationDescriptor %p\n", ConfigurationDescriptor);
DPRINT1("bLength %x\n", ConfigurationDescriptor->bLength);
DPRINT1("bDescriptorType %x\n", ConfigurationDescriptor->bDescriptorType);
DPRINT1("wTotalLength %x\n", ConfigurationDescriptor->wTotalLength);
//
// WTF? usb port driver does not give us bulk pipe access
//
- DPRINT1("USBSTOR_GetPipeHandles> BulkInFound %d BulkOutFound %d missing!!!\n", BulkInFound, BulkOutFound);
+ DPRINT1("USBSTOR_GetPipeHandles> BulkInFound %c BulkOutFound %c missing!!!\n", BulkInFound, BulkOutFound);
return STATUS_DEVICE_CONFIGURATION_ERROR;
}
//
// send the request
//
- DPRINT1("Sending Request DeviceObject %x, Urb %x\n", DeviceObject, Urb);
+ DPRINT1("Sending Request DeviceObject %p, Urb %p\n", DeviceObject, Urb);
Status = USBSTOR_SyncUrbRequest(DeviceObject, Urb);
//
//
// send the request
//
- DPRINT1("Sending Request DeviceObject %x, Urb %x\n", DeviceObject, Urb);
+ DPRINT1("Sending Request DeviceObject %p, Urb %p\n", DeviceObject, Urb);
Status = USBSTOR_SyncUrbRequest(DeviceObject, Urb);
//
VOID
USBSTOR_DumpDeviceDescriptor(PUSB_DEVICE_DESCRIPTOR DeviceDescriptor)
{
- DPRINT1("Dumping Device Descriptor %x\n", DeviceDescriptor);
+ DPRINT1("Dumping Device Descriptor %p\n", DeviceDescriptor);
DPRINT1("bLength %x\n", DeviceDescriptor->bLength);
DPRINT1("bDescriptorType %x\n", DeviceDescriptor->bDescriptorType);
DPRINT1("bcdUSB %x\n", DeviceDescriptor->bcdUSB);
//
// using serial number from device
//
- swprintf(Buffer, L"%s&%d", FDODeviceExtension->SerialNumber->bString, PDODeviceExtension->LUN);
+ swprintf(Buffer, L"%s&%c", FDODeviceExtension->SerialNumber->bString, PDODeviceExtension->LUN);
}
else
{
//
// use instance count and LUN
//
- swprintf(Buffer, L"%04d&%d", FDODeviceExtension->InstanceCount, PDODeviceExtension->LUN);
+ swprintf(Buffer, L"%04lu&%c", FDODeviceExtension->InstanceCount, PDODeviceExtension->LUN);
}
//
DPRINT1("Version %x\n", Response->Version);
DPRINT1("Format %x\n", Response->Format);
DPRINT1("Length %x\n", Response->Length);
- DPRINT1("Reserved %x\n", Response->Reserved);
+ DPRINT1("Reserved %p\n", Response->Reserved);
DPRINT1("Vendor %c%c%c%c%c%c%c%c\n", Response->Vendor[0], Response->Vendor[1], Response->Vendor[2], Response->Vendor[3], Response->Vendor[4], Response->Vendor[5], Response->Vendor[6], Response->Vendor[7]);
DPRINT1("Product %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", Response->Product[0], Response->Product[1], Response->Product[2], Response->Product[3],
Response->Product[4], Response->Product[5], Response->Product[6], Response->Product[7],
// delay is 10 ms
//
Timeout.QuadPart = 10;
- DPRINT1("Waiting %d milliseconds for global reset\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for global reset\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
}
}
- DPRINT1("Index %lu QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %x NextElementDescriptor %x\n",
+ DPRINT1("Index %d QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %p NextElementDescriptor %p\n",
0,
m_QueueHead[0],
m_QueueHead[0]->LinkPhysical,
m_QueueHead[0]->PhysicalAddress,
m_QueueHead[0]->Request,
m_QueueHead[0]->NextElementDescriptor);
- DPRINT1("Index %lu QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %x NextElementDescriptor %x\n",
+ DPRINT1("Index %d QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %p NextElementDescriptor %p\n",
1,
m_QueueHead[1],
m_QueueHead[1]->LinkPhysical,
m_QueueHead[1]->Request,
m_QueueHead[1]->NextElementDescriptor);
- DPRINT1("Index %lu QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %x NextElementDescriptor %x\n",
+ DPRINT1("Index %d QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %p NextElementDescriptor %p\n",
2,
m_QueueHead[2],
m_QueueHead[2]->LinkPhysical,
m_QueueHead[2]->PhysicalAddress,
m_QueueHead[2]->Request,
m_QueueHead[2]->NextElementDescriptor);
- DPRINT1("Index %lu QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %x NextElementDescriptor %x\n",
+ DPRINT1("Index %d QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %p NextElementDescriptor %p\n",
3,
m_QueueHead[3],
m_QueueHead[3]->LinkPhysical,
m_QueueHead[3]->PhysicalAddress,
m_QueueHead[3]->Request,
m_QueueHead[3]->NextElementDescriptor);
- DPRINT1("Index %lu QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %x NextElementDescriptor %x\n",
+ DPRINT1("Index %d QueueHead %p LinkPhysical %x ElementPhysical %x PhysicalAddress %x Request %p NextElementDescriptor %p\n",
4,
m_QueueHead[4],
m_QueueHead[4]->LinkPhysical,
// delay is 20 ms for port reset
//
Timeout.QuadPart = 20;
- DPRINT1("Waiting %d milliseconds for port reset\n", Timeout.LowPart);
+ DPRINT1("Waiting %lu milliseconds for port reset\n", Timeout.LowPart);
//
// convert to 100 ns units (absolute)
include
${REACTOS_SOURCE_DIR}/ntoskrnl/include)
- list(APPEND HAL_GENERIC_SOURCE
- generic/beep.c
- generic/cmos.c
- generic/display.c
- generic/dma.c
- generic/drive.c
- generic/halinit.c
- generic/memory.c
- generic/misc.c
- generic/reboot.c
- generic/sysinfo.c
- generic/usage.c)
+ function(add_hal _halname)
+ cmake_parse_arguments(_haldata "" "" "SOURCES;COMPONENTS" ${ARGN})
- if(ARCH STREQUAL "i386")
- list(APPEND HAL_GENERIC_SOURCE
- generic/bios.c
- generic/portio.c)
- endif()
-
- if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
- add_library(lib_hal_generic OBJECT ${HAL_GENERIC_SOURCE})
- else()
- add_library(lib_hal_generic ${HAL_GENERIC_SOURCE})
- endif()
-
- add_dependencies(lib_hal_generic asm)
- add_pch(lib_hal_generic include/hal.h)
-
- if(ARCH STREQUAL "i386")
-
- #####################################
- # Generate the pcidata source files in the x86 build
- #
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.h
- COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_classes.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.h ClassTable INIT_FUNCTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
- DEPENDS native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_classes.ids)
-
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.h
- COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_vendors.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.h VendorTable INIT_FUNCTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
- DEPENDS native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_vendors.ids)
- #####################################
-
- list(APPEND HAL_LEGACY_SOURCE
- legacy/bus/bushndlr.c
- legacy/bus/cmosbus.c
- legacy/bus/isabus.c
- legacy/bus/pcibus.c
- ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c
- ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c
- legacy/bus/sysbus.c
- legacy/bussupp.c
- legacy/halpnpdd.c
- legacy/halpcat.c)
+ # Handle the spec file for the dll name
+ spec2def(${_halname}.dll ../hal.spec ADD_IMPORTLIB)
+ # Create the actual target
if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
- add_library(lib_hal_legacy OBJECT ${HAL_LEGACY_SOURCE})
- else()
- add_library(lib_hal_legacy ${HAL_LEGACY_SOURCE})
- endif()
-
- #add_pch(lib_hal_legacy include/hal.h)
-
- if(MSVC OR (NOT CMAKE_VERSION VERSION_GREATER 2.8.7))
- target_link_libraries(lib_hal_legacy lib_hal_generic)
- endif()
-
- endif()
-
- list(APPEND HAL_ACPI_SOURCE
- acpi/halacpi.c
- acpi/halpnpdd.c
- acpi/busemul.c
- legacy/bus/pcibus.c)
-
- if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
- add_library(lib_hal_acpi OBJECT ${HAL_ACPI_SOURCE})
- else()
- add_library(lib_hal_acpi ${HAL_ACPI_SOURCE})
- endif()
- #add_pch(lib_hal_acpi include/hal.h)
-
- if(MSVC OR (NOT CMAKE_VERSION VERSION_GREATER 2.8.7))
- target_link_libraries(lib_hal_acpi lib_hal_generic)
- endif()
-
- list(APPEND HAL_UP_SOURCE
- generic/spinlock.c
- up/processor.c)
-
- if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
- add_library(lib_hal_up OBJECT ${HAL_UP_SOURCE})
- endif()
-
- list(APPEND HAL_APIC_ASM_SOURCE
- apic/apictrap.S
- apic/tsccal.S)
-
- list(APPEND HAL_APIC_SOURCE
- apic/apic.c
- apic/apictimer.c
- apic/halinit_apic.c
- apic/rtctimer.c
- apic/tsc.c)
-
- if(ARCH STREQUAL "i386")
- list(APPEND HAL_PIC_ASM_SOURCE
- generic/systimer.S
- generic/trap.S)
- list(APPEND HAL_PIC_SOURCE
- generic/profil.c
- generic/timer.c
- up/halinit_up.c
- up/pic.c)
-
- if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
- add_library(lib_hal_pic OBJECT ${HAL_PIC_SOURCE} ${HAL_PIC_ASM_SOURCE})
- add_dependencies(lib_hal_pic asm)
- endif()
-
- list(APPEND MINI_HAL_SOURCE
- generic/portio.c
- generic/systimer.S
- legacy/bus/bushndlr.c
- legacy/bus/cmosbus.c
- legacy/bus/isabus.c
- legacy/bus/pcibus.c
- legacy/bus/sysbus.c
- legacy/bussupp.c
- generic/beep.c
- generic/bios.c
- generic/cmos.c
- generic/dma.c
- generic/display.c
- generic/drive.c
- generic/misc.c
- generic/profil.c
- generic/reboot.c
- generic/spinlock.c
- generic/sysinfo.c
- generic/timer.c
- generic/usage.c
- up/halinit_mini.c
- up/pic.c
- up/processor.c)
-
- spec2def(hal.dll ../hal.spec ADD_IMPORTLIB)
-
- # hal
- if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
- add_library(hal SHARED
- $<TARGET_OBJECTS:lib_hal_generic>
- $<TARGET_OBJECTS:lib_hal_legacy>
- $<TARGET_OBJECTS:lib_hal_up>
- $<TARGET_OBJECTS:lib_hal_pic>
- generic/v86.S
- up/halup.rc
+ foreach(_component ${_haldata_COMPONENTS})
+ list(APPEND _haldata_SOURCES "$<TARGET_OBJECTS:lib_hal_${_component}>")
+ endforeach()
+ add_library(${_halname} SHARED
+ ${_haldata_SOURCES}
${CMAKE_CURRENT_BINARY_DIR}/hal.def)
else()
- add_asm_files(hal_asm
- ${HAL_PIC_ASM_SOURCE}
- generic/v86.S)
- add_library(hal SHARED
- ${HAL_UP_SOURCE}
- ${HAL_PIC_SOURCE}
- ${hal_asm}
- up/halup.rc
+ foreach(_component ${_haldata_COMPONENTS})
+ list(APPEND _haldata_LIBS "lib_hal_${_component}")
+ endforeach()
+ add_library(${_halname} SHARED
+ ${_haldata_SOURCES}
${CMAKE_CURRENT_BINARY_DIR}/hal.def)
+ target_link_libraries(${_halname} ${_haldata_LIBS})
endif()
- if(MSVC OR (NOT CMAKE_VERSION VERSION_GREATER 2.8.7))
- target_link_libraries(hal lib_hal_generic lib_hal_legacy)
- endif()
- target_link_libraries(hal libcntpr)
- add_importlibs(hal ntoskrnl)
- #add_pch(hal include/hal.h)
- add_dependencies(hal psdk bugcodes asm)
- set_entrypoint(hal HalInitSystem 8)
- set_subsystem(hal native)
- set_image_base(hal 0x00010000)
- add_cd_file(TARGET hal DESTINATION reactos/system32 NO_CAB FOR all)
+ target_link_libraries(${_halname} libcntpr)
+ add_importlibs(${_halname} ntoskrnl)
+ #add_pch(${_halname} include/hal.h)
+ add_dependencies(${_halname} psdk bugcodes asm)
+ set_entrypoint(${_halname} HalInitSystem 8)
+ set_subsystem(${_halname} native)
+ set_image_base(${_halname} 0x00010000)
+ add_cd_file(TARGET ${_halname} DESTINATION reactos/system32 NO_CAB FOR all)
if(MSVC)
- add_target_link_flags(hal "/ignore:4216 /ignore:4078")
- endif()
-
- # hal acpi
- spec2def(halacpi.dll ../hal.spec)
- if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7))
- add_library(halacpi SHARED
- $<TARGET_OBJECTS:lib_hal_generic>
- $<TARGET_OBJECTS:lib_hal_acpi>
- $<TARGET_OBJECTS:lib_hal_up>
- $<TARGET_OBJECTS:lib_hal_pic>
- generic/v86.S
- acpi/halacpi.rc
- ${CMAKE_CURRENT_BINARY_DIR}/halacpi.def)
+ add_target_link_flags(${_halname} "/ignore:4216 /ignore:4078")
else()
- set_source_files_properties(${HAL_PIC_ASM_SOURCE} generic/v86.S PROPERTIES COMPILE_DEFINITIONS "CONFIG_ACPI")
- add_asm_files(halacpi_asm ${HAL_PIC_ASM_SOURCE} generic/v86.S)
- add_library(halacpi SHARED
- ${HAL_UP_SOURCE}
- ${HAL_PIC_SOURCE}
- ${halacpi_asm}
- acpi/halacpi.rc
- ${CMAKE_CURRENT_BINARY_DIR}/halacpi.def)
+ target_link_libraries(${_halname} -lgcc)
endif()
+ endfunction()
- if(MSVC OR (NOT CMAKE_VERSION VERSION_GREATER 2.8.7))
- target_link_libraries(halacpi lib_hal_generic lib_hal_acpi)
- endif()
- target_link_libraries(halacpi libcntpr)
- add_importlibs(halacpi ntoskrnl)
- add_dependencies(halacpi psdk bugcodes asm)
- set_entrypoint(halacpi HalInitSystem@8)
- set_subsystem(halacpi native)
- set_image_base(halacpi 0x00010000)
- add_target_compile_definitions(halacpi CONFIG_ACPI)
- add_cd_file(TARGET halacpi DESTINATION reactos/system32 NO_CAB FOR all)
- if(MSVC)
- add_target_link_flags(halacpi "/ignore:4216 /ignore:4078")
- endif()
+ # The components
+ include(generic.cmake)
+ include(acpi.cmake)
+ include(apic.cmake)
- # mini_hal
- add_library(mini_hal ${MINI_HAL_SOURCE})
- add_target_compile_definitions(mini_hal _BLDR_ _MINIHAL_)
- add_dependencies(mini_hal psdk bugcodes asm)
+ if(ARCH STREQUAL "i386")
+ include(pcidata.cmake)
+ include(legacy.cmake)
+ include(up.cmake)
+ include(pic.cmake)
+ include(minihal.cmake)
- elseif(ARCH STREQUAL "amd64")
+ # hal
+ add_hal(hal SOURCES up/halup.rc COMPONENTS generic legacy up pic)
+ add_hal(halacpi SOURCES acpi/halacpi.rc COMPONENTS generic acpi up pic)
+ add_hal(halapic SOURCES acpi/halacpi.rc COMPONENTS generic legacy up apic)
+ add_hal(halaacpi SOURCES acpi/halacpi.rc COMPONENTS generic acpi up apic)
- spec2def(hal.dll ../hal.spec ADD_IMPORTLIB)
+ #add_hal(halmps SOURCES up/halup.rc COMPONENTS generic legacy smp pic)
+ #add_hal(halmacpi SOURCES acpi/halacpi.rc COMPONENTS generic acpi smp pic)
+ #add_hal(halmapic SOURCES acpi/halacpi.rc COMPONENTS generic legacy smp apic)
+ #add_hal(halmaacpi SOURCES acpi/halacpi.rc COMPONENTS generic acpi smp apic)
+
+ elseif(ARCH STREQUAL "amd64")
list(APPEND HAL_SOURCE
- ${HAL_GENERIC_SOURCE}
- ${HAL_ACPI_SOURCE}
- ${HAL_APIC_SOURCE}
generic/spinlock.c
amd64/x86bios.c
amd64/halinit.c
- amd64/processor.c
- ${CMAKE_CURRENT_BINARY_DIR}/hal.def)
-
- # hal
- add_library(hal SHARED ${HAL_SOURCE})
- add_pch(hal include/hal.h)
- add_dependencies(hal psdk bugcodes asm)
-
- set_entrypoint(hal HalInitSystem)
- set_subsystem(hal native)
- set_image_base(hal 0x00010000)
- add_importlibs(hal ntoskrnl)
- target_link_libraries(hal libcntpr)
- if(MSVC)
- add_target_link_flags(hal "/ignore:4216")
- endif()
+ amd64/processor.c)
- add_cd_file(TARGET hal DESTINATION reactos/system32 NO_CAB FOR all)
+ add_hal(hal SOURCES ${HAL_SOURCE} COMPONENTS generic acpi apic)
endif()
--- /dev/null
+
+ list(APPEND HAL_ACPI_SOURCE
+ acpi/halacpi.c
+ acpi/halpnpdd.c
+ acpi/busemul.c
+ legacy/bus/pcibus.c)
+
+ add_object_library(lib_hal_acpi ${HAL_ACPI_SOURCE})
+
+ #add_pch(lib_hal_acpi include/hal.h)
+
+ if(MSVC OR (NOT CMAKE_VERSION VERSION_GREATER 2.8.7))
+ target_link_libraries(lib_hal_acpi lib_hal_generic)
+ endif()
--- /dev/null
+
+ list(APPEND HAL_APIC_ASM_SOURCE
+ apic/apictrap.S
+ apic/tsccal.S)
+
+ list(APPEND HAL_APIC_SOURCE
+ apic/apic.c
+ apic/apictimer.c
+ apic/halinit_apic.c
+ apic/rtctimer.c
+ apic/tsc.c)
+
+ add_object_library(lib_hal_apic ${HAL_APIC_SOURCE} ${HAL_APIC_ASM_SOURCE})
+ add_dependencies(lib_hal_apic asm)
--- /dev/null
+
+ list(APPEND HAL_GENERIC_SOURCE
+ generic/beep.c
+ generic/cmos.c
+ generic/display.c
+ generic/dma.c
+ generic/drive.c
+ generic/halinit.c
+ generic/memory.c
+ generic/misc.c
+ generic/reboot.c
+ generic/sysinfo.c
+ generic/usage.c)
+
+ if(ARCH STREQUAL "i386")
+ list(APPEND HAL_GENERIC_SOURCE
+ generic/bios.c
+ generic/portio.c)
+
+ list(APPEND HAL_GENERIC_ASM_SOURCE
+ generic/v86.S)
+ endif()
+
+ add_asm_files(halacpi_asm ${HAL_PIC_ASM_SOURCE} generic/v86.S)
+ add_object_library(lib_hal_generic ${HAL_GENERIC_SOURCE} ${HAL_GENERIC_ASM_SOURCE})
+ add_dependencies(lib_hal_generic asm)
+ add_pch(lib_hal_generic include/hal.h)
--- /dev/null
+
+ list(APPEND HAL_LEGACY_SOURCE
+ legacy/bus/bushndlr.c
+ legacy/bus/cmosbus.c
+ legacy/bus/isabus.c
+ legacy/bus/pcibus.c
+ ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c
+ ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c
+ legacy/bus/sysbus.c
+ legacy/bussupp.c
+ legacy/halpnpdd.c
+ legacy/halpcat.c)
+
+ add_object_library(lib_hal_legacy ${HAL_LEGACY_SOURCE})
+
+ #add_pch(lib_hal_legacy include/hal.h)
+
+ if(MSVC OR (NOT CMAKE_VERSION VERSION_GREATER 2.8.7))
+ target_link_libraries(lib_hal_legacy lib_hal_generic)
+ endif()
--- /dev/null
+
+
+ list(APPEND MINI_HAL_SOURCE
+ generic/portio.c
+ generic/systimer.S
+ legacy/bus/bushndlr.c
+ legacy/bus/cmosbus.c
+ legacy/bus/isabus.c
+ legacy/bus/pcibus.c
+ legacy/bus/sysbus.c
+ legacy/bussupp.c
+ generic/beep.c
+ generic/bios.c
+ generic/cmos.c
+ generic/dma.c
+ generic/display.c
+ generic/drive.c
+ generic/misc.c
+ generic/profil.c
+ generic/reboot.c
+ generic/spinlock.c
+ generic/sysinfo.c
+ generic/timer.c
+ generic/usage.c
+ up/halinit_mini.c
+ up/pic.c
+ up/processor.c)
+
+ # mini_hal
+ add_library(mini_hal ${MINI_HAL_SOURCE})
+ add_target_compile_definitions(mini_hal _BLDR_ _MINIHAL_)
+ add_dependencies(mini_hal psdk bugcodes asm)
--- /dev/null
+ #####################################
+ # Generate the pcidata source files in the x86 build
+ #
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.h
+ COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_classes.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.h ClassTable INIT_FUNCTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
+ DEPENDS native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_classes.ids)
+
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.h
+ COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_vendors.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.h VendorTable INIT_FUNCTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
+ DEPENDS native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_vendors.ids)
+ #####################################
--- /dev/null
+
+ list(APPEND HAL_PIC_ASM_SOURCE
+ generic/systimer.S
+ generic/trap.S)
+
+ list(APPEND HAL_PIC_SOURCE
+ generic/profil.c
+ generic/timer.c
+ up/halinit_up.c
+ up/pic.c)
+
+ add_object_library(lib_hal_pic ${HAL_PIC_SOURCE} ${HAL_PIC_ASM_SOURCE})
+ add_dependencies(lib_hal_pic asm)
--- /dev/null
+
+ list(APPEND HAL_UP_SOURCE
+ generic/spinlock.c
+ up/processor.c)
+
+ add_object_library(lib_hal_up ${HAL_UP_SOURCE})
{ /* 32 bit 64 bit */
/* this must be the first field */
PVOID Parameter; /* 0x00 0x00 */
- struct _EXCEPTION_REGISTRATION_RECORD * ExceptionList; /* 0x04 0x08 */
+ PEXCEPTION_REGISTRATION_RECORD ExceptionList; /* 0x04 0x08 */
PVOID StackBase; /* 0x08 0x10 */
PVOID StackLimit; /* 0x0C 0x18 */
PVOID DeallocationStack; /* 0x10 0x20 */
CONTEXT Context; /* 0x14 0x28 */
ULONG GuaranteedStackBytes; /* 0x2E0 */
PVOID FlsData; /* 0x2E4 */
- PVOID ActivationContextStack; /* 0x2E8 */
+ PVOID /* PACTIVATION_CONTEXT_STACK */ ActivationContextStack; /* 0x2E8 */
} FIBER, *PFIBER;
typedef struct
#ifndef _MBSTRING_DEFINED
#define _MBSTRING_DEFINED
- _CRTIMP unsigned char *__cdecl _mbsdup(const unsigned char *_Str);
- _CRTIMP unsigned int __cdecl _mbbtombc(unsigned int _Ch);
- _CRTIMP unsigned int __cdecl _mbbtombc_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _mbbtype(unsigned char _Ch,int _CType);
- _CRTIMP int __cdecl _mbbtype_l(unsigned char _Ch,int _CType,_locale_t _Locale);
- _CRTIMP unsigned int __cdecl _mbctombb(unsigned int _Ch);
- _CRTIMP unsigned int __cdecl _mbctombb_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsbtype(const unsigned char *_Str,size_t _Pos);
- _CRTIMP int __cdecl _mbsbtype_l(const unsigned char *_Str,size_t _Pos,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbscat(unsigned char *_Dest,const unsigned char *_Source);
- _CRTIMP unsigned char *_mbscat_l(unsigned char *_Dest,const unsigned char *_Source,_locale_t _Locale);
- _CRTIMP _CONST_RETURN unsigned char *__cdecl _mbschr(const unsigned char *_Str,unsigned int _Ch);
- _CRTIMP _CONST_RETURN unsigned char *__cdecl _mbschr_l(const unsigned char *_Str,unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _mbscmp(const unsigned char *_Str1,const unsigned char *_Str2);
- _CRTIMP int __cdecl _mbscmp_l(const unsigned char *_Str1,const unsigned char *_Str2,_locale_t _Locale);
- _CRTIMP int __cdecl _mbscoll(const unsigned char *_Str1,const unsigned char *_Str2);
- _CRTIMP int __cdecl _mbscoll_l(const unsigned char *_Str1,const unsigned char *_Str2,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbscpy(unsigned char *_Dest,const unsigned char *_Source);
- _CRTIMP unsigned char *_mbscpy_l(unsigned char *_Dest,const unsigned char *_Source,_locale_t _Locale);
- _CRTIMP size_t __cdecl _mbscspn(const unsigned char *_Str,const unsigned char *_Control);
- _CRTIMP size_t __cdecl _mbscspn_l(const unsigned char *_Str,const unsigned char *_Control,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsdec(const unsigned char *_Start,const unsigned char *_Pos);
- _CRTIMP unsigned char *__cdecl _mbsdec_l(const unsigned char *_Start,const unsigned char *_Pos,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsicmp(const unsigned char *_Str1,const unsigned char *_Str2);
- _CRTIMP int __cdecl _mbsicmp_l(const unsigned char *_Str1,const unsigned char *_Str2,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsicoll(const unsigned char *_Str1,const unsigned char *_Str2);
- _CRTIMP int __cdecl _mbsicoll_l(const unsigned char *_Str1,const unsigned char *_Str2,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsinc(const unsigned char *_Ptr);
- _CRTIMP unsigned char *__cdecl _mbsinc_l(const unsigned char *_Ptr,_locale_t _Locale);
- _CRTIMP size_t __cdecl _mbslen(const unsigned char *_Str);
- _CRTIMP size_t __cdecl _mbslen_l(const unsigned char *_Str,_locale_t _Locale);
- _CRTIMP size_t __cdecl _mbsnlen(const unsigned char *_Str,size_t _MaxCount);
- _CRTIMP size_t __cdecl _mbsnlen_l(const unsigned char *_Str,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbslwr(unsigned char *_String);
- _CRTIMP unsigned char *_mbslwr_l(unsigned char *_String,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsnbcat(unsigned char *_Dest,const unsigned char *_Source,size_t _Count);
- _CRTIMP unsigned char *__cdecl _mbsnbcat_l(unsigned char *_Dest,const unsigned char *_Source,size_t _Count,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsnbcmp(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount);
- _CRTIMP int __cdecl _mbsnbcmp_l(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsnbcoll(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount);
- _CRTIMP int __cdecl _mbsnbcoll_l(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP size_t __cdecl _mbsnbcnt(const unsigned char *_Str,size_t _MaxCount);
- _CRTIMP size_t __cdecl _mbsnbcnt_l(const unsigned char *_Str,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsnbcpy(unsigned char *_Dest,const unsigned char *_Source,size_t _Count);
- _CRTIMP int __cdecl _mbsnbcpy_s(unsigned char* dst, size_t size, const unsigned char* src, size_t n);
- _CRTIMP unsigned char *__cdecl _mbsnbcpy_l(unsigned char *_Dest,const unsigned char *_Source,size_t _Count,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsnbicmp(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount);
- _CRTIMP int __cdecl _mbsnbicmp_l(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsnbicoll(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount);
- _CRTIMP int __cdecl _mbsnbicoll_l(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsnbset(unsigned char *_Str,unsigned int _Ch,size_t _MaxCount);
- _CRTIMP unsigned char *__cdecl _mbsnbset_l(unsigned char *_Str,unsigned int _Ch,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsncat(unsigned char *_Dest,const unsigned char *_Source,size_t _Count);
- _CRTIMP unsigned char *__cdecl _mbsncat_l(unsigned char *_Dest,const unsigned char *_Source,size_t _Count,_locale_t _Locale);
- _CRTIMP size_t __cdecl _mbsnccnt(const unsigned char *_Str,size_t _MaxCount);
- _CRTIMP size_t __cdecl _mbsnccnt_l(const unsigned char *_Str,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsncmp(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount);
- _CRTIMP int __cdecl _mbsncmp_l(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsncoll(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount);
- _CRTIMP int __cdecl _mbsncoll_l(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsncpy(unsigned char *_Dest,const unsigned char *_Source,size_t _Count);
- _CRTIMP unsigned char *__cdecl _mbsncpy_l(unsigned char *_Dest,const unsigned char *_Source,size_t _Count,_locale_t _Locale);
- _CRTIMP unsigned int __cdecl _mbsnextc (const unsigned char *_Str);
- _CRTIMP unsigned int __cdecl _mbsnextc_l(const unsigned char *_Str,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsnicmp(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount);
- _CRTIMP int __cdecl _mbsnicmp_l(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP int __cdecl _mbsnicoll(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount);
- _CRTIMP int __cdecl _mbsnicoll_l(const unsigned char *_Str1,const unsigned char *_Str2,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsninc(const unsigned char *_Str,size_t _Count);
- _CRTIMP unsigned char *__cdecl _mbsninc_l(const unsigned char *_Str,size_t _Count,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsnset(unsigned char *_Dst,unsigned int _Val,size_t _MaxCount);
- _CRTIMP unsigned char *__cdecl _mbsnset_l(unsigned char *_Dst,unsigned int _Val,size_t _MaxCount,_locale_t _Locale);
- _CRTIMP _CONST_RETURN unsigned char *__cdecl _mbspbrk(const unsigned char *_Str,const unsigned char *_Control);
- _CRTIMP _CONST_RETURN unsigned char *__cdecl _mbspbrk_l(const unsigned char *_Str,const unsigned char *_Control,_locale_t _Locale);
- _CRTIMP _CONST_RETURN unsigned char *__cdecl _mbsrchr(const unsigned char *_Str,unsigned int _Ch);
- _CRTIMP _CONST_RETURN unsigned char *__cdecl _mbsrchr_l(const unsigned char *_Str,unsigned int _Ch,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsrev(unsigned char *_Str);
- _CRTIMP unsigned char *__cdecl _mbsrev_l(unsigned char *_Str,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsset(unsigned char *_Str,unsigned int _Val);
- _CRTIMP unsigned char *__cdecl _mbsset_l(unsigned char *_Str,unsigned int _Val,_locale_t _Locale);
- _CRTIMP size_t __cdecl _mbsspn(const unsigned char *_Str,const unsigned char *_Control);
- _CRTIMP size_t __cdecl _mbsspn_l(const unsigned char *_Str,const unsigned char *_Control,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsspnp(const unsigned char *_Str1,const unsigned char *_Str2);
- _CRTIMP unsigned char *__cdecl _mbsspnp_l(const unsigned char *_Str1,const unsigned char *_Str2,_locale_t _Locale);
- _CRTIMP _CONST_RETURN unsigned char *__cdecl _mbsstr(const unsigned char *_Str,const unsigned char *_Substr);
- _CRTIMP _CONST_RETURN unsigned char *__cdecl _mbsstr_l(const unsigned char *_Str,const unsigned char *_Substr,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbstok(unsigned char *_Str,const unsigned char *_Delim);
- _CRTIMP unsigned char *__cdecl _mbstok_l(unsigned char *_Str,const unsigned char *_Delim,_locale_t _Locale);
- _CRTIMP unsigned char *__cdecl _mbsupr(unsigned char *_String);
- _CRTIMP unsigned char *_mbsupr_l(unsigned char *_String,_locale_t _Locale);
- _CRTIMP size_t __cdecl _mbclen(const unsigned char *_Str);
- _CRTIMP size_t __cdecl _mbclen_l(const unsigned char *_Str,_locale_t _Locale);
- _CRTIMP void __cdecl _mbccpy(unsigned char *_Dst,const unsigned char *_Src);
- _CRTIMP void __cdecl _mbccpy_l(unsigned char *_Dst,const unsigned char *_Src,_locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsdup(
+ _In_z_ const unsigned char *_Str);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbbtombc(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbbtombc_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbbtype(
+ _In_ unsigned char _Ch,
+ _In_ int _CType);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbbtype_l(
+ _In_ unsigned char _Ch,
+ _In_ int _CType,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctombb(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctombb_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ int
+ __cdecl
+ _mbsbtype(
+ _In_reads_bytes_(_Pos) _Pre_z_ const unsigned char *_Str,
+ _In_ size_t _Pos);
+
+ _CRTIMP
+ int
+ __cdecl
+ _mbsbtype_l(
+ _In_reads_bytes_(_Pos) _Pre_z_ const unsigned char *_Str,
+ _In_ size_t _Pos,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbscat(
+ _Inout_updates_z_(_String_length_(_Curr_) + _String_length_(_Source) + 1) unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source);
+
+ _CRTIMP
+ unsigned char*
+ _mbscat_l(
+ _Inout_z_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ _CONST_RETURN
+ unsigned char*
+ __cdecl
+ _mbschr(
+ _In_z_ const unsigned char *_Str,
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ _CONST_RETURN
+ unsigned char*
+ __cdecl
+ _mbschr_l(
+ _In_z_ const unsigned char *_Str,
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbscmp(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbscmp_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbscoll(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbscoll_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbscpy(
+ _Out_writes_z_(_String_length_(_Source) + 1) unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source);
+
+ _CRTIMP
+ unsigned char*
+ _mbscpy_l(
+ _Pre_notnull_ _Post_z_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbscspn(
+ _In_z_ const unsigned char *_Str,
+ _In_z_ const unsigned char *_Control);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbscspn_l(
+ _In_z_ const unsigned char *_Str,
+ _In_z_ const unsigned char *_Control,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsdec(
+ _In_reads_z_(_Pos-_Start + 1) const unsigned char *_Start,
+ _In_z_ const unsigned char *_Pos);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsdec_l(
+ _In_reads_z_(_Pos-_Start + 1) const unsigned char *_Start,
+ _In_z_ const unsigned char *_Pos,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsicmp(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsicmp_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsicoll(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsicoll_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsinc(
+ _In_z_ const unsigned char *_Ptr);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsinc_l(
+ _In_z_ const unsigned char *_Ptr,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbslen(
+ _In_z_ const unsigned char *_Str);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbslen_l(
+ _In_z_ const unsigned char *_Str,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbsnlen(
+ _In_z_ const unsigned char *_Str,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbsnlen_l(
+ _In_z_ const unsigned char *_Str,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbslwr(
+ _Inout_z_ unsigned char *_String);
+
+ _CRTIMP
+ unsigned char*
+ _mbslwr_l(
+ _Inout_z_ unsigned char *_String,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsnbcat(
+ _Inout_z_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_ size_t _Count);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsnbcat_l(
+ _Inout_z_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_ size_t _Count,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnbcmp(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnbcmp_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnbcoll(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnbcoll_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbsnbcnt(
+ _In_reads_bytes_(_MaxCount) _Pre_z_ const unsigned char *_Str,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbsnbcnt_l(
+ _In_reads_bytes_(_MaxCount) _Pre_z_ const unsigned char *_Str,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsnbcpy(
+ _Out_writes_(_Count) _Post_maybez_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_ size_t _Count);
+
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnbcpy_s(
+ _Out_writes_z_(size) unsigned char* dst,
+ _In_ size_t size,
+ _In_z_ const unsigned char* src,
+ _In_ size_t n);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsnbcpy_l(
+ _Out_writes_(_Count) _Post_maybez_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_ size_t _Count,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnbicmp(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnbicmp_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnbicoll(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnbicoll_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsnbset(
+ _Inout_updates_z_(_MaxCount) unsigned char *_Str,
+ _In_ unsigned int _Ch,
+ _In_ size_t _MaxCount);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsnbset_l(
+ _Inout_updates_z_(_MaxCount) unsigned char *_Str,
+ _In_ unsigned int _Ch,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsncat(
+ _Inout_z_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_ size_t _Count);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsncat_l(
+ _Inout_z_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_ size_t _Count,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbsnccnt(
+ _In_reads_bytes_(_MaxCount) _Pre_z_ const unsigned char *_Str,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbsnccnt_l(
+ _In_reads_bytes_(_MaxCount) _Pre_z_ const unsigned char *_Str,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsncmp(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsncmp_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsncoll(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsncoll_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsncpy(
+ _Pre_notnull_ _Out_writes_(2 * _Count) _Post_maybez_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_ size_t _Count);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsncpy_l(
+ _Out_writes_(_Count) _Post_maybez_ unsigned char *_Dest,
+ _In_z_ const unsigned char *_Source,
+ _In_ size_t _Count,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbsnextc(
+ _In_z_ const unsigned char *_Str);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbsnextc_l(
+ _In_z_ const unsigned char *_Str,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnicmp(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnicmp_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnicoll(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _mbsnicoll_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsninc(
+ _In_reads_bytes_(_Count) _Pre_z_ const unsigned char *_Str,
+ _In_ size_t _Count);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsninc_l(
+ _In_reads_bytes_(_Count) _Pre_z_ const unsigned char *_Str,
+ _In_ size_t _Count,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsnset(
+ _Inout_updates_z_(_MaxCount) unsigned char *_Dst,
+ _In_ unsigned int _Val,
+ _In_ size_t _MaxCount);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsnset_l(
+ _Inout_updates_z_(_MaxCount) unsigned char *_Dst,
+ _In_ unsigned int _Val,
+ _In_ size_t _MaxCount,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ _CONST_RETURN
+ unsigned char*
+ __cdecl
+ _mbspbrk(
+ _In_z_ const unsigned char *_Str,
+ _In_z_ const unsigned char *_Control);
+
+ _Check_return_
+ _CRTIMP
+ _CONST_RETURN
+ unsigned char*
+ __cdecl
+ _mbspbrk_l(
+ _In_z_ const unsigned char *_Str,
+ _In_z_ const unsigned char *_Control,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ _CONST_RETURN
+ unsigned char*
+ __cdecl
+ _mbsrchr(
+ _In_z_ const unsigned char *_Str,
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ _CONST_RETURN
+ unsigned char*
+ __cdecl
+ _mbsrchr_l(
+ _In_z_ const unsigned char *_Str,
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsrev(
+ _Inout_z_ unsigned char *_Str);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsrev_l(
+ _Inout_z_ unsigned char *_Str,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsset(
+ _Inout_z_ unsigned char *_Str,
+ _In_ unsigned int _Val);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsset_l(
+ _Inout_z_ unsigned char *_Str,
+ _In_ unsigned int _Val,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbsspn(
+ _In_z_ const unsigned char *_Str,
+ _In_z_ const unsigned char *_Control);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbsspn_l(
+ _In_z_ const unsigned char *_Str,
+ _In_z_ const unsigned char *_Control,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsspnp(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsspnp_l(
+ _In_z_ const unsigned char *_Str1,
+ _In_z_ const unsigned char *_Str2,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ _CONST_RETURN
+ unsigned char*
+ __cdecl
+ _mbsstr(
+ _In_z_ const unsigned char *_Str,
+ _In_z_ const unsigned char *_Substr);
+
+ _Check_return_
+ _CRTIMP
+ _CONST_RETURN
+ unsigned char*
+ __cdecl
+ _mbsstr_l(
+ _In_z_ const unsigned char *_Str,
+ _In_z_ const unsigned char *_Substr,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbstok(
+ _Inout_opt_z_ unsigned char *_Str,
+ _In_z_ const unsigned char *_Delim);
+
+ _Check_return_
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbstok_l(
+ _Inout_opt_z_ unsigned char *_Str,
+ _In_z_ const unsigned char *_Delim,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ unsigned char*
+ __cdecl
+ _mbsupr(
+ _Inout_z_ unsigned char *_String);
+
+ _CRTIMP
+ unsigned char*
+ _mbsupr_l(
+ _Inout_z_ unsigned char *_String,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbclen(
+ _In_z_ const unsigned char *_Str);
+
+ _Check_return_
+ _CRTIMP
+ size_t
+ __cdecl
+ _mbclen_l(
+ _In_z_ const unsigned char *_Str,
+ _In_opt_ _locale_t _Locale);
+
+ _CRTIMP
+ void
+ __cdecl
+ _mbccpy(
+ _Out_writes_bytes_(2) unsigned char *_Dst,
+ _In_z_ const unsigned char *_Src);
+
+ _CRTIMP
+ void
+ __cdecl
+ _mbccpy_l(
+ _Out_writes_bytes_(2) unsigned char *_Dst,
+ _In_z_ const unsigned char *_Src,
+ _In_opt_ _locale_t _Locale);
+
#define _mbccmp(_cpc1,_cpc2) _mbsncmp((_cpc1),(_cpc2),1)
#ifdef __cplusplus
#endif
#endif
- _CRTIMP int __cdecl _ismbcalnum(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcalnum_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcalpha(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcalpha_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcdigit(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcdigit_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcgraph(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcgraph_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbclegal(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbclegal_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbclower(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbclower_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcprint(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcprint_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcpunct(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcpunct_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcspace(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcspace_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcupper(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcupper_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP unsigned int __cdecl _mbctolower(unsigned int _Ch);
- _CRTIMP unsigned int __cdecl _mbctolower_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP unsigned int __cdecl _mbctoupper(unsigned int _Ch);
- _CRTIMP unsigned int __cdecl _mbctoupper_l(unsigned int _Ch,_locale_t _Locale);
- #endif
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcalnum(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcalnum_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcalpha(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcalpha_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcdigit(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcdigit_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcgraph(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcgraph_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbclegal(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbclegal_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbclower(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbclower_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcprint(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcprint_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcpunct(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcpunct_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcspace(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcspace_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcupper(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ __cdecl _ismbcupper_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctolower(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctolower_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctoupper(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctoupper_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ #endif /* _MBSTRING_DEFINED */
#ifndef _MBLEADTRAIL_DEFINED
#define _MBLEADTRAIL_DEFINED
- _CRTIMP int __cdecl _ismbblead(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbblead_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbbtrail(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbbtrail_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbslead(const unsigned char *_Str,const unsigned char *_Pos);
- _CRTIMP int __cdecl _ismbslead_l(const unsigned char *_Str,const unsigned char *_Pos,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbstrail(const unsigned char *_Str,const unsigned char *_Pos);
- _CRTIMP int __cdecl _ismbstrail_l(const unsigned char *_Str,const unsigned char *_Pos,_locale_t _Locale);
- #endif
- _CRTIMP int __cdecl _ismbchira(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbchira_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbckata(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbckata_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcsymbol(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcsymbol_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcl0(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcl0_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcl1(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcl1_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP int __cdecl _ismbcl2(unsigned int _Ch);
- _CRTIMP int __cdecl _ismbcl2_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP unsigned int __cdecl _mbcjistojms(unsigned int _Ch);
- _CRTIMP unsigned int __cdecl _mbcjistojms_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP unsigned int __cdecl _mbcjmstojis(unsigned int _Ch);
- _CRTIMP unsigned int __cdecl _mbcjmstojis_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP unsigned int __cdecl _mbctohira(unsigned int _Ch);
- _CRTIMP unsigned int __cdecl _mbctohira_l(unsigned int _Ch,_locale_t _Locale);
- _CRTIMP unsigned int __cdecl _mbctokata(unsigned int _Ch);
- _CRTIMP unsigned int __cdecl _mbctokata_l(unsigned int _Ch,_locale_t _Locale);
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbblead(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbblead_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbbtrail(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbbtrail_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbslead(
+ _In_reads_z_(_Pos - _Str + 1) const unsigned char *_Str,
+ _In_z_ const unsigned char *_Pos);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbslead_l(
+ _In_reads_z_(_Pos - _Str + 1) const unsigned char *_Str,
+ _In_z_ const unsigned char *_Pos,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbstrail(
+ _In_reads_z_(_Pos - _Str + 1) const unsigned char *_Str,
+ _In_z_ const unsigned char *_Pos);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbstrail_l(
+ _In_reads_z_(_Pos - _Str + 1) const unsigned char *_Str,
+ _In_z_ const unsigned char *_Pos,
+ _In_opt_ _locale_t _Locale);
+
+ #endif /* _MBLEADTRAIL_DEFINED */
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbchira(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbchira_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbckata(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbckata_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcsymbol(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcsymbol_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcl0(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcl0_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcl1(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcl1_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcl2(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ int
+ __cdecl
+ _ismbcl2_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbcjistojms(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbcjistojms_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbcjmstojis(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbcjmstojis_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctohira(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctohira_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctokata(
+ _In_ unsigned int _Ch);
+
+ _Check_return_
+ _CRTIMP
+ unsigned int
+ __cdecl
+ _mbctokata_l(
+ _In_ unsigned int _Ch,
+ _In_opt_ _locale_t _Locale);
#ifdef __cplusplus
}
#include <sec_api/mbstring_s.h>
- #endif
+ #endif /* _INC_MBSTRING */
#pragma intrinsic(__movsd)
#endif
#ifdef _M_AMD64
+ void __stosq(unsigned __int64 * Dest, unsigned __int64 Data, size_t Count);
+ #pragma intrinsic(__stosq)
void __movsq(unsigned __int64 * Destination, unsigned __int64 const * Source, size_t Count);
#pragma intrinsic(__movsq)
#endif
#define _S_IWRITE 0x0080
#define _S_IEXEC 0x0040
- _CRTIMP int __cdecl _fstat(int _FileDes,struct _stat *_Stat);
- _CRTIMP int __cdecl _fstat32(int _FileDes,struct _stat32 *_Stat);
- _CRTIMP int __cdecl _stat(const char *_Name,struct _stat *_Stat);
- _CRTIMP int __cdecl _stat32(const char *_Name,struct _stat32 *_Stat);
+ _CRTIMP
+ int
+ __cdecl
+ _fstat(
+ _In_ int _FileDes,
+ _Out_ struct _stat *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _fstat32(
+ _In_ int _FileDes,
+ _Out_ struct _stat32 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _stat(
+ _In_z_ const char *_Name,
+ _Out_ struct _stat *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _stat32(
+ _In_z_ const char *_Name,
+ _Out_ struct _stat32 *_Stat);
#if _INTEGRAL_MAX_BITS >= 64
- _CRTIMP int __cdecl _fstat64(int _FileDes,struct _stat64 *_Stat);
- _CRTIMP int __cdecl _fstat32i64(int _FileDes,struct _stat32i64 *_Stat);
- _CRTIMP int __cdecl _fstat64i32(int _FileDes,struct _stat64i32 *_Stat);
- _CRTIMP int __cdecl _stat64(const char *_Name,struct _stat64 *_Stat);
- _CRTIMP int __cdecl _stat32i64(const char *_Name,struct _stat32i64 *_Stat);
- _CRTIMP int __cdecl _stat64i32(const char *_Name,struct _stat64i32 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _fstat64(
+ _In_ int _FileDes,
+ _Out_ struct _stat64 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _fstat32i64(
+ _In_ int _FileDes,
+ _Out_ struct _stat32i64 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _fstat64i32(
+ _In_ int _FileDes,
+ _Out_ struct _stat64i32 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _stat64(
+ _In_z_ const char *_Name,
+ _Out_ struct _stat64 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _stat32i64(
+ _In_z_ const char *_Name,
+ _Out_ struct _stat32i64 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _stat64i32(
+ _In_z_ const char *_Name,
+ _Out_ struct _stat64i32 *_Stat);
+
#endif /* _INTEGRAL_MAX_BITS >= 64 */
#ifndef _WSTAT_DEFINED
#define _WSTAT_DEFINED
- _CRTIMP int __cdecl _wstat(const wchar_t *_Name,struct _stat *_Stat);
- _CRTIMP int __cdecl _wstat32(const wchar_t *_Name,struct _stat32 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _wstat(
+ _In_z_ const wchar_t *_Name,
+ _Out_ struct _stat *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _wstat32(
+ _In_z_ const wchar_t *_Name,
+ _Out_ struct _stat32 *_Stat);
+
#if _INTEGRAL_MAX_BITS >= 64
- _CRTIMP int __cdecl _wstat32i64(const wchar_t *_Name,struct _stat32i64 *_Stat);
- _CRTIMP int __cdecl _wstat64i32(const wchar_t *_Name,struct _stat64i32 *_Stat);
- _CRTIMP int __cdecl _wstat64(const wchar_t *_Name,struct _stat64 *_Stat);
- #endif
- #endif
+ _CRTIMP
+ int
+ __cdecl
+ _wstat32i64(
+ _In_z_ const wchar_t *_Name,
+ _Out_ struct _stat32i64 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _wstat64i32(
+ _In_z_ const wchar_t *_Name,
+ _Out_ struct _stat64i32 *_Stat);
+
+ _CRTIMP
+ int
+ __cdecl
+ _wstat64(
+ _In_z_ const wchar_t *_Name,
+ _Out_ struct _stat64 *_Stat);
+
+ #endif /* _INTEGRAL_MAX_BITS >= 64 */
+
+ #endif /* _WSTAT_DEFINED */
/** Compatibility definitons *************************************************/
#endif /* !_TIMEB_DEFINED */
- _CRTIMP void __cdecl _ftime(struct _timeb *_Time);
- _CRT_INSECURE_DEPRECATE(_ftime32_s) _CRTIMP void __cdecl _ftime32(struct __timeb32 *_Time);
- _CRTIMP errno_t __cdecl _ftime32_s(struct __timeb32 *_Time);
+ _CRTIMP
+ void
+ __cdecl
+ _ftime(
+ _Out_ struct _timeb *_Time);
+
+ _CRT_INSECURE_DEPRECATE(_ftime32_s)
+ _CRTIMP
+ void
+ __cdecl
+ _ftime32(
+ _Out_ struct __timeb32 *_Time);
+
+ _CRTIMP
+ errno_t
+ __cdecl
+ _ftime32_s(
+ _Out_ struct __timeb32 *_Time);
+
#if _INTEGRAL_MAX_BITS >= 64
- _CRT_INSECURE_DEPRECATE(_ftime64_s) _CRTIMP void __cdecl _ftime64(struct __timeb64 *_Time);
- _CRTIMP errno_t __cdecl _ftime64_s(struct __timeb64 *_Time);
- #endif
+
+ _CRT_INSECURE_DEPRECATE(_ftime64_s)
+ _CRTIMP
+ void
+ __cdecl
+ _ftime64(
+ _Out_ struct __timeb64 *_Time);
+
+ _CRTIMP
+ errno_t
+ __cdecl
+ _ftime64_s(
+ _Out_ struct __timeb64 *_Time);
+
+ #endif /* _INTEGRAL_MAX_BITS >= 64 */
#ifndef NO_OLDNAMES
#if !defined (RC_INVOKED)
#define USER_ALL_OWFPASSWORD 0x20000000
#define USER_ALL_UNDEFINED_MASK 0xC0000000
+ #define USER_ALL_READ_GENERAL_MASK 0x0000003F
+ #define USER_ALL_READ_LOGON_MASK 0x0003FFC0
+ #define USER_ALL_READ_ACCOUNT_MASK 0x003C0000
+ #define USER_ALL_READ_PREFERENCES_MASK 0x00C00000
+ #define USER_ALL_READ_TRUSTED_MASK 0x1F000000
+ #define USER_ALL_READ_CANT_MASK 0xC0000000
+
+ #define USER_ALL_WRITE_ACCOUNT_MASK 0x003827DB
+ #define USER_ALL_WRITE_PREFERENCES_MASK 0x00C00020
+ #define USER_ALL_WRITE_FORCE_PASSWORD_CHANGE_MASK 0x0B000000
+ #define USER_ALL_WRITE_TRUSTED_MASK 0x1404D800
+ #define USER_ALL_WRITE_CANT_MASK 0xC0030004
+
/* Values used by USER_PWD_CHANGE_FAILURE_INFORMATION.ExtendedFailureReason */
#define SAM_PWD_CHANGE_NO_ERROR 0
#define SAM_PWD_CHANGE_PASSWORD_TOO_SHORT 1
typedef wchar_t *STRSAFE_LPWSTR;
typedef const wchar_t *STRSAFE_LPCWSTR;
+ typedef _Null_terminated_ char *NTSTRSAFE_PSTR;
+ typedef _Null_terminated_ const char *NTSTRSAFE_PCSTR;
+ typedef _Null_terminated_ wchar_t *NTSTRSAFE_PWSTR;
+ typedef _Null_terminated_ const wchar_t *NTSTRSAFE_PCWSTR;
+
typedef ULONG STRSAFE_DWORD;
NTSTRSAFEAPI RtlStringCopyWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc);
NTSTRSAFEAPI RtlStringVPrintfWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList);
NTSTRSAFEAPI RtlStringVPrintfExWorkerA(STRSAFE_LPSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList);
NTSTRSAFEAPI RtlStringVPrintfExWorkerW(STRSAFE_LPWSTR pszDest,size_t cchDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList);
- NTSTRSAFEAPI RtlStringLengthWorkerA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength);
- NTSTRSAFEAPI RtlStringLengthWorkerW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength);
-
- NTSTRSAFEAPI RtlStringCchCopyA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc);
- NTSTRSAFEAPI RtlStringCchCopyW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc);
-
- NTSTRSAFEAPI RtlStringCchCopyA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc)
+ NTSTRSAFEAPI
+ RtlStringLengthWorkerA(
+ _In_reads_or_z_(cchMax) STRSAFE_LPCSTR psz,
+ _In_ _In_range_(<=, NTSTRSAFE_MAX_CCH) size_t cchMax,
+ _Out_opt_ _Deref_out_range_(<, cchMax) size_t *pcchLength);
+
+ NTSTRSAFEAPI
+ RtlStringLengthWorkerW(
+ _In_reads_or_z_(cchMax) STRSAFE_LPCWSTR psz,
+ _In_ _In_range_(<=, NTSTRSAFE_MAX_CCH) size_t cchMax,
+ _Out_opt_ _Deref_out_range_(<, cchMax) size_t *pcchLength);
+
+ NTSTRSAFEAPI
+ RtlStringCchCopyA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc);
+
+ NTSTRSAFEAPI
+ RtlStringCchCopyW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc);
+
+ NTSTRSAFEAPI
+ RtlStringCchCopyA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc)
{
return (cchDest > NTSTRSAFE_MAX_CCH ? STATUS_INVALID_PARAMETER : RtlStringCopyWorkerA(pszDest,cchDest,pszSrc));
}
- NTSTRSAFEAPI RtlStringCchCopyW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc)
+ NTSTRSAFEAPI
+ RtlStringCchCopyW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCopyWorkerW(pszDest,cchDest,pszSrc);
}
+ NTSTRSAFEAPI
+ RtlStringCbCopyA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc);
- NTSTRSAFEAPI RtlStringCbCopyA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc);
- NTSTRSAFEAPI RtlStringCbCopyW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc);
-
+ NTSTRSAFEAPI
+ RtlStringCbCopyW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc);
- NTSTRSAFEAPI RtlStringCbCopyA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc)
+ NTSTRSAFEAPI
+ RtlStringCbCopyA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc)
{
if (cbDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCopyWorkerA(pszDest,cbDest,pszSrc);
}
- NTSTRSAFEAPI RtlStringCbCopyW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc)
+ NTSTRSAFEAPI
+ RtlStringCbCopyW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc)
{
size_t cchDest = cbDest / sizeof(wchar_t);
if (cchDest > NTSTRSAFE_MAX_CCH)
return RtlStringCopyWorkerW(pszDest,cchDest,pszSrc);
}
-
- NTSTRSAFEAPI RtlStringCchCopyExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
- NTSTRSAFEAPI RtlStringCchCopyExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
-
-
- NTSTRSAFEAPI RtlStringCchCopyExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCchCopyExA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCchCopyExW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCchCopyExA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCopyExWorkerA(pszDest,cchDest,cchDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
}
- NTSTRSAFEAPI RtlStringCchCopyExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCchCopyExW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
size_t cbDest;
if (cchDest > NTSTRSAFE_MAX_CCH)
return RtlStringCopyExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
}
-
- NTSTRSAFEAPI RtlStringCbCopyExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
- NTSTRSAFEAPI RtlStringCbCopyExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
-
-
- NTSTRSAFEAPI RtlStringCbCopyExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCbCopyExA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) STRSAFE_LPSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCbCopyExW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCbCopyExA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) STRSAFE_LPSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
NTSTATUS Status;
size_t cchRemaining = 0;
return Status;
}
- NTSTRSAFEAPI RtlStringCbCopyExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCbCopyExW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
NTSTATUS Status;
size_t cchDest = cbDest / sizeof(wchar_t);
return Status;
}
+ NTSTRSAFEAPI
+ RtlStringCchCopyNA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToCopy) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cchToCopy);
- NTSTRSAFEAPI RtlStringCchCopyNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy);
- NTSTRSAFEAPI RtlStringCchCopyNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy);
+ NTSTRSAFEAPI
+ RtlStringCchCopyNW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToCopy) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cchToCopy);
- NTSTRSAFEAPI RtlStringCchCopyNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy)
+ NTSTRSAFEAPI
+ RtlStringCchCopyNA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToCopy) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cchToCopy)
{
if (cchDest > NTSTRSAFE_MAX_CCH || cchToCopy > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCopyNWorkerA(pszDest,cchDest,pszSrc,cchToCopy);
}
- NTSTRSAFEAPI RtlStringCchCopyNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy)
+ NTSTRSAFEAPI
+ RtlStringCchCopyNW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToCopy) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cchToCopy)
{
if (cchDest > NTSTRSAFE_MAX_CCH || cchToCopy > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy);
}
+ NTSTRSAFEAPI
+ RtlStringCbCopyNA(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToCopy) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cbToCopy);
- NTSTRSAFEAPI RtlStringCbCopyNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy);
- NTSTRSAFEAPI RtlStringCbCopyNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy);
+ NTSTRSAFEAPI
+ RtlStringCbCopyNW(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToCopy) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cbToCopy);
-
- NTSTRSAFEAPI RtlStringCbCopyNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy)
+ NTSTRSAFEAPI
+ RtlStringCbCopyNA(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToCopy) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cbToCopy)
{
if (cbDest > NTSTRSAFE_MAX_CCH || cbToCopy > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCopyNWorkerA(pszDest,cbDest,pszSrc,cbToCopy);
}
- NTSTRSAFEAPI RtlStringCbCopyNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy)
+ NTSTRSAFEAPI
+ RtlStringCbCopyNW(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToCopy) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cbToCopy)
{
size_t cchDest = cbDest / sizeof(wchar_t);
size_t cchToCopy = cbToCopy / sizeof(wchar_t);
return RtlStringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy);
}
-
- NTSTRSAFEAPI RtlStringCchCopyNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
- NTSTRSAFEAPI RtlStringCchCopyNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
-
-
- NTSTRSAFEAPI RtlStringCchCopyNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCchCopyNExA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToCopy) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cchToCopy,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCchCopyNExW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToCopy) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cchToCopy,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCchCopyNExA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToCopy) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cchToCopy,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCopyNExWorkerA(pszDest,cchDest,cchDest,pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags);
}
- NTSTRSAFEAPI RtlStringCchCopyNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCchCopyNExW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToCopy) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cchToCopy,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCopyNExWorkerW(pszDest,cchDest,cchDest * sizeof(wchar_t),pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags);
}
-
- NTSTRSAFEAPI RtlStringCbCopyNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
- NTSTRSAFEAPI RtlStringCbCopyNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
-
-
- NTSTRSAFEAPI RtlStringCbCopyNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToCopy,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCbCopyNExA(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToCopy) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cbToCopy,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCbCopyNExW(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToCopy) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cbToCopy,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCbCopyNExA(
+ _Out_writes_bytes_(cbDest) STRSAFE_LPSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToCopy) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cbToCopy,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) STRSAFE_LPSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
NTSTATUS Status;
size_t cchRemaining = 0;
return Status;
}
- NTSTRSAFEAPI RtlStringCbCopyNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToCopy,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCbCopyNExW(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToCopy) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cbToCopy,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
NTSTATUS Status;
size_t cchDest;
return Status;
}
+ NTSTRSAFEAPI
+ RtlStringCchCatA(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc);
- NTSTRSAFEAPI RtlStringCchCatA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc);
- NTSTRSAFEAPI RtlStringCchCatW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc);
+ NTSTRSAFEAPI
+ RtlStringCchCatW(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc);
-
- NTSTRSAFEAPI RtlStringCchCatA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc)
+ NTSTRSAFEAPI
+ RtlStringCchCatA(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCatWorkerA(pszDest,cchDest,pszSrc);
}
- NTSTRSAFEAPI RtlStringCchCatW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc)
+ NTSTRSAFEAPI
+ RtlStringCchCatW(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCatWorkerW(pszDest,cchDest,pszSrc);
}
+ NTSTRSAFEAPI
+ RtlStringCbCatA(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc);
- NTSTRSAFEAPI RtlStringCbCatA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc);
- NTSTRSAFEAPI RtlStringCbCatW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc);
-
+ NTSTRSAFEAPI
+ RtlStringCbCatW(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc);
- NTSTRSAFEAPI RtlStringCbCatA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc)
+ NTSTRSAFEAPI
+ RtlStringCbCatA(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc)
{
if (cbDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCatWorkerA(pszDest,cbDest,pszSrc);
}
- NTSTRSAFEAPI RtlStringCbCatW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc)
+ NTSTRSAFEAPI
+ RtlStringCbCatW(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc)
{
size_t cchDest = cbDest / sizeof(wchar_t);
if (cchDest > NTSTRSAFE_MAX_CCH)
return RtlStringCatWorkerW(pszDest,cchDest,pszSrc);
}
-
- NTSTRSAFEAPI RtlStringCchCatExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
- NTSTRSAFEAPI RtlStringCchCatExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
-
-
- NTSTRSAFEAPI RtlStringCchCatExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCchCatExA(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCchCatExW(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCchCatExA(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCatExWorkerA(pszDest,cchDest,cchDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
}
- NTSTRSAFEAPI RtlStringCchCatExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCchCatExW(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
size_t cbDest = cchDest*sizeof(wchar_t);
if (cchDest > NTSTRSAFE_MAX_CCH)
return RtlStringCatExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
}
-
- NTSTRSAFEAPI RtlStringCbCatExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
- NTSTRSAFEAPI RtlStringCbCatExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
-
-
- NTSTRSAFEAPI RtlStringCbCatExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCbCatExA(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCbCatExW(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCbCatExA(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCSTR pszSrc,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
NTSTATUS Status;
size_t cchRemaining = 0;
return Status;
}
- NTSTRSAFEAPI RtlStringCbCatExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCbCatExW(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ NTSTRSAFE_PCWSTR pszSrc,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
NTSTATUS Status;
size_t cchDest = cbDest / sizeof(wchar_t);
return Status;
}
+ NTSTRSAFEAPI
+ RtlStringCchCatNA(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToAppend) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cchToAppend);
- NTSTRSAFEAPI RtlStringCchCatNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend);
- NTSTRSAFEAPI RtlStringCchCatNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend);
-
+ NTSTRSAFEAPI
+ RtlStringCchCatNW(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToAppend) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cchToAppend);
- NTSTRSAFEAPI RtlStringCchCatNA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend)
+ NTSTRSAFEAPI
+ RtlStringCchCatNA(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToAppend) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cchToAppend)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCatNWorkerA(pszDest,cchDest,pszSrc,cchToAppend);
}
- NTSTRSAFEAPI RtlStringCchCatNW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend)
+ NTSTRSAFEAPI
+ RtlStringCchCatNW(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToAppend) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cchToAppend)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCatNWorkerW(pszDest,cchDest,pszSrc,cchToAppend);
}
+ NTSTRSAFEAPI
+ RtlStringCbCatNA(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToAppend) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cbToAppend);
- NTSTRSAFEAPI RtlStringCbCatNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend);
- NTSTRSAFEAPI RtlStringCbCatNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend);
+ NTSTRSAFEAPI
+ RtlStringCbCatNW(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToAppend) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cbToAppend);
-
- NTSTRSAFEAPI RtlStringCbCatNA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend)
+ NTSTRSAFEAPI
+ RtlStringCbCatNA(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToAppend) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cbToAppend)
{
if (cbDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCatNWorkerA(pszDest,cbDest,pszSrc,cbToAppend);
}
- NTSTRSAFEAPI RtlStringCbCatNW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend)
+ NTSTRSAFEAPI
+ RtlStringCbCatNW(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToAppend) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cbToAppend)
{
size_t cchDest = cbDest / sizeof(wchar_t);
size_t cchToAppend = cbToAppend / sizeof(wchar_t);
return RtlStringCatNWorkerW(pszDest,cchDest,pszSrc,cchToAppend);
}
-
- NTSTRSAFEAPI RtlStringCchCatNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
- NTSTRSAFEAPI RtlStringCchCatNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags);
-
-
- NTSTRSAFEAPI RtlStringCchCatNExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszSrc,size_t cchToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCchCatNExA(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToAppend) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cchToAppend,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCchCatNExW(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToAppend) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cchToAppend,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCchCatNExA(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToAppend) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cchToAppend,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCatNExWorkerA(pszDest,cchDest,cchDest,pszSrc,cchToAppend,ppszDestEnd,pcchRemaining,dwFlags);
}
- NTSTRSAFEAPI RtlStringCchCatNExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszSrc,size_t cchToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCchCatNExW(
+ _Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_reads_or_z_(cchToAppend) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cchToAppend,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringCatNExWorkerW(pszDest,cchDest,(cchDest*sizeof(wchar_t)),pszSrc,cchToAppend,ppszDestEnd,pcchRemaining,dwFlags);
}
-
- NTSTRSAFEAPI RtlStringCbCatNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
- NTSTRSAFEAPI RtlStringCbCatNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags);
-
-
- NTSTRSAFEAPI RtlStringCbCatNExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszSrc,size_t cbToAppend,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCbCatNExA(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToAppend) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cbToAppend,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCbCatNExW(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToAppend) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cbToAppend,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags);
+
+ NTSTRSAFEAPI
+ RtlStringCbCatNExA(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToAppend) STRSAFE_LPCSTR pszSrc,
+ _In_ size_t cbToAppend,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
NTSTATUS Status;
size_t cchRemaining = 0;
return Status;
}
- NTSTRSAFEAPI RtlStringCbCatNExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszSrc,size_t cbToAppend,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags)
+ NTSTRSAFEAPI
+ RtlStringCbCatNExW(
+ _Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_reads_bytes_(cbToAppend) STRSAFE_LPCWSTR pszSrc,
+ _In_ size_t cbToAppend,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags)
{
NTSTATUS Status;
size_t cchDest = cbDest / sizeof(wchar_t);
return Status;
}
+ NTSTRSAFEAPI
+ RtlStringCchVPrintfA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ _In_ va_list argList);
- NTSTRSAFEAPI RtlStringCchVPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,va_list argList);
- NTSTRSAFEAPI RtlStringCchVPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList);
+ NTSTRSAFEAPI
+ RtlStringCchVPrintfW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ _In_ va_list argList);
-
- NTSTRSAFEAPI RtlStringCchVPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,va_list argList)
+ NTSTRSAFEAPI
+ RtlStringCchVPrintfA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ _In_ va_list argList)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringVPrintfWorkerA(pszDest,cchDest,pszFormat,argList);
}
- NTSTRSAFEAPI RtlStringCchVPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,va_list argList)
+ NTSTRSAFEAPI
+ RtlStringCchVPrintfW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ _In_ va_list argList)
{
if (cchDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
}
+ NTSTRSAFEAPI
+ RtlStringCbVPrintfA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ _In_ va_list argList);
- NTSTRSAFEAPI RtlStringCbVPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,va_list argList);
- NTSTRSAFEAPI RtlStringCbVPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,va_list argList);
-
+ NTSTRSAFEAPI
+ RtlStringCbVPrintfW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ _In_ va_list argList);
- NTSTRSAFEAPI RtlStringCbVPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,va_list argList)
+ NTSTRSAFEAPI
+ RtlStringCbVPrintfA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ _In_ va_list argList)
{
if (cbDest > NTSTRSAFE_MAX_CCH)
return STATUS_INVALID_PARAMETER;
return RtlStringVPrintfWorkerA(pszDest,cbDest,pszFormat,argList);
}
- NTSTRSAFEAPI RtlStringCbVPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,va_list argList)
+ NTSTRSAFEAPI
+ RtlStringCbVPrintfW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ _In_ va_list argList)
{
size_t cchDest = cbDest / sizeof(wchar_t);
if (cchDest > NTSTRSAFE_MAX_CCH)
return RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
}
+ NTSTRSAFEAPI
+ RtlStringCchPrintfA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ ...);
- NTSTRSAFEAPI RtlStringCchPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,...);
- NTSTRSAFEAPI RtlStringCchPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,...);
-
+ NTSTRSAFEAPI
+ RtlStringCchPrintfW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ ...);
- NTSTRSAFEAPI RtlStringCchPrintfA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPCSTR pszFormat,...)
+ NTSTRSAFEAPI
+ RtlStringCchPrintfA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ ...)
{
NTSTATUS Status;
va_list argList;
return Status;
}
- NTSTRSAFEAPI RtlStringCchPrintfW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat,...)
+ NTSTRSAFEAPI
+ RtlStringCchPrintfW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ ...)
{
NTSTATUS Status;
va_list argList;
return Status;
}
+ NTSTRSAFEAPI
+ RtlStringCbPrintfA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ ...);
- NTSTRSAFEAPI RtlStringCbPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,...);
- NTSTRSAFEAPI RtlStringCbPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,...);
+ NTSTRSAFEAPI
+ RtlStringCbPrintfW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ ...);
-
- NTSTRSAFEAPI RtlStringCbPrintfA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPCSTR pszFormat,...)
+ NTSTRSAFEAPI
+ RtlStringCbPrintfA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ ...)
{
NTSTATUS Status;
va_list argList;
return Status;
}
- NTSTRSAFEAPI RtlStringCbPrintfW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPCWSTR pszFormat,...)
+ NTSTRSAFEAPI
+ RtlStringCbPrintfW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ ...)
{
NTSTATUS Status;
va_list argList;
return Status;
}
-
- NTSTRSAFEAPI RtlStringCchPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,...);
- NTSTRSAFEAPI RtlStringCchPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,...);
-
-
- NTSTRSAFEAPI RtlStringCchPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,...)
+ NTSTRSAFEAPI
+ RtlStringCchPrintfExA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ ...);
+
+ NTSTRSAFEAPI
+ RtlStringCchPrintfExW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ ...);
+
+ NTSTRSAFEAPI
+ RtlStringCchPrintfExA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ ...)
{
NTSTATUS Status;
va_list argList;
return Status;
}
- NTSTRSAFEAPI RtlStringCchPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,...)
+ NTSTRSAFEAPI
+ RtlStringCchPrintfExW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ ...)
{
NTSTATUS Status;
size_t cbDest = cchDest * sizeof(wchar_t);
return Status;
}
-
- NTSTRSAFEAPI RtlStringCbPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,...);
- NTSTRSAFEAPI RtlStringCbPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,...);
-
-
- NTSTRSAFEAPI RtlStringCbPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,...)
+ NTSTRSAFEAPI
+ RtlStringCbPrintfExA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ ...);
+
+ NTSTRSAFEAPI
+ RtlStringCbPrintfExW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ ...);
+
+ NTSTRSAFEAPI
+ RtlStringCbPrintfExA(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ ...)
{
NTSTATUS Status;
size_t cchDest;
return Status;
}
- NTSTRSAFEAPI RtlStringCbPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,...)
+ NTSTRSAFEAPI
+ RtlStringCbPrintfExW(
+ _Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ ...)
{
NTSTATUS Status;
size_t cchDest;
return Status;
}
-
- NTSTRSAFEAPI RtlStringCchVPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList);
- NTSTRSAFEAPI RtlStringCchVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList);
-
-
- NTSTRSAFEAPI RtlStringCchVPrintfExA(STRSAFE_LPSTR pszDest,size_t cchDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList)
+ NTSTRSAFEAPI
+ RtlStringCchVPrintfExA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ _In_ va_list argList);
+
+ NTSTRSAFEAPI
+ RtlStringCchVPrintfExW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ _In_ va_list argList);
+
+ NTSTRSAFEAPI
+ RtlStringCchVPrintfExA(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cchDest,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ _In_ va_list argList)
{
NTSTATUS Status;
if (cchDest > NTSTRSAFE_MAX_CCH)
return Status;
}
- NTSTRSAFEAPI RtlStringCchVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcchRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList)
+ NTSTRSAFEAPI
+ RtlStringCchVPrintfExW(
+ _Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cchDest,
+ _Outptr_opt_result_buffer_(*pcchRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcchRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ _In_ va_list argList)
{
NTSTATUS Status;
if (cchDest > NTSTRSAFE_MAX_CCH)
return Status;
}
-
- NTSTRSAFEAPI RtlStringCbVPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList);
- NTSTRSAFEAPI RtlStringCbVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList);
-
-
- NTSTRSAFEAPI RtlStringCbVPrintfExA(STRSAFE_LPSTR pszDest,size_t cbDest,STRSAFE_LPSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCSTR pszFormat,va_list argList)
+ NTSTRSAFEAPI
+ RtlStringCbVPrintfExA(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ _In_ va_list argList);
+
+ NTSTRSAFEAPI
+ RtlStringCbVPrintfExW(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ _In_ va_list argList);
+
+ NTSTRSAFEAPI
+ RtlStringCbVPrintfExA(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PSTR pszDest,
+ _In_ size_t cbDest,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,
+ _In_ va_list argList)
{
NTSTATUS Status;
size_t cchDest;
return Status;
}
- NTSTRSAFEAPI RtlStringCbVPrintfExW(STRSAFE_LPWSTR pszDest,size_t cbDest,STRSAFE_LPWSTR *ppszDestEnd,size_t *pcbRemaining,STRSAFE_DWORD dwFlags,STRSAFE_LPCWSTR pszFormat,va_list argList)
+ NTSTRSAFEAPI
+ RtlStringCbVPrintfExW(
+ _Out_writes_bytes_(cbDest) NTSTRSAFE_PWSTR pszDest,
+ _In_ size_t cbDest,
+ _Outptr_opt_result_bytebuffer_(*pcbRemaining) NTSTRSAFE_PWSTR *ppszDestEnd,
+ _Out_opt_ size_t *pcbRemaining,
+ _In_ STRSAFE_DWORD dwFlags,
+ _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,
+ _In_ va_list argList)
{
NTSTATUS Status;
size_t cchDest;
}
- NTSTRSAFEAPI RtlStringCchLengthA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength);
- NTSTRSAFEAPI RtlStringCchLengthW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength);
+ _Must_inspect_result_
+ NTSTRSAFEAPI
+ RtlStringCchLengthA(
+ _In_reads_or_z_(cchMax) STRSAFE_LPCSTR psz,
+ _In_ _In_range_(1, NTSTRSAFE_MAX_CCH) size_t cchMax,
+ _Out_opt_ _Deref_out_range_(<, cchMax) _Deref_out_range_(<=, _String_length_(psz)) size_t *pcchLength);
+ _Must_inspect_result_
+ NTSTRSAFEAPI
+ RtlStringCchLengthW(
+ _In_reads_or_z_(cchMax) STRSAFE_LPCWSTR psz,
+ _In_ _In_range_(1, NTSTRSAFE_MAX_CCH) size_t cchMax,
+ _Out_opt_ _Deref_out_range_(<, cchMax) _Deref_out_range_(<=, _String_length_(psz)) size_t *pcchLength);
- NTSTRSAFEAPI RtlStringCchLengthA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength)
+ _Must_inspect_result_
+ NTSTRSAFEAPI
+ RtlStringCchLengthA(
+ _In_reads_or_z_(cchMax) STRSAFE_LPCSTR psz,
+ _In_ _In_range_(1, NTSTRSAFE_MAX_CCH) size_t cchMax,
+ _Out_opt_ _Deref_out_range_(<, cchMax) _Deref_out_range_(<=, _String_length_(psz)) size_t *pcchLength)
{
NTSTATUS Status;
if (!psz || (cchMax > NTSTRSAFE_MAX_CCH))
return Status;
}
- NTSTRSAFEAPI RtlStringCchLengthW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength)
+ _Must_inspect_result_
+ NTSTRSAFEAPI
+ RtlStringCchLengthW(
+ _In_reads_or_z_(cchMax) STRSAFE_LPCWSTR psz,
+ _In_ _In_range_(1, NTSTRSAFE_MAX_CCH) size_t cchMax,
+ _Out_opt_ _Deref_out_range_(<, cchMax) _Deref_out_range_(<=, _String_length_(psz)) size_t *pcchLength)
{
NTSTATUS Status;
if (!psz || (cchMax > NTSTRSAFE_MAX_CCH))
return Status;
}
+ _Must_inspect_result_
+ NTSTRSAFEAPI
+ RtlStringCbLengthA(
+ _In_reads_or_z_(cbMax) STRSAFE_LPCSTR psz,
+ _In_ _In_range_(1, NTSTRSAFE_MAX_CCH * sizeof(char)) size_t cbMax,
+ _Out_opt_ _Deref_out_range_(<, cbMax) size_t *pcbLength);
- NTSTRSAFEAPI RtlStringCbLengthA(STRSAFE_LPCSTR psz,size_t cbMax,size_t *pcbLength);
- NTSTRSAFEAPI RtlStringCbLengthW(STRSAFE_LPCWSTR psz,size_t cbMax,size_t *pcbLength);
+ _Must_inspect_result_
+ NTSTRSAFEAPI
+ RtlStringCbLengthW(
+ _In_reads_or_z_(cbMax / sizeof(wchar_t)) STRSAFE_LPCWSTR psz,
+ _In_ _In_range_(1, NTSTRSAFE_MAX_CCH * sizeof(wchar_t)) size_t cbMax,
+ _Out_opt_ _Deref_out_range_(<, cbMax - 1) size_t *pcbLength);
-
- NTSTRSAFEAPI RtlStringCbLengthA(STRSAFE_LPCSTR psz,size_t cbMax,size_t *pcbLength)
+ _Must_inspect_result_
+ NTSTRSAFEAPI
+ RtlStringCbLengthA(
+ _In_reads_or_z_(cbMax) STRSAFE_LPCSTR psz,
+ _In_ _In_range_(1, NTSTRSAFE_MAX_CCH * sizeof(char)) size_t cbMax,
+ _Out_opt_ _Deref_out_range_(<, cbMax) size_t *pcbLength)
{
NTSTATUS Status;
size_t cchMax;
return Status;
}
- NTSTRSAFEAPI RtlStringCbLengthW(STRSAFE_LPCWSTR psz,size_t cbMax,size_t *pcbLength)
+ _Must_inspect_result_
+ NTSTRSAFEAPI
+ RtlStringCbLengthW(
+ _In_reads_or_z_(cbMax / sizeof(wchar_t)) STRSAFE_LPCWSTR psz,
+ _In_ _In_range_(1, NTSTRSAFE_MAX_CCH * sizeof(wchar_t)) size_t cbMax,
+ _Out_opt_ _Deref_out_range_(<, cbMax - 1) size_t *pcbLength)
{
NTSTATUS Status;
size_t cchMax;
return Status;
}
- NTSTRSAFEAPI RtlStringLengthWorkerA(STRSAFE_LPCSTR psz,size_t cchMax,size_t *pcchLength)
+ NTSTRSAFEAPI
+ RtlStringLengthWorkerA(
+ _In_reads_or_z_(cchMax) STRSAFE_LPCSTR psz,
+ _In_ _In_range_(<=, NTSTRSAFE_MAX_CCH) size_t cchMax,
+ _Out_opt_ _Deref_out_range_(<, cchMax) size_t *pcchLength)
{
NTSTATUS Status = STATUS_SUCCESS;
size_t cchMaxPrev = cchMax;
return Status;
}
- NTSTRSAFEAPI RtlStringLengthWorkerW(STRSAFE_LPCWSTR psz,size_t cchMax,size_t *pcchLength)
+ NTSTRSAFEAPI
+ RtlStringLengthWorkerW(
+ _In_reads_or_z_(cchMax) STRSAFE_LPCWSTR psz,
+ _In_ _In_range_(<=, NTSTRSAFE_MAX_CCH) size_t cchMax,
+ _Out_opt_ _Deref_out_range_(<, cchMax) size_t *pcchLength)
{
NTSTATUS Status = STATUS_SUCCESS;
size_t cchMaxPrev = cchMax;
return Status;
}
-
-
#define RtlStringCopyWorkerA RtlStringCopyWorkerA_instead_use_StringCchCopyA_or_StringCchCopyExA;
#define RtlStringCopyWorkerW RtlStringCopyWorkerW_instead_use_StringCchCopyW_or_StringCchCopyExW;
#define RtlStringCopyExWorkerA RtlStringCopyExWorkerA_instead_use_StringCchCopyA_or_StringCchCopyExA;
typedef PVOID PUSB_DEVICE_HANDLE;
#endif
+ typedef
_Must_inspect_result_
- typedef NTSTATUS
+ NTSTATUS
(USB_BUSIFFN *PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB) (
_In_ PVOID,
_In_ PURB);
_Out_opt_ PUSBD_VERSION_INFORMATION,
_Out_opt_ PULONG);
+ typedef
_Must_inspect_result_
- typedef NTSTATUS
+ NTSTATUS
(USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_TIME) (
_In_ PVOID,
_Out_opt_ PULONG);
WCHAR ControllerNameUnicodeString[1];
} USB_BUS_INFORMATION_LEVEL_1, *PUSB_BUS_INFORMATION_LEVEL_1;
+ typedef
_Must_inspect_result_
- typedef NTSTATUS
+ NTSTATUS
(USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_INFORMATION) (
_In_ PVOID,
_In_ ULONG,
_Out_ PULONG,
_Out_opt_ PULONG);
+ typedef
_Must_inspect_result_
- typedef BOOLEAN
+ BOOLEAN
(USB_BUSIFFN *PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED) (
_In_opt_ PVOID);
#if (NTDDI_VERSION >= NTDDI_VISTA)
+ typedef
_Must_inspect_result_
- typedef NTSTATUS
+ NTSTATUS
(USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_TIME_EX) (
_In_opt_ PVOID,
_Out_opt_ PULONG);
+ typedef
_Must_inspect_result_
- typedef NTSTATUS
+ NTSTATUS
(USB_BUSIFFN *PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE) (
_In_opt_ PVOID,
_Out_opt_ PULONG,
PVOID Reserved;
} USBC_FUNCTION_DESCRIPTOR, *PUSBC_FUNCTION_DESCRIPTOR;
+ typedef
_Must_inspect_result_
- typedef NTSTATUS
+ NTSTATUS
(USB_BUSIFFN *USBC_START_DEVICE_CALLBACK)(
_In_ PUSB_DEVICE_DESCRIPTOR DeviceDescriptor,
_In_ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
_In_ PDEVICE_OBJECT FdoDeviceObject,
_In_ PDEVICE_OBJECT PdoDeviceObject);
+ typedef
_Must_inspect_result_
- typedef BOOLEAN
+ BOOLEAN
(USB_BUSIFFN *USBC_PDO_ENABLE_CALLBACK)(
_In_ PVOID Context,
_In_ USHORT FirstInterfaceNumber,
#endif
- #if defined(_M_IX86)
- /** Kernel definitions for x86 **/
+ /******************************************************************************
+ * Memory manager Types *
+ ******************************************************************************/
- /* Interrupt request levels */
- #define PASSIVE_LEVEL 0
- #define LOW_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define CMCI_LEVEL 5
- #define PROFILE_LEVEL 27
- #define CLOCK1_LEVEL 28
- #define CLOCK2_LEVEL 28
- #define IPI_LEVEL 29
- #define POWER_LEVEL 30
- #define HIGH_LEVEL 31
- #define CLOCK_LEVEL CLOCK2_LEVEL
+ #if (NTDDI_VERSION >= NTDDI_WIN2K)
+ typedef ULONG NODE_REQUIREMENT;
+ #define MM_ANY_NODE_OK 0x80000000
+ #endif
- #define KIP0PCRADDRESS 0xffdff000
- #define KI_USER_SHARED_DATA 0xffdf0000
- #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
+ #define MM_DONT_ZERO_ALLOCATION 0x00000001
+ #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
+ #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
+ #define MM_ALLOCATE_NO_WAIT 0x00000008
+ #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
+ #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
- #define PAGE_SIZE 0x1000
- #define PAGE_SHIFT 12L
- #define KeGetDcacheFillSize() 1L
+ #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
+ #define MDL_PAGES_LOCKED 0x0002
+ #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
+ #define MDL_ALLOCATED_FIXED_SIZE 0x0008
+ #define MDL_PARTIAL 0x0010
+ #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
+ #define MDL_IO_PAGE_READ 0x0040
+ #define MDL_WRITE_OPERATION 0x0080
+ #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
+ #define MDL_FREE_EXTRA_PTES 0x0200
+ #define MDL_DESCRIBES_AWE 0x0400
+ #define MDL_IO_SPACE 0x0800
+ #define MDL_NETWORK_HEADER 0x1000
+ #define MDL_MAPPING_CAN_FAIL 0x2000
+ #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
+ #define MDL_INTERNAL 0x8000
- #define EFLAG_SIGN 0x8000
- #define EFLAG_ZERO 0x4000
- #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
+ #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
+ MDL_PAGES_LOCKED | \
+ MDL_SOURCE_IS_NONPAGED_POOL | \
+ MDL_PARTIAL_HAS_BEEN_MAPPED | \
+ MDL_PARENT_MAPPED_SYSTEM_VA | \
+ MDL_SYSTEM_VA | \
+ MDL_IO_SPACE)
- #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
- #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
- #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+ #define FLUSH_MULTIPLE_MAXIMUM 32
+ /* Section access rights */
+ #define SECTION_QUERY 0x0001
+ #define SECTION_MAP_WRITE 0x0002
+ #define SECTION_MAP_READ 0x0004
+ #define SECTION_MAP_EXECUTE 0x0008
+ #define SECTION_EXTEND_SIZE 0x0010
+ #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
- typedef struct _KFLOATING_SAVE {
- ULONG ControlWord;
- ULONG StatusWord;
- ULONG ErrorOffset;
- ULONG ErrorSelector;
- ULONG DataOffset;
- ULONG DataSelector;
- ULONG Cr0NpxState;
- ULONG Spare1;
- } KFLOATING_SAVE, *PKFLOATING_SAVE;
+ #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \
+ SECTION_MAP_WRITE | \
+ SECTION_MAP_READ | \
+ SECTION_MAP_EXECUTE | \
+ SECTION_EXTEND_SIZE)
- extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
+ #define SESSION_QUERY_ACCESS 0x0001
+ #define SESSION_MODIFY_ACCESS 0x0002
- #define YieldProcessor _mm_pause
+ #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
+ SESSION_QUERY_ACCESS | \
+ SESSION_MODIFY_ACCESS)
- FORCEINLINE
- VOID
- KeMemoryBarrier(VOID)
- {
- LONG Barrier, *Dummy = &Barrier;
- UNREFERENCED_LOCAL_VARIABLE(Dummy);
+ #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
- #if defined(__GNUC__)
- __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
- #elif defined(_MSC_VER)
- __asm xchg [Barrier], eax
- #endif
- }
+ #define PAGE_NOACCESS 0x01
+ #define PAGE_READONLY 0x02
+ #define PAGE_READWRITE 0x04
+ #define PAGE_WRITECOPY 0x08
+ #define PAGE_EXECUTE 0x10
+ #define PAGE_EXECUTE_READ 0x20
+ #define PAGE_EXECUTE_READWRITE 0x40
+ #define PAGE_EXECUTE_WRITECOPY 0x80
+ #define PAGE_GUARD 0x100
+ #define PAGE_NOCACHE 0x200
+ #define PAGE_WRITECOMBINE 0x400
- #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
+ #define MEM_COMMIT 0x1000
+ #define MEM_RESERVE 0x2000
+ #define MEM_DECOMMIT 0x4000
+ #define MEM_RELEASE 0x8000
+ #define MEM_FREE 0x10000
+ #define MEM_PRIVATE 0x20000
+ #define MEM_MAPPED 0x40000
+ #define MEM_RESET 0x80000
+ #define MEM_TOP_DOWN 0x100000
+ #define MEM_LARGE_PAGES 0x20000000
+ #define MEM_4MB_PAGES 0x80000000
- _IRQL_requires_max_(HIGH_LEVEL)
- _IRQL_saves_
- NTHALAPI
- KIRQL
- NTAPI
- KeGetCurrentIrql(VOID);
+ #define SEC_RESERVE 0x4000000
+ #define SEC_COMMIT 0x8000000
+ #define SEC_LARGE_PAGES 0x80000000
- _IRQL_requires_max_(HIGH_LEVEL)
- NTHALAPI
- VOID
- FASTCALL
- KfLowerIrql(
- _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql);
- #define KeLowerIrql(a) KfLowerIrql(a)
+ /* Section map options */
+ typedef enum _SECTION_INHERIT {
+ ViewShare = 1,
+ ViewUnmap = 2
+ } SECTION_INHERIT;
- _IRQL_requires_max_(HIGH_LEVEL)
- _IRQL_raises_(NewIrql)
- _IRQL_saves_
- NTHALAPI
- KIRQL
- FASTCALL
- KfRaiseIrql(
- _In_ KIRQL NewIrql);
- #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+ typedef ULONG PFN_COUNT;
+ typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER;
+ typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER;
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _IRQL_saves_
- _IRQL_raises_(DISPATCH_LEVEL)
- NTHALAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToDpcLevel(VOID);
+ _Struct_size_bytes_(_Inexpressible_(sizeof(struct _MDL) +
+ (ByteOffset + ByteCount + PAGE_SIZE-1) / PAGE_SIZE * sizeof(PFN_NUMBER)))
+ typedef struct _MDL {
+ struct _MDL *Next;
+ CSHORT Size;
+ CSHORT MdlFlags;
+ struct _EPROCESS *Process;
+ PVOID MappedSystemVa;
+ PVOID StartVa;
+ ULONG ByteCount;
+ ULONG ByteOffset;
+ } MDL, *PMDL;
+ #if (_MSC_VER >= 1600)
+ typedef _Readable_bytes_(_Inexpressible_(polymorphism)) MDL *PMDLX;
+ #else
+ typedef MDL *PMDLX;
+ #endif
- NTHALAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToSynchLevel(VOID);
+ typedef enum _MEMORY_CACHING_TYPE_ORIG {
+ MmFrameBufferCached = 2
+ } MEMORY_CACHING_TYPE_ORIG;
- _Requires_lock_not_held_(*SpinLock)
- _Acquires_lock_(*SpinLock)
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _IRQL_saves_
- _IRQL_raises_(DISPATCH_LEVEL)
- NTHALAPI
- KIRQL
- FASTCALL
- KfAcquireSpinLock(
- _Inout_ PKSPIN_LOCK SpinLock);
- #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
+ typedef enum _MEMORY_CACHING_TYPE {
+ MmNonCached = FALSE,
+ MmCached = TRUE,
+ MmWriteCombined = MmFrameBufferCached,
+ MmHardwareCoherentCached,
+ MmNonCachedUnordered,
+ MmUSWCCached,
+ MmMaximumCacheType
+ } MEMORY_CACHING_TYPE;
- _Requires_lock_held_(*SpinLock)
- _Releases_lock_(*SpinLock)
- _IRQL_requires_(DISPATCH_LEVEL)
- NTHALAPI
- VOID
- FASTCALL
- KfReleaseSpinLock(
- _Inout_ PKSPIN_LOCK SpinLock,
- _In_ _IRQL_restores_ KIRQL NewIrql);
- #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
+ typedef enum _MM_PAGE_PRIORITY {
+ LowPagePriority,
+ NormalPagePriority = 16,
+ HighPagePriority = 32
+ } MM_PAGE_PRIORITY;
- _Requires_lock_not_held_(*SpinLock)
- _Acquires_lock_(*SpinLock)
- _IRQL_requires_min_(DISPATCH_LEVEL)
- NTKERNELAPI
- VOID
- FASTCALL
- KefAcquireSpinLockAtDpcLevel(
- _Inout_ PKSPIN_LOCK SpinLock);
- #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
+ typedef enum _MM_SYSTEM_SIZE {
+ MmSmallSystem,
+ MmMediumSystem,
+ MmLargeSystem
+ } MM_SYSTEMSIZE;
- _Requires_lock_held_(*SpinLock)
- _Releases_lock_(*SpinLock)
- _IRQL_requires_min_(DISPATCH_LEVEL)
- NTKERNELAPI
- VOID
- FASTCALL
- KefReleaseSpinLockFromDpcLevel(
- _Inout_ PKSPIN_LOCK SpinLock);
- #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
+ extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress;
+ extern PVOID MmBadPointer;
- NTSYSAPI
- PKTHREAD
- NTAPI
- KeGetCurrentThread(VOID);
- _Always_(_Post_satisfies_(return<=0))
- _Must_inspect_result_
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Kernel_float_saved_
- _At_(*FloatSave, _Kernel_requires_resource_not_held_(FloatState) _Kernel_acquires_resource_(FloatState))
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeSaveFloatingPointState(
- _Out_ PKFLOATING_SAVE FloatSave);
+ /******************************************************************************
+ * Executive Types *
+ ******************************************************************************/
+ #define EX_RUNDOWN_ACTIVE 0x1
+ #define EX_RUNDOWN_COUNT_SHIFT 0x1
+ #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
- _Success_(1)
- _Kernel_float_restored_
- _At_(*FloatSave, _Kernel_requires_resource_held_(FloatState) _Kernel_releases_resource_(FloatState))
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeRestoreFloatingPointState(
- _In_ PKFLOATING_SAVE FloatSave);
+ typedef struct _FAST_MUTEX {
+ volatile LONG Count;
+ PKTHREAD Owner;
+ ULONG Contention;
+ KEVENT Event;
+ ULONG OldIrql;
+ } FAST_MUTEX, *PFAST_MUTEX;
- /* VOID
- * KeFlushIoBuffers(
- * IN PMDL Mdl,
- * IN BOOLEAN ReadOperation,
- * IN BOOLEAN DmaOperation)
- */
- #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
+ typedef enum _SUITE_TYPE {
+ SmallBusiness,
+ Enterprise,
+ BackOffice,
+ CommunicationServer,
+ TerminalServer,
+ SmallBusinessRestricted,
+ EmbeddedNT,
+ DataCenter,
+ SingleUserTS,
+ Personal,
+ Blade,
+ EmbeddedRestricted,
+ SecurityAppliance,
+ StorageServer,
+ ComputeServer,
+ WHServer,
+ MaxSuiteType
+ } SUITE_TYPE;
- /* x86 and x64 performs a 0x2C interrupt */
- #define DbgRaiseAssertionFailure __int2c
+ typedef enum _EX_POOL_PRIORITY {
+ LowPoolPriority,
+ LowPoolPrioritySpecialPoolOverrun = 8,
+ LowPoolPrioritySpecialPoolUnderrun = 9,
+ NormalPoolPriority = 16,
+ NormalPoolPrioritySpecialPoolOverrun = 24,
+ NormalPoolPrioritySpecialPoolUnderrun = 25,
+ HighPoolPriority = 32,
+ HighPoolPrioritySpecialPoolOverrun = 40,
+ HighPoolPrioritySpecialPoolUnderrun = 41
+ } EX_POOL_PRIORITY;
- FORCEINLINE
- VOID
- _KeQueryTickCount(
- OUT PLARGE_INTEGER CurrentCount)
- {
- for (;;) {
- #ifdef NONAMELESSUNION
- CurrentCount->s.HighPart = KeTickCount.High1Time;
- CurrentCount->s.LowPart = KeTickCount.LowPart;
- if (CurrentCount->s.HighPart == KeTickCount.High2Time) break;
+ #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
+ #define LOOKASIDE_ALIGN
#else
- CurrentCount->HighPart = KeTickCount.High1Time;
- CurrentCount->LowPart = KeTickCount.LowPart;
- if (CurrentCount->HighPart == KeTickCount.High2Time) break;
+ #define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
#endif
- YieldProcessor();
- }
- }
- #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
+ typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
+ _IRQL_requires_same_
+ _Function_class_(ALLOCATE_FUNCTION)
+ typedef PVOID
+ (NTAPI *PALLOCATE_FUNCTION)(
+ _In_ POOL_TYPE PoolType,
+ _In_ SIZE_T NumberOfBytes,
+ _In_ ULONG Tag);
+ _IRQL_requires_same_
+ _Function_class_(ALLOCATE_FUNCTION_EX)
+ typedef PVOID
+ (NTAPI *PALLOCATE_FUNCTION_EX)(
+ _In_ POOL_TYPE PoolType,
+ _In_ SIZE_T NumberOfBytes,
+ _In_ ULONG Tag,
+ _Inout_ PLOOKASIDE_LIST_EX Lookaside);
+ _IRQL_requires_same_
+ _Function_class_(FREE_FUNCTION)
+ typedef VOID
+ (NTAPI *PFREE_FUNCTION)(
+ _In_ PVOID Buffer);
- #elif defined(_M_AMD64)
- /** Kernel definitions for AMD64 **/
+ _IRQL_requires_same_
+ _Function_class_(FREE_FUNCTION_EX)
+ typedef VOID
+ (NTAPI *PFREE_FUNCTION_EX)(
+ _In_ PVOID Buffer,
+ _Inout_ PLOOKASIDE_LIST_EX Lookaside);
- /* Interrupt request levels */
- #define PASSIVE_LEVEL 0
- #define LOW_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define CMCI_LEVEL 5
- #define CLOCK_LEVEL 13
- #define IPI_LEVEL 14
- #define DRS_LEVEL 14
- #define POWER_LEVEL 14
- #define PROFILE_LEVEL 15
- #define HIGH_LEVEL 15
+ _IRQL_requires_same_
+ _Function_class_(CALLBACK_FUNCTION)
+ typedef VOID
+ (NTAPI CALLBACK_FUNCTION)(
+ _In_opt_ PVOID CallbackContext,
+ _In_opt_ PVOID Argument1,
+ _In_opt_ PVOID Argument2);
+ typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION;
- #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
- #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
- #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
- #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
- #define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
+ #define GENERAL_LOOKASIDE_LAYOUT \
+ _ANONYMOUS_UNION union { \
+ SLIST_HEADER ListHead; \
+ SINGLE_LIST_ENTRY SingleListHead; \
+ } DUMMYUNIONNAME; \
+ USHORT Depth; \
+ USHORT MaximumDepth; \
+ ULONG TotalAllocates; \
+ _ANONYMOUS_UNION union { \
+ ULONG AllocateMisses; \
+ ULONG AllocateHits; \
+ } DUMMYUNIONNAME2; \
+ ULONG TotalFrees; \
+ _ANONYMOUS_UNION union { \
+ ULONG FreeMisses; \
+ ULONG FreeHits; \
+ } DUMMYUNIONNAME3; \
+ POOL_TYPE Type; \
+ ULONG Tag; \
+ ULONG Size; \
+ _ANONYMOUS_UNION union { \
+ PALLOCATE_FUNCTION_EX AllocateEx; \
+ PALLOCATE_FUNCTION Allocate; \
+ } DUMMYUNIONNAME4; \
+ _ANONYMOUS_UNION union { \
+ PFREE_FUNCTION_EX FreeEx; \
+ PFREE_FUNCTION Free; \
+ } DUMMYUNIONNAME5; \
+ LIST_ENTRY ListEntry; \
+ ULONG LastTotalAllocates; \
+ _ANONYMOUS_UNION union { \
+ ULONG LastAllocateMisses; \
+ ULONG LastAllocateHits; \
+ } DUMMYUNIONNAME6; \
+ ULONG Future[2];
- #define PAGE_SIZE 0x1000
- #define PAGE_SHIFT 12L
+ typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
+ GENERAL_LOOKASIDE_LAYOUT
+ } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
- #define EFLAG_SIGN 0x8000
- #define EFLAG_ZERO 0x4000
- #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
+ typedef struct _GENERAL_LOOKASIDE_POOL {
+ GENERAL_LOOKASIDE_LAYOUT
+ } GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL;
- typedef struct _KFLOATING_SAVE {
- ULONG Dummy;
- } KFLOATING_SAVE, *PKFLOATING_SAVE;
+ #define LOOKASIDE_CHECK(f) \
+ C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
- typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
+ LOOKASIDE_CHECK(TotalFrees);
+ LOOKASIDE_CHECK(Tag);
+ LOOKASIDE_CHECK(Future);
- #define KeQueryInterruptTime() \
- (*(volatile ULONG64*)SharedInterruptTime)
+ typedef struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST {
+ GENERAL_LOOKASIDE L;
+ #if !defined(_AMD64_) && !defined(_IA64_)
+ FAST_MUTEX Lock__ObsoleteButDoNotDelete;
+ #endif
+ } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
- #define KeQuerySystemTime(CurrentCount) \
- *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
+ typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
+ GENERAL_LOOKASIDE L;
+ #if !defined(_AMD64_) && !defined(_IA64_)
+ KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
+ #endif
+ } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
- #define KeQueryTickCount(CurrentCount) \
- *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
+ #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
- #define KeGetDcacheFillSize() 1L
+ typedef struct _LOOKASIDE_LIST_EX {
+ GENERAL_LOOKASIDE_POOL L;
+ } LOOKASIDE_LIST_EX;
- #define YieldProcessor _mm_pause
- #define MemoryBarrier __faststorefence
- #define FastFence __faststorefence
- #define LoadFence _mm_lfence
- #define MemoryFence _mm_mfence
- #define StoreFence _mm_sfence
- #define LFENCE_ACQUIRE() LoadFence()
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
- FORCEINLINE
- VOID
- KeMemoryBarrier(VOID)
- {
- // FIXME: Do we really need lfence after the __faststorefence ?
- FastFence();
- LFENCE_ACQUIRE();
- }
+ #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
+ #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
- #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
+ #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
+ #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
- FORCEINLINE
- KIRQL
- KeGetCurrentIrql(VOID)
- {
- return (KIRQL)__readcr8();
- }
+ #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- FORCEINLINE
- VOID
- KeLowerIrql(IN KIRQL NewIrql)
- {
- ASSERT((KIRQL)__readcr8() >= NewIrql);
- __writecr8(NewIrql);
- }
+ typedef struct _EX_RUNDOWN_REF {
+ _ANONYMOUS_UNION union {
+ volatile ULONG_PTR Count;
+ volatile PVOID Ptr;
+ } DUMMYUNIONNAME;
+ } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
- FORCEINLINE
- KIRQL
- KfRaiseIrql(IN KIRQL NewIrql)
- {
- KIRQL OldIrql;
+ typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
- OldIrql = (KIRQL)__readcr8();
- ASSERT(OldIrql <= NewIrql);
- __writecr8(NewIrql);
- return OldIrql;
- }
- #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+ typedef enum _WORK_QUEUE_TYPE {
+ CriticalWorkQueue,
+ DelayedWorkQueue,
+ HyperCriticalWorkQueue,
+ MaximumWorkQueue
+ } WORK_QUEUE_TYPE;
- FORCEINLINE
- KIRQL
- KeRaiseIrqlToDpcLevel(VOID)
- {
- return KfRaiseIrql(DISPATCH_LEVEL);
- }
+ _IRQL_requires_same_
+ _Function_class_(WORKER_THREAD_ROUTINE)
+ typedef VOID
+ (NTAPI WORKER_THREAD_ROUTINE)(
+ _In_ PVOID Parameter);
+ typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE;
- FORCEINLINE
- KIRQL
- KeRaiseIrqlToSynchLevel(VOID)
- {
- return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
- }
+ typedef struct _WORK_QUEUE_ITEM {
+ LIST_ENTRY List;
+ PWORKER_THREAD_ROUTINE WorkerRoutine;
+ volatile PVOID Parameter;
+ } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
- FORCEINLINE
- PKTHREAD
- KeGetCurrentThread(VOID)
- {
- return (struct _KTHREAD *)__readgsqword(0x188);
- }
+ typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
- FORCEINLINE
- NTSTATUS
- KeSaveFloatingPointState(PVOID FloatingState)
- {
- UNREFERENCED_PARAMETER(FloatingState);
- return STATUS_SUCCESS;
- }
+ typedef struct _OWNER_ENTRY {
+ ERESOURCE_THREAD OwnerThread;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ ULONG IoPriorityBoosted:1;
+ ULONG OwnerReferenced:1;
+ ULONG OwnerCount:30;
+ } DUMMYSTRUCTNAME;
+ ULONG TableSize;
+ } DUMMYUNIONNAME;
+ } OWNER_ENTRY, *POWNER_ENTRY;
- FORCEINLINE
- NTSTATUS
- KeRestoreFloatingPointState(PVOID FloatingState)
- {
- UNREFERENCED_PARAMETER(FloatingState);
- return STATUS_SUCCESS;
- }
+ typedef struct _ERESOURCE {
+ LIST_ENTRY SystemResourcesList;
+ POWNER_ENTRY OwnerTable;
+ SHORT ActiveCount;
+ USHORT Flag;
+ volatile PKSEMAPHORE SharedWaiters;
+ volatile PKEVENT ExclusiveWaiters;
+ OWNER_ENTRY OwnerEntry;
+ ULONG ActiveEntries;
+ ULONG ContentionCount;
+ ULONG NumberOfSharedWaiters;
+ ULONG NumberOfExclusiveWaiters;
+ #if defined(_WIN64)
+ PVOID Reserved2;
+ #endif
+ _ANONYMOUS_UNION union {
+ PVOID Address;
+ ULONG_PTR CreatorBackTraceIndex;
+ } DUMMYUNIONNAME;
+ KSPIN_LOCK SpinLock;
+ } ERESOURCE, *PERESOURCE;
- /* VOID
- * KeFlushIoBuffers(
- * IN PMDL Mdl,
- * IN BOOLEAN ReadOperation,
- * IN BOOLEAN DmaOperation)
- */
- #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
+ /* ERESOURCE.Flag */
+ #define ResourceNeverExclusive 0x0010
+ #define ResourceReleaseByOtherThread 0x0020
+ #define ResourceOwnedExclusive 0x0080
- /* x86 and x64 performs a 0x2C interrupt */
- #define DbgRaiseAssertionFailure __int2c
+ #define RESOURCE_HASH_TABLE_SIZE 64
- #elif defined(_M_IA64)
- /** Kernel definitions for IA64 **/
+ typedef struct _RESOURCE_HASH_ENTRY {
+ LIST_ENTRY ListEntry;
+ PVOID Address;
+ ULONG ContentionCount;
+ ULONG Number;
+ } RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY;
- /* Interrupt request levels */
- #define PASSIVE_LEVEL 0
- #define LOW_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define CMC_LEVEL 3
- #define DEVICE_LEVEL_BASE 4
- #define PC_LEVEL 12
- #define IPI_LEVEL 14
- #define DRS_LEVEL 14
- #define CLOCK_LEVEL 13
- #define POWER_LEVEL 15
- #define PROFILE_LEVEL 15
- #define HIGH_LEVEL 15
+ typedef struct _RESOURCE_PERFORMANCE_DATA {
+ ULONG ActiveResourceCount;
+ ULONG TotalResourceCount;
+ ULONG ExclusiveAcquire;
+ ULONG SharedFirstLevel;
+ ULONG SharedSecondLevel;
+ ULONG StarveFirstLevel;
+ ULONG StarveSecondLevel;
+ ULONG WaitForExclusive;
+ ULONG OwnerTableExpands;
+ ULONG MaximumTableExpand;
+ LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
+ } RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA;
- #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
- extern volatile LARGE_INTEGER KeTickCount;
+ /* Global debug flag */
+ #if DEVL
+ extern ULONG NtGlobalFlag;
+ #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
+ #else
+ #define IF_NTOS_DEBUG(FlagName) if(FALSE)
+ #endif
- #define PAUSE_PROCESSOR __yield();
+ /******************************************************************************
+ * Security Manager Types *
+ ******************************************************************************/
- FORCEINLINE
- VOID
- KeFlushWriteBuffer(VOID)
- {
- __mf ();
- return;
- }
+ /* Simple types */
+ typedef PVOID PSECURITY_DESCRIPTOR;
+ typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION;
+ typedef ULONG ACCESS_MASK, *PACCESS_MASK;
+ typedef PVOID PACCESS_TOKEN;
+ typedef PVOID PSID;
- NTSYSAPI
- PKTHREAD
- NTAPI
- KeGetCurrentThread(VOID);
+ #define DELETE 0x00010000L
+ #define READ_CONTROL 0x00020000L
+ #define WRITE_DAC 0x00040000L
+ #define WRITE_OWNER 0x00080000L
+ #define SYNCHRONIZE 0x00100000L
+ #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
+ #define STANDARD_RIGHTS_READ READ_CONTROL
+ #define STANDARD_RIGHTS_WRITE READ_CONTROL
+ #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
+ #define STANDARD_RIGHTS_ALL 0x001F0000L
+ #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
+ #define ACCESS_SYSTEM_SECURITY 0x01000000L
+ #define MAXIMUM_ALLOWED 0x02000000L
+ #define GENERIC_READ 0x80000000L
+ #define GENERIC_WRITE 0x40000000L
+ #define GENERIC_EXECUTE 0x20000000L
+ #define GENERIC_ALL 0x10000000L
+ typedef struct _GENERIC_MAPPING {
+ ACCESS_MASK GenericRead;
+ ACCESS_MASK GenericWrite;
+ ACCESS_MASK GenericExecute;
+ ACCESS_MASK GenericAll;
+ } GENERIC_MAPPING, *PGENERIC_MAPPING;
- #elif defined(_M_PPC)
+ #define ACL_REVISION 2
+ #define ACL_REVISION_DS 4
- /* Interrupt request levels */
- #define PASSIVE_LEVEL 0
- #define LOW_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define PROFILE_LEVEL 27
- #define CLOCK1_LEVEL 28
- #define CLOCK2_LEVEL 28
- #define IPI_LEVEL 29
- #define POWER_LEVEL 30
- #define HIGH_LEVEL 31
+ #define ACL_REVISION1 1
+ #define ACL_REVISION2 2
+ #define ACL_REVISION3 3
+ #define ACL_REVISION4 4
+ #define MIN_ACL_REVISION ACL_REVISION2
+ #define MAX_ACL_REVISION ACL_REVISION4
- //
- // Used to contain PFNs and PFN counts
- //
- typedef ULONG PFN_COUNT;
- typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
- typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
+ typedef struct _ACL {
+ UCHAR AclRevision;
+ UCHAR Sbz1;
+ USHORT AclSize;
+ USHORT AceCount;
+ USHORT Sbz2;
+ } ACL, *PACL;
+ /* Current security descriptor revision value */
+ #define SECURITY_DESCRIPTOR_REVISION (1)
+ #define SECURITY_DESCRIPTOR_REVISION1 (1)
- typedef struct _KFLOATING_SAVE {
- ULONG Dummy;
- } KFLOATING_SAVE, *PKFLOATING_SAVE;
+ /* Privilege attributes */
+ #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
+ #define SE_PRIVILEGE_ENABLED (0x00000002L)
+ #define SE_PRIVILEGE_REMOVED (0X00000004L)
+ #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
- typedef struct _KPCR_TIB {
- PVOID ExceptionList; /* 00 */
- PVOID StackBase; /* 04 */
- PVOID StackLimit; /* 08 */
- PVOID SubSystemTib; /* 0C */
- _ANONYMOUS_UNION union {
- PVOID FiberData; /* 10 */
- ULONG Version; /* 10 */
- } DUMMYUNIONNAME;
- PVOID ArbitraryUserPointer; /* 14 */
- struct _KPCR_TIB *Self; /* 18 */
- } KPCR_TIB, *PKPCR_TIB; /* 1C */
-
- #define PCR_MINOR_VERSION 1
- #define PCR_MAJOR_VERSION 1
+ #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
+ SE_PRIVILEGE_ENABLED | \
+ SE_PRIVILEGE_REMOVED | \
+ SE_PRIVILEGE_USED_FOR_ACCESS)
- typedef struct _KPCR {
- KPCR_TIB Tib; /* 00 */
- struct _KPCR *Self; /* 1C */
- struct _KPRCB *Prcb; /* 20 */
- KIRQL Irql; /* 24 */
- ULONG IRR; /* 28 */
- ULONG IrrActive; /* 2C */
- ULONG IDR; /* 30 */
- PVOID KdVersionBlock; /* 34 */
- PUSHORT IDT; /* 38 */
- PUSHORT GDT; /* 3C */
- struct _KTSS *TSS; /* 40 */
- USHORT MajorVersion; /* 44 */
- USHORT MinorVersion; /* 46 */
- KAFFINITY SetMember; /* 48 */
- ULONG StallScaleFactor; /* 4C */
- UCHAR SpareUnused; /* 50 */
- UCHAR Number; /* 51 */
- } KPCR, *PKPCR; /* 54 */
+ #include <pshpack4.h>
+ typedef struct _LUID_AND_ATTRIBUTES {
+ LUID Luid;
+ ULONG Attributes;
+ } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
+ #include <poppack.h>
- #define KeGetPcr() PCR
+ typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+ typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
- #define YieldProcessor() __asm__ __volatile__("nop");
+ /* Privilege sets */
+ #define PRIVILEGE_SET_ALL_NECESSARY (1)
- FORCEINLINE
- ULONG
- NTAPI
- KeGetCurrentProcessorNumber(VOID)
- {
- ULONG Number;
- __asm__ __volatile__ (
- "lwz %0, %c1(12)\n"
- : "=r" (Number)
- : "i" (FIELD_OFFSET(KPCR, Number))
- );
- return Number;
- }
+ typedef struct _PRIVILEGE_SET {
+ ULONG PrivilegeCount;
+ ULONG Control;
+ LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+ } PRIVILEGE_SET,*PPRIVILEGE_SET;
- NTHALAPI
- VOID
- FASTCALL
- KfLowerIrql(
- IN KIRQL NewIrql);
- #define KeLowerIrql(a) KfLowerIrql(a)
+ typedef enum _SECURITY_IMPERSONATION_LEVEL {
+ SecurityAnonymous,
+ SecurityIdentification,
+ SecurityImpersonation,
+ SecurityDelegation
+ } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;
- NTHALAPI
- KIRQL
- FASTCALL
- KfRaiseIrql(
- IN KIRQL NewIrql);
- #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+ #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
+ #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
+ #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
+ #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
- NTHALAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToDpcLevel(VOID);
+ #define SECURITY_DYNAMIC_TRACKING (TRUE)
+ #define SECURITY_STATIC_TRACKING (FALSE)
- NTHALAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToSynchLevel(VOID);
+ typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;
+ typedef struct _SECURITY_QUALITY_OF_SERVICE {
+ ULONG Length;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
+ BOOLEAN EffectiveOnly;
+ } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
+ typedef struct _SE_IMPERSONATION_STATE {
+ PACCESS_TOKEN Token;
+ BOOLEAN CopyOnOpen;
+ BOOLEAN EffectiveOnly;
+ SECURITY_IMPERSONATION_LEVEL Level;
+ } SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;
- #elif defined(_M_MIPS)
- #error MIPS Headers are totally incorrect
+ #define OWNER_SECURITY_INFORMATION (0x00000001L)
+ #define GROUP_SECURITY_INFORMATION (0x00000002L)
+ #define DACL_SECURITY_INFORMATION (0x00000004L)
+ #define SACL_SECURITY_INFORMATION (0x00000008L)
+ #define LABEL_SECURITY_INFORMATION (0x00000010L)
- //
- // Used to contain PFNs and PFN counts
- //
- typedef ULONG PFN_COUNT;
- typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
- typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
+ #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
+ #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
+ #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
+ #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
- #define PASSIVE_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define PROFILE_LEVEL 27
- #define IPI_LEVEL 29
- #define HIGH_LEVEL 31
+ typedef enum _SECURITY_OPERATION_CODE {
+ SetSecurityDescriptor,
+ QuerySecurityDescriptor,
+ DeleteSecurityDescriptor,
+ AssignSecurityDescriptor
+ } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
- typedef struct _KPCR {
- struct _KPRCB *Prcb; /* 20 */
- KIRQL Irql; /* 24 */
- ULONG IRR; /* 28 */
- ULONG IDR; /* 30 */
- } KPCR, *PKPCR;
+ #define INITIAL_PRIVILEGE_COUNT 3
- #define KeGetPcr() PCR
+ typedef struct _INITIAL_PRIVILEGE_SET {
+ ULONG PrivilegeCount;
+ ULONG Control;
+ LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
+ } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
- typedef struct _KFLOATING_SAVE {
- } KFLOATING_SAVE, *PKFLOATING_SAVE;
+ #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
+ #define SE_CREATE_TOKEN_PRIVILEGE 2
+ #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
+ #define SE_LOCK_MEMORY_PRIVILEGE 4
+ #define SE_INCREASE_QUOTA_PRIVILEGE 5
+ #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
+ #define SE_TCB_PRIVILEGE 7
+ #define SE_SECURITY_PRIVILEGE 8
+ #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
+ #define SE_LOAD_DRIVER_PRIVILEGE 10
+ #define SE_SYSTEM_PROFILE_PRIVILEGE 11
+ #define SE_SYSTEMTIME_PRIVILEGE 12
+ #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
+ #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
+ #define SE_CREATE_PAGEFILE_PRIVILEGE 15
+ #define SE_CREATE_PERMANENT_PRIVILEGE 16
+ #define SE_BACKUP_PRIVILEGE 17
+ #define SE_RESTORE_PRIVILEGE 18
+ #define SE_SHUTDOWN_PRIVILEGE 19
+ #define SE_DEBUG_PRIVILEGE 20
+ #define SE_AUDIT_PRIVILEGE 21
+ #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
+ #define SE_CHANGE_NOTIFY_PRIVILEGE 23
+ #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
+ #define SE_UNDOCK_PRIVILEGE 25
+ #define SE_SYNC_AGENT_PRIVILEGE 26
+ #define SE_ENABLE_DELEGATION_PRIVILEGE 27
+ #define SE_MANAGE_VOLUME_PRIVILEGE 28
+ #define SE_IMPERSONATE_PRIVILEGE 29
+ #define SE_CREATE_GLOBAL_PRIVILEGE 30
+ #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
+ #define SE_RELABEL_PRIVILEGE 32
+ #define SE_INC_WORKING_SET_PRIVILEGE 33
+ #define SE_TIME_ZONE_PRIVILEGE 34
+ #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
+ #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
- static __inline
- ULONG
- NTAPI
- KeGetCurrentProcessorNumber(VOID)
- {
- return 0;
- }
+ typedef struct _SECURITY_SUBJECT_CONTEXT {
+ PACCESS_TOKEN ClientToken;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ PACCESS_TOKEN PrimaryToken;
+ PVOID ProcessAuditId;
+ } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
- #define YieldProcessor() __asm__ __volatile__("nop");
+ typedef struct _ACCESS_STATE {
+ LUID OperationID;
+ BOOLEAN SecurityEvaluated;
+ BOOLEAN GenerateAudit;
+ BOOLEAN GenerateOnClose;
+ BOOLEAN PrivilegesAllocated;
+ ULONG Flags;
+ ACCESS_MASK RemainingDesiredAccess;
+ ACCESS_MASK PreviouslyGrantedAccess;
+ ACCESS_MASK OriginalDesiredAccess;
+ SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ PVOID AuxData;
+ union {
+ INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
+ PRIVILEGE_SET PrivilegeSet;
+ } Privileges;
+ BOOLEAN AuditPrivileges;
+ UNICODE_STRING ObjectName;
+ UNICODE_STRING ObjectTypeName;
+ } ACCESS_STATE, *PACCESS_STATE;
- #define KeLowerIrql(a) KfLowerIrql(a)
- #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+ typedef VOID
+ (NTAPI *PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR)(
+ _In_ PVOID Vcb,
+ _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
- NTKERNELAPI
- VOID
- NTAPI
- KfLowerIrql(
- IN KIRQL NewIrql);
+ #ifndef _NTLSA_IFS_
- NTKERNELAPI
- KIRQL
- NTAPI
- KfRaiseIrql(
- IN KIRQL NewIrql);
+ #ifndef _NTLSA_AUDIT_
+ #define _NTLSA_AUDIT_
- NTKERNELAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToDpcLevel(VOID);
+ #define SE_MAX_AUDIT_PARAMETERS 32
+ #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
- NTKERNELAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToSynchLevel(VOID);
+ #define SE_ADT_OBJECT_ONLY 0x1
+ #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
+ #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
+ #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
+ #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
+ #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
- #elif defined(_M_ARM)
- #include <armddk.h>
- #else
- #error Unknown Architecture
- #endif
+ #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
+ ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
+ (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
- /******************************************************************************
- * Memory manager Types *
- ******************************************************************************/
+ typedef enum _SE_ADT_PARAMETER_TYPE {
+ SeAdtParmTypeNone = 0,
+ SeAdtParmTypeString,
+ SeAdtParmTypeFileSpec,
+ SeAdtParmTypeUlong,
+ SeAdtParmTypeSid,
+ SeAdtParmTypeLogonId,
+ SeAdtParmTypeNoLogonId,
+ SeAdtParmTypeAccessMask,
+ SeAdtParmTypePrivs,
+ SeAdtParmTypeObjectTypes,
+ SeAdtParmTypeHexUlong,
+ SeAdtParmTypePtr,
+ SeAdtParmTypeTime,
+ SeAdtParmTypeGuid,
+ SeAdtParmTypeLuid,
+ SeAdtParmTypeHexInt64,
+ SeAdtParmTypeStringList,
+ SeAdtParmTypeSidList,
+ SeAdtParmTypeDuration,
+ SeAdtParmTypeUserAccountControl,
+ SeAdtParmTypeNoUac,
+ SeAdtParmTypeMessage,
+ SeAdtParmTypeDateTime,
+ SeAdtParmTypeSockAddr,
+ SeAdtParmTypeSD,
+ SeAdtParmTypeLogonHours,
+ SeAdtParmTypeLogonIdNoSid,
+ SeAdtParmTypeUlongNoConv,
+ SeAdtParmTypeSockAddrNoPort,
+ SeAdtParmTypeAccessReason
+ } SE_ADT_PARAMETER_TYPE, *PSE_ADT_PARAMETER_TYPE;
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- typedef ULONG NODE_REQUIREMENT;
- #define MM_ANY_NODE_OK 0x80000000
- #endif
+ typedef struct _SE_ADT_OBJECT_TYPE {
+ GUID ObjectType;
+ USHORT Flags;
+ USHORT Level;
+ ACCESS_MASK AccessMask;
+ } SE_ADT_OBJECT_TYPE, *PSE_ADT_OBJECT_TYPE;
- #define MM_DONT_ZERO_ALLOCATION 0x00000001
- #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
- #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
- #define MM_ALLOCATE_NO_WAIT 0x00000008
- #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
- #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
+ typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY {
+ SE_ADT_PARAMETER_TYPE Type;
+ ULONG Length;
+ ULONG_PTR Data[2];
+ PVOID Address;
+ } SE_ADT_PARAMETER_ARRAY_ENTRY, *PSE_ADT_PARAMETER_ARRAY_ENTRY;
- #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
- #define MDL_PAGES_LOCKED 0x0002
- #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
- #define MDL_ALLOCATED_FIXED_SIZE 0x0008
- #define MDL_PARTIAL 0x0010
- #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
- #define MDL_IO_PAGE_READ 0x0040
- #define MDL_WRITE_OPERATION 0x0080
- #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
- #define MDL_FREE_EXTRA_PTES 0x0200
- #define MDL_DESCRIBES_AWE 0x0400
- #define MDL_IO_SPACE 0x0800
- #define MDL_NETWORK_HEADER 0x1000
- #define MDL_MAPPING_CAN_FAIL 0x2000
- #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
- #define MDL_INTERNAL 0x8000
+ typedef struct _SE_ADT_ACCESS_REASON {
+ ACCESS_MASK AccessMask;
+ ULONG AccessReasons[32];
+ ULONG ObjectTypeIndex;
+ ULONG AccessGranted;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ } SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON;
- #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
- MDL_PAGES_LOCKED | \
- MDL_SOURCE_IS_NONPAGED_POOL | \
- MDL_PARTIAL_HAS_BEEN_MAPPED | \
- MDL_PARENT_MAPPED_SYSTEM_VA | \
- MDL_SYSTEM_VA | \
- MDL_IO_SPACE)
+ typedef struct _SE_ADT_PARAMETER_ARRAY {
+ ULONG CategoryId;
+ ULONG AuditId;
+ ULONG ParameterCount;
+ ULONG Length;
+ USHORT FlatSubCategoryId;
+ USHORT Type;
+ ULONG Flags;
+ SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[ SE_MAX_AUDIT_PARAMETERS ];
+ } SE_ADT_PARAMETER_ARRAY, *PSE_ADT_PARAMETER_ARRAY;
- #define FLUSH_MULTIPLE_MAXIMUM 32
+ #endif /* !_NTLSA_AUDIT_ */
+ #endif /* !_NTLSA_IFS_ */
+ /******************************************************************************
+ * Power Management Support Types *
+ ******************************************************************************/
- /* Section access rights */
- #define SECTION_QUERY 0x0001
- #define SECTION_MAP_WRITE 0x0002
- #define SECTION_MAP_READ 0x0004
- #define SECTION_MAP_EXECUTE 0x0008
- #define SECTION_EXTEND_SIZE 0x0010
- #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
+ #ifndef _PO_DDK_
+ #define _PO_DDK_
- #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \
- SECTION_MAP_WRITE | \
- SECTION_MAP_READ | \
- SECTION_MAP_EXECUTE | \
- SECTION_EXTEND_SIZE)
+ #define PO_CB_SYSTEM_POWER_POLICY 0
+ #define PO_CB_AC_STATUS 1
+ #define PO_CB_BUTTON_COLLISION 2
+ #define PO_CB_SYSTEM_STATE_LOCK 3
+ #define PO_CB_LID_SWITCH_STATE 4
+ #define PO_CB_PROCESSOR_POWER_POLICY 5
- #define SESSION_QUERY_ACCESS 0x0001
- #define SESSION_MODIFY_ACCESS 0x0002
+ /* Power States/Levels */
+ typedef enum _SYSTEM_POWER_STATE {
+ PowerSystemUnspecified = 0,
+ PowerSystemWorking,
+ PowerSystemSleeping1,
+ PowerSystemSleeping2,
+ PowerSystemSleeping3,
+ PowerSystemHibernate,
+ PowerSystemShutdown,
+ PowerSystemMaximum
+ } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
- #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
- SESSION_QUERY_ACCESS | \
- SESSION_MODIFY_ACCESS)
+ #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
- #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
+ typedef enum _POWER_INFORMATION_LEVEL {
+ SystemPowerPolicyAc,
+ SystemPowerPolicyDc,
+ VerifySystemPolicyAc,
+ VerifySystemPolicyDc,
+ SystemPowerCapabilities,
+ SystemBatteryState,
+ SystemPowerStateHandler,
+ ProcessorStateHandler,
+ SystemPowerPolicyCurrent,
+ AdministratorPowerPolicy,
+ SystemReserveHiberFile,
+ ProcessorInformation,
+ SystemPowerInformation,
+ ProcessorStateHandler2,
+ LastWakeTime,
+ LastSleepTime,
+ SystemExecutionState,
+ SystemPowerStateNotifyHandler,
+ ProcessorPowerPolicyAc,
+ ProcessorPowerPolicyDc,
+ VerifyProcessorPowerPolicyAc,
+ VerifyProcessorPowerPolicyDc,
+ ProcessorPowerPolicyCurrent,
+ SystemPowerStateLogging,
+ SystemPowerLoggingEntry,
+ SetPowerSettingValue,
+ NotifyUserPowerSetting,
+ PowerInformationLevelUnused0,
+ PowerInformationLevelUnused1,
+ SystemVideoState,
+ TraceApplicationPowerMessage,
+ TraceApplicationPowerMessageEnd,
+ ProcessorPerfStates,
+ ProcessorIdleStates,
+ ProcessorCap,
+ SystemWakeSource,
+ SystemHiberFileInformation,
+ TraceServicePowerMessage,
+ ProcessorLoad,
+ PowerShutdownNotification,
+ MonitorCapabilities,
+ SessionPowerInit,
+ SessionDisplayState,
+ PowerRequestCreate,
+ PowerRequestAction,
+ GetPowerRequestList,
+ ProcessorInformationEx,
+ NotifyUserModeLegacyPowerEvent,
+ GroupPark,
+ ProcessorIdleDomains,
+ WakeTimerList,
+ SystemHiberFileSize,
+ PowerInformationLevelMaximum
+ } POWER_INFORMATION_LEVEL;
- #define PAGE_NOACCESS 0x01
- #define PAGE_READONLY 0x02
- #define PAGE_READWRITE 0x04
- #define PAGE_WRITECOPY 0x08
- #define PAGE_EXECUTE 0x10
- #define PAGE_EXECUTE_READ 0x20
- #define PAGE_EXECUTE_READWRITE 0x40
- #define PAGE_EXECUTE_WRITECOPY 0x80
- #define PAGE_GUARD 0x100
- #define PAGE_NOCACHE 0x200
- #define PAGE_WRITECOMBINE 0x400
+ typedef enum {
+ PowerActionNone = 0,
+ PowerActionReserved,
+ PowerActionSleep,
+ PowerActionHibernate,
+ PowerActionShutdown,
+ PowerActionShutdownReset,
+ PowerActionShutdownOff,
+ PowerActionWarmEject
+ } POWER_ACTION, *PPOWER_ACTION;
- #define MEM_COMMIT 0x1000
- #define MEM_RESERVE 0x2000
- #define MEM_DECOMMIT 0x4000
- #define MEM_RELEASE 0x8000
- #define MEM_FREE 0x10000
- #define MEM_PRIVATE 0x20000
- #define MEM_MAPPED 0x40000
- #define MEM_RESET 0x80000
- #define MEM_TOP_DOWN 0x100000
- #define MEM_LARGE_PAGES 0x20000000
- #define MEM_4MB_PAGES 0x80000000
+ typedef enum _DEVICE_POWER_STATE {
+ PowerDeviceUnspecified = 0,
+ PowerDeviceD0,
+ PowerDeviceD1,
+ PowerDeviceD2,
+ PowerDeviceD3,
+ PowerDeviceMaximum
+ } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
- #define SEC_RESERVE 0x4000000
- #define SEC_COMMIT 0x8000000
- #define SEC_LARGE_PAGES 0x80000000
+ typedef enum _MONITOR_DISPLAY_STATE {
+ PowerMonitorOff = 0,
+ PowerMonitorOn,
+ PowerMonitorDim
+ } MONITOR_DISPLAY_STATE, *PMONITOR_DISPLAY_STATE;
- /* Section map options */
- typedef enum _SECTION_INHERIT {
- ViewShare = 1,
- ViewUnmap = 2
- } SECTION_INHERIT;
+ typedef union _POWER_STATE {
+ SYSTEM_POWER_STATE SystemState;
+ DEVICE_POWER_STATE DeviceState;
+ } POWER_STATE, *PPOWER_STATE;
- typedef ULONG PFN_COUNT;
- typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER;
- typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER;
+ typedef enum _POWER_STATE_TYPE {
+ SystemPowerState = 0,
+ DevicePowerState
+ } POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
- _Struct_size_bytes_(_Inexpressible_(sizeof(struct _MDL) +
- (ByteOffset + ByteCount + PAGE_SIZE-1) / PAGE_SIZE * sizeof(PFN_NUMBER)))
- typedef struct _MDL {
- struct _MDL *Next;
- CSHORT Size;
- CSHORT MdlFlags;
- struct _EPROCESS *Process;
- PVOID MappedSystemVa;
- PVOID StartVa;
- ULONG ByteCount;
- ULONG ByteOffset;
- } MDL, *PMDL;
- #if (_MSC_VER >= 1600)
- typedef _Readable_bytes_(_Inexpressible_(polymorphism)) MDL *PMDLX;
- #else
- typedef MDL *PMDLX;
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
+ typedef struct _SYSTEM_POWER_STATE_CONTEXT {
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ ULONG Reserved1:8;
+ ULONG TargetSystemState:4;
+ ULONG EffectiveSystemState:4;
+ ULONG CurrentSystemState:4;
+ ULONG IgnoreHibernationPath:1;
+ ULONG PseudoTransition:1;
+ ULONG Reserved2:10;
+ } DUMMYSTRUCTNAME;
+ ULONG ContextAsUlong;
+ } DUMMYUNIONNAME;
+ } SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT;
#endif
- typedef enum _MEMORY_CACHING_TYPE_ORIG {
- MmFrameBufferCached = 2
- } MEMORY_CACHING_TYPE_ORIG;
+ #if (NTDDI_VERSION >= NTDDI_WIN7)
+ typedef struct _COUNTED_REASON_CONTEXT {
+ ULONG Version;
+ ULONG Flags;
+ _ANONYMOUS_UNION union {
+ _ANONYMOUS_STRUCT struct {
+ UNICODE_STRING ResourceFileName;
+ USHORT ResourceReasonId;
+ ULONG StringCount;
+ PUNICODE_STRING ReasonStrings;
+ } DUMMYSTRUCTNAME;
+ UNICODE_STRING SimpleString;
+ } DUMMYUNIONNAME;
+ } COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT;
+ #endif
- typedef enum _MEMORY_CACHING_TYPE {
- MmNonCached = FALSE,
- MmCached = TRUE,
- MmWriteCombined = MmFrameBufferCached,
- MmHardwareCoherentCached,
- MmNonCachedUnordered,
- MmUSWCCached,
- MmMaximumCacheType
- } MEMORY_CACHING_TYPE;
+ #define IOCTL_QUERY_DEVICE_POWER_STATE \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
- typedef enum _MM_PAGE_PRIORITY {
- LowPagePriority,
- NormalPagePriority = 16,
- HighPagePriority = 32
- } MM_PAGE_PRIORITY;
+ #define IOCTL_SET_DEVICE_WAKE \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
- typedef enum _MM_SYSTEM_SIZE {
- MmSmallSystem,
- MmMediumSystem,
- MmLargeSystem
- } MM_SYSTEMSIZE;
+ #define IOCTL_CANCEL_DEVICE_WAKE \
+ CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
- extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress;
- extern PVOID MmBadPointer;
+ #define ES_SYSTEM_REQUIRED 0x00000001
+ #define ES_DISPLAY_REQUIRED 0x00000002
+ #define ES_USER_PRESENT 0x00000004
+ #define ES_CONTINUOUS 0x80000000
+ typedef ULONG EXECUTION_STATE, *PEXECUTION_STATE;
- /******************************************************************************
- * Executive Types *
- ******************************************************************************/
- #define EX_RUNDOWN_ACTIVE 0x1
- #define EX_RUNDOWN_COUNT_SHIFT 0x1
- #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
+ typedef enum {
+ LT_DONT_CARE,
+ LT_LOWEST_LATENCY
+ } LATENCY_TIME;
- typedef struct _FAST_MUTEX {
- volatile LONG Count;
- PKTHREAD Owner;
- ULONG Contention;
- KEVENT Event;
- ULONG OldIrql;
- } FAST_MUTEX, *PFAST_MUTEX;
+ #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
+ #define DIAGNOSTIC_REASON_VERSION 0
+ #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
+ #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
+ #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
+ #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
+ #endif
- typedef enum _SUITE_TYPE {
- SmallBusiness,
- Enterprise,
- BackOffice,
- CommunicationServer,
- TerminalServer,
- SmallBusinessRestricted,
- EmbeddedNT,
- DataCenter,
- SingleUserTS,
- Personal,
- Blade,
- EmbeddedRestricted,
- SecurityAppliance,
- StorageServer,
- ComputeServer,
- WHServer,
- MaxSuiteType
- } SUITE_TYPE;
+ #define POWER_REQUEST_CONTEXT_VERSION 0
+ #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
+ #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
- typedef enum _EX_POOL_PRIORITY {
- LowPoolPriority,
- LowPoolPrioritySpecialPoolOverrun = 8,
- LowPoolPrioritySpecialPoolUnderrun = 9,
- NormalPoolPriority = 16,
- NormalPoolPrioritySpecialPoolOverrun = 24,
- NormalPoolPrioritySpecialPoolUnderrun = 25,
- HighPoolPriority = 32,
- HighPoolPrioritySpecialPoolOverrun = 40,
- HighPoolPrioritySpecialPoolUnderrun = 41
- } EX_POOL_PRIORITY;
+ #define PowerRequestMaximum 3
- #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
- #define LOOKASIDE_ALIGN
- #else
- #define LOOKASIDE_ALIGN /* FIXME: DECLSPEC_CACHEALIGN */
- #endif
+ typedef enum _POWER_REQUEST_TYPE {
+ PowerRequestDisplayRequired,
+ PowerRequestSystemRequired,
+ PowerRequestAwayModeRequired
+ } POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE;
- typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
+ #if (NTDDI_VERSION >= NTDDI_WINXP)
- _IRQL_requires_same_
- _Function_class_(ALLOCATE_FUNCTION)
- typedef PVOID
- (NTAPI *PALLOCATE_FUNCTION)(
- _In_ POOL_TYPE PoolType,
- _In_ SIZE_T NumberOfBytes,
- _In_ ULONG Tag);
+ #define PDCAP_D0_SUPPORTED 0x00000001
+ #define PDCAP_D1_SUPPORTED 0x00000002
+ #define PDCAP_D2_SUPPORTED 0x00000004
+ #define PDCAP_D3_SUPPORTED 0x00000008
+ #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
+ #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
+ #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
+ #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
+ #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
- _IRQL_requires_same_
- _Function_class_(ALLOCATE_FUNCTION_EX)
- typedef PVOID
- (NTAPI *PALLOCATE_FUNCTION_EX)(
- _In_ POOL_TYPE PoolType,
- _In_ SIZE_T NumberOfBytes,
- _In_ ULONG Tag,
- _Inout_ PLOOKASIDE_LIST_EX Lookaside);
+ typedef struct CM_Power_Data_s {
+ ULONG PD_Size;
+ DEVICE_POWER_STATE PD_MostRecentPowerState;
+ ULONG PD_Capabilities;
+ ULONG PD_D1Latency;
+ ULONG PD_D2Latency;
+ ULONG PD_D3Latency;
+ DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum];
+ SYSTEM_POWER_STATE PD_DeepestSystemWake;
+ } CM_POWER_DATA, *PCM_POWER_DATA;
- _IRQL_requires_same_
- _Function_class_(FREE_FUNCTION)
- typedef VOID
- (NTAPI *PFREE_FUNCTION)(
- _In_ PVOID Buffer);
+ #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
- _IRQL_requires_same_
- _Function_class_(FREE_FUNCTION_EX)
- typedef VOID
- (NTAPI *PFREE_FUNCTION_EX)(
- _In_ PVOID Buffer,
- _Inout_ PLOOKASIDE_LIST_EX Lookaside);
+ typedef enum _SYSTEM_POWER_CONDITION {
+ PoAc,
+ PoDc,
+ PoHot,
+ PoConditionMaximum
+ } SYSTEM_POWER_CONDITION;
- _IRQL_requires_same_
- _Function_class_(CALLBACK_FUNCTION)
- typedef VOID
- (NTAPI CALLBACK_FUNCTION)(
- _In_opt_ PVOID CallbackContext,
- _In_opt_ PVOID Argument1,
- _In_opt_ PVOID Argument2);
- typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION;
+ typedef struct _SET_POWER_SETTING_VALUE {
+ ULONG Version;
+ GUID Guid;
+ SYSTEM_POWER_CONDITION PowerCondition;
+ ULONG DataLength;
+ UCHAR Data[ANYSIZE_ARRAY];
+ } SET_POWER_SETTING_VALUE, *PSET_POWER_SETTING_VALUE;
- #define GENERAL_LOOKASIDE_LAYOUT \
- _ANONYMOUS_UNION union { \
- SLIST_HEADER ListHead; \
- SINGLE_LIST_ENTRY SingleListHead; \
- } DUMMYUNIONNAME; \
- USHORT Depth; \
- USHORT MaximumDepth; \
- ULONG TotalAllocates; \
- _ANONYMOUS_UNION union { \
- ULONG AllocateMisses; \
- ULONG AllocateHits; \
- } DUMMYUNIONNAME2; \
- ULONG TotalFrees; \
- _ANONYMOUS_UNION union { \
- ULONG FreeMisses; \
- ULONG FreeHits; \
- } DUMMYUNIONNAME3; \
- POOL_TYPE Type; \
- ULONG Tag; \
- ULONG Size; \
- _ANONYMOUS_UNION union { \
- PALLOCATE_FUNCTION_EX AllocateEx; \
- PALLOCATE_FUNCTION Allocate; \
- } DUMMYUNIONNAME4; \
- _ANONYMOUS_UNION union { \
- PFREE_FUNCTION_EX FreeEx; \
- PFREE_FUNCTION Free; \
- } DUMMYUNIONNAME5; \
- LIST_ENTRY ListEntry; \
- ULONG LastTotalAllocates; \
- _ANONYMOUS_UNION union { \
- ULONG LastAllocateMisses; \
- ULONG LastAllocateHits; \
- } DUMMYUNIONNAME6; \
- ULONG Future[2];
-
- typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
- GENERAL_LOOKASIDE_LAYOUT
- } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
-
- typedef struct _GENERAL_LOOKASIDE_POOL {
- GENERAL_LOOKASIDE_LAYOUT
- } GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL;
-
- #define LOOKASIDE_CHECK(f) \
- C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
-
- LOOKASIDE_CHECK(TotalFrees);
- LOOKASIDE_CHECK(Tag);
- LOOKASIDE_CHECK(Future);
-
- typedef struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST {
- GENERAL_LOOKASIDE L;
- #if !defined(_AMD64_) && !defined(_IA64_)
- FAST_MUTEX Lock__ObsoleteButDoNotDelete;
- #endif
- } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
+ #define POWER_SETTING_VALUE_VERSION (0x1)
- typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
- GENERAL_LOOKASIDE L;
- #if !defined(_AMD64_) && !defined(_IA64_)
- KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
- #endif
- } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
+ typedef struct _NOTIFY_USER_POWER_SETTING {
+ GUID Guid;
+ } NOTIFY_USER_POWER_SETTING, *PNOTIFY_USER_POWER_SETTING;
- #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
+ typedef struct _APPLICATIONLAUNCH_SETTING_VALUE {
+ LARGE_INTEGER ActivationTime;
+ ULONG Flags;
+ ULONG ButtonInstanceID;
+ } APPLICATIONLAUNCH_SETTING_VALUE, *PAPPLICATIONLAUNCH_SETTING_VALUE;
- typedef struct _LOOKASIDE_LIST_EX {
- GENERAL_LOOKASIDE_POOL L;
- } LOOKASIDE_LIST_EX;
+ typedef enum _POWER_PLATFORM_ROLE {
+ PlatformRoleUnspecified = 0,
+ PlatformRoleDesktop,
+ PlatformRoleMobile,
+ PlatformRoleWorkstation,
+ PlatformRoleEnterpriseServer,
+ PlatformRoleSOHOServer,
+ PlatformRoleAppliancePC,
+ PlatformRolePerformanceServer,
+ PlatformRoleMaximum
+ } POWER_PLATFORM_ROLE;
- #if (NTDDI_VERSION >= NTDDI_VISTA)
+ #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
+ typedef struct {
+ ULONG Granularity;
+ ULONG Capacity;
+ } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
+ #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
- #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
- #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
+ #endif /* !_PO_DDK_ */
- #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
- #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
+ #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
+ #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
+ #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
+ #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+ DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A);
+ DEFINE_GUID(GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C);
+ DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E);
+ DEFINE_GUID(NO_SUBGROUP_GUID, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94);
+ DEFINE_GUID(ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0);
+ DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7);
+ DEFINE_GUID(GUID_ACTIVE_POWERSCHEME, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63);
+ DEFINE_GUID(GUID_VIDEO_SUBGROUP, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99);
+ DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E);
+ DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63);
+ DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64);
+ DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
+ DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B);
+ DEFINE_GUID(GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA);
+ DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
+ DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
+ DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
+ DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
+ DEFINE_GUID(GUID_SESSION_DISPLAY_STATE, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67);
+ DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
+ DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23);
+ DEFINE_GUID(GUID_DISK_SUBGROUP, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42);
+ DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E);
+ DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63);
+ DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67);
+ DEFINE_GUID(GUID_SLEEP_SUBGROUP, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20);
+ DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70);
+ DEFINE_GUID(GUID_STANDBY_TIMEOUT, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA);
+ DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0);
+ DEFINE_GUID(GUID_HIBERNATE_TIMEOUT, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64);
+ DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E);
+ DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
+ DEFINE_GUID(GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0);
+ DEFINE_GUID(GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87);
+ DEFINE_GUID(GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab);
+ DEFINE_GUID(GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D);
+ DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2);
+ DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47);
+ DEFINE_GUID(GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80);
+ DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78);
+ DEFINE_GUID(GUID_SLEEPBUTTON_ACTION, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB);
+ DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93);
+ DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5);
+ DEFINE_GUID(GUID_LIDCLOSE_ACTION, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36);
+ DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B);
+ DEFINE_GUID(GUID_LIDOPEN_POWERSTATE, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4);
+ DEFINE_GUID(GUID_BATTERY_SUBGROUP, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65);
+ DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3);
+ DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00);
+ DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36);
+ DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC);
+ DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C);
+ DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb);
+ DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
+ DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
+ DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d);
+ DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6);
+ DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
+ DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
+ DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
+ DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
+ DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
+ DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
+ DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
+ DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
+ DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
+ DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
+ DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
+ DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
+ DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
+ DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
+ DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
+ DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
+ DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51);
+ DEFINE_GUID(GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19);
+ DEFINE_GUID(GUID_ACDC_POWER_SOURCE, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48);
+ DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3);
+ DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1);
+ DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1);
+ DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E);
+ DEFINE_GUID(GUID_APPLAUNCH_BUTTON, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA);
+ DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20);
+ DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5);
+ DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6);
- typedef struct _EX_RUNDOWN_REF {
- _ANONYMOUS_UNION union {
- volatile ULONG_PTR Count;
- volatile PVOID Ptr;
- } DUMMYUNIONNAME;
- } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
+ #define PERFSTATE_POLICY_CHANGE_IDEAL 0
+ #define PERFSTATE_POLICY_CHANGE_SINGLE 1
+ #define PERFSTATE_POLICY_CHANGE_ROCKET 2
+ #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
- typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
+ #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
+ #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
- typedef enum _WORK_QUEUE_TYPE {
- CriticalWorkQueue,
- DelayedWorkQueue,
- HyperCriticalWorkQueue,
- MaximumWorkQueue
- } WORK_QUEUE_TYPE;
+ #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
+ #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
+ _Function_class_(REQUEST_POWER_COMPLETE)
_IRQL_requires_same_
- _Function_class_(WORKER_THREAD_ROUTINE)
typedef VOID
- (NTAPI WORKER_THREAD_ROUTINE)(
- _In_ PVOID Parameter);
- typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE;
+ (NTAPI REQUEST_POWER_COMPLETE)(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _In_ UCHAR MinorFunction,
+ _In_ POWER_STATE PowerState,
+ _In_opt_ PVOID Context,
+ _In_ struct _IO_STATUS_BLOCK *IoStatus);
+ typedef REQUEST_POWER_COMPLETE *PREQUEST_POWER_COMPLETE;
- typedef struct _WORK_QUEUE_ITEM {
- LIST_ENTRY List;
- PWORKER_THREAD_ROUTINE WorkerRoutine;
- volatile PVOID Parameter;
- } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
+ _Function_class_(POWER_SETTING_CALLBACK)
+ _IRQL_requires_same_
+ typedef NTSTATUS
+ (NTAPI POWER_SETTING_CALLBACK)(
+ _In_ LPCGUID SettingGuid,
+ _In_reads_bytes_(ValueLength) PVOID Value,
+ _In_ ULONG ValueLength,
+ _Inout_opt_ PVOID Context);
+ typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK;
- typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
+ /******************************************************************************
+ * Configuration Manager Types *
+ ******************************************************************************/
- typedef struct _OWNER_ENTRY {
- ERESOURCE_THREAD OwnerThread;
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- ULONG IoPriorityBoosted:1;
- ULONG OwnerReferenced:1;
- ULONG OwnerCount:30;
- } DUMMYSTRUCTNAME;
- ULONG TableSize;
- } DUMMYUNIONNAME;
- } OWNER_ENTRY, *POWNER_ENTRY;
+ /* Resource list definitions */
+ typedef int CM_RESOURCE_TYPE;
- typedef struct _ERESOURCE {
- LIST_ENTRY SystemResourcesList;
- POWNER_ENTRY OwnerTable;
- SHORT ActiveCount;
- USHORT Flag;
- volatile PKSEMAPHORE SharedWaiters;
- volatile PKEVENT ExclusiveWaiters;
- OWNER_ENTRY OwnerEntry;
- ULONG ActiveEntries;
- ULONG ContentionCount;
- ULONG NumberOfSharedWaiters;
- ULONG NumberOfExclusiveWaiters;
- #if defined(_WIN64)
- PVOID Reserved2;
- #endif
- _ANONYMOUS_UNION union {
- PVOID Address;
- ULONG_PTR CreatorBackTraceIndex;
- } DUMMYUNIONNAME;
- KSPIN_LOCK SpinLock;
- } ERESOURCE, *PERESOURCE;
+ #define CmResourceTypeNull 0
+ #define CmResourceTypePort 1
+ #define CmResourceTypeInterrupt 2
+ #define CmResourceTypeMemory 3
+ #define CmResourceTypeDma 4
+ #define CmResourceTypeDeviceSpecific 5
+ #define CmResourceTypeBusNumber 6
+ #define CmResourceTypeNonArbitrated 128
+ #define CmResourceTypeConfigData 128
+ #define CmResourceTypeDevicePrivate 129
+ #define CmResourceTypePcCardConfig 130
+ #define CmResourceTypeMfCardConfig 131
- /* ERESOURCE.Flag */
- #define ResourceNeverExclusive 0x0010
- #define ResourceReleaseByOtherThread 0x0020
- #define ResourceOwnedExclusive 0x0080
+ /* KEY_VALUE_Xxx.Type */
+ #define REG_NONE 0
+ #define REG_SZ 1
+ #define REG_EXPAND_SZ 2
+ #define REG_BINARY 3
+ #define REG_DWORD 4
+ #define REG_DWORD_LITTLE_ENDIAN 4
+ #define REG_DWORD_BIG_ENDIAN 5
+ #define REG_LINK 6
+ #define REG_MULTI_SZ 7
+ #define REG_RESOURCE_LIST 8
+ #define REG_FULL_RESOURCE_DESCRIPTOR 9
+ #define REG_RESOURCE_REQUIREMENTS_LIST 10
+ #define REG_QWORD 11
+ #define REG_QWORD_LITTLE_ENDIAN 11
- #define RESOURCE_HASH_TABLE_SIZE 64
+ /* Registry Access Rights */
+ #define KEY_QUERY_VALUE (0x0001)
+ #define KEY_SET_VALUE (0x0002)
+ #define KEY_CREATE_SUB_KEY (0x0004)
+ #define KEY_ENUMERATE_SUB_KEYS (0x0008)
+ #define KEY_NOTIFY (0x0010)
+ #define KEY_CREATE_LINK (0x0020)
+ #define KEY_WOW64_32KEY (0x0200)
+ #define KEY_WOW64_64KEY (0x0100)
+ #define KEY_WOW64_RES (0x0300)
- typedef struct _RESOURCE_HASH_ENTRY {
- LIST_ENTRY ListEntry;
- PVOID Address;
- ULONG ContentionCount;
- ULONG Number;
- } RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY;
+ #define KEY_READ ((STANDARD_RIGHTS_READ |\
+ KEY_QUERY_VALUE |\
+ KEY_ENUMERATE_SUB_KEYS |\
+ KEY_NOTIFY) \
+ & \
+ (~SYNCHRONIZE))
- typedef struct _RESOURCE_PERFORMANCE_DATA {
- ULONG ActiveResourceCount;
- ULONG TotalResourceCount;
- ULONG ExclusiveAcquire;
- ULONG SharedFirstLevel;
- ULONG SharedSecondLevel;
- ULONG StarveFirstLevel;
- ULONG StarveSecondLevel;
- ULONG WaitForExclusive;
- ULONG OwnerTableExpands;
- ULONG MaximumTableExpand;
- LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
- } RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA;
+ #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
+ KEY_SET_VALUE |\
+ KEY_CREATE_SUB_KEY) \
+ & \
+ (~SYNCHRONIZE))
- /* Global debug flag */
- #if DEVL
- extern ULONG NtGlobalFlag;
- #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
- #else
- #define IF_NTOS_DEBUG(FlagName) if(FALSE)
- #endif
+ #define KEY_EXECUTE ((KEY_READ) \
+ & \
+ (~SYNCHRONIZE))
- /******************************************************************************
- * Security Manager Types *
- ******************************************************************************/
+ #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
+ KEY_QUERY_VALUE |\
+ KEY_SET_VALUE |\
+ KEY_CREATE_SUB_KEY |\
+ KEY_ENUMERATE_SUB_KEYS |\
+ KEY_NOTIFY |\
+ KEY_CREATE_LINK) \
+ & \
+ (~SYNCHRONIZE))
- /* Simple types */
- typedef PVOID PSECURITY_DESCRIPTOR;
- typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION;
- typedef ULONG ACCESS_MASK, *PACCESS_MASK;
- typedef PVOID PACCESS_TOKEN;
- typedef PVOID PSID;
+ /* Registry Open/Create Options */
+ #define REG_OPTION_RESERVED (0x00000000L)
+ #define REG_OPTION_NON_VOLATILE (0x00000000L)
+ #define REG_OPTION_VOLATILE (0x00000001L)
+ #define REG_OPTION_CREATE_LINK (0x00000002L)
+ #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
+ #define REG_OPTION_OPEN_LINK (0x00000008L)
- #define DELETE 0x00010000L
- #define READ_CONTROL 0x00020000L
- #define WRITE_DAC 0x00040000L
- #define WRITE_OWNER 0x00080000L
- #define SYNCHRONIZE 0x00100000L
- #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
- #define STANDARD_RIGHTS_READ READ_CONTROL
- #define STANDARD_RIGHTS_WRITE READ_CONTROL
- #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
- #define STANDARD_RIGHTS_ALL 0x001F0000L
- #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
- #define ACCESS_SYSTEM_SECURITY 0x01000000L
- #define MAXIMUM_ALLOWED 0x02000000L
- #define GENERIC_READ 0x80000000L
- #define GENERIC_WRITE 0x40000000L
- #define GENERIC_EXECUTE 0x20000000L
- #define GENERIC_ALL 0x10000000L
+ #define REG_LEGAL_OPTION \
+ (REG_OPTION_RESERVED |\
+ REG_OPTION_NON_VOLATILE |\
+ REG_OPTION_VOLATILE |\
+ REG_OPTION_CREATE_LINK |\
+ REG_OPTION_BACKUP_RESTORE |\
+ REG_OPTION_OPEN_LINK)
- typedef struct _GENERIC_MAPPING {
- ACCESS_MASK GenericRead;
- ACCESS_MASK GenericWrite;
- ACCESS_MASK GenericExecute;
- ACCESS_MASK GenericAll;
- } GENERIC_MAPPING, *PGENERIC_MAPPING;
+ #define REG_OPEN_LEGAL_OPTION \
+ (REG_OPTION_RESERVED |\
+ REG_OPTION_BACKUP_RESTORE |\
+ REG_OPTION_OPEN_LINK)
- #define ACL_REVISION 2
- #define ACL_REVISION_DS 4
+ #define REG_STANDARD_FORMAT 1
+ #define REG_LATEST_FORMAT 2
+ #define REG_NO_COMPRESSION 4
- #define ACL_REVISION1 1
- #define ACL_REVISION2 2
- #define ACL_REVISION3 3
- #define ACL_REVISION4 4
- #define MIN_ACL_REVISION ACL_REVISION2
- #define MAX_ACL_REVISION ACL_REVISION4
+ /* Key creation/open disposition */
+ #define REG_CREATED_NEW_KEY (0x00000001L)
+ #define REG_OPENED_EXISTING_KEY (0x00000002L)
- typedef struct _ACL {
- UCHAR AclRevision;
- UCHAR Sbz1;
- USHORT AclSize;
- USHORT AceCount;
- USHORT Sbz2;
- } ACL, *PACL;
+ /* Key restore & hive load flags */
+ #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
+ #define REG_REFRESH_HIVE (0x00000002L)
+ #define REG_NO_LAZY_FLUSH (0x00000004L)
+ #define REG_FORCE_RESTORE (0x00000008L)
+ #define REG_APP_HIVE (0x00000010L)
+ #define REG_PROCESS_PRIVATE (0x00000020L)
+ #define REG_START_JOURNAL (0x00000040L)
+ #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
+ #define REG_HIVE_NO_RM (0x00000100L)
+ #define REG_HIVE_SINGLE_LOG (0x00000200L)
+ #define REG_BOOT_HIVE (0x00000400L)
- /* Current security descriptor revision value */
- #define SECURITY_DESCRIPTOR_REVISION (1)
- #define SECURITY_DESCRIPTOR_REVISION1 (1)
+ /* Unload Flags */
+ #define REG_FORCE_UNLOAD 1
- /* Privilege attributes */
- #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
- #define SE_PRIVILEGE_ENABLED (0x00000002L)
- #define SE_PRIVILEGE_REMOVED (0X00000004L)
- #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
+ /* Notify Filter Values */
+ #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
+ #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
+ #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
+ #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
- #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
- SE_PRIVILEGE_ENABLED | \
- SE_PRIVILEGE_REMOVED | \
- SE_PRIVILEGE_USED_FOR_ACCESS)
+ #define REG_LEGAL_CHANGE_FILTER \
+ (REG_NOTIFY_CHANGE_NAME |\
+ REG_NOTIFY_CHANGE_ATTRIBUTES |\
+ REG_NOTIFY_CHANGE_LAST_SET |\
+ REG_NOTIFY_CHANGE_SECURITY)
#include <pshpack4.h>
- typedef struct _LUID_AND_ATTRIBUTES {
- LUID Luid;
- ULONG Attributes;
- } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
- #include <poppack.h>
-
- typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
- typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
-
- /* Privilege sets */
- #define PRIVILEGE_SET_ALL_NECESSARY (1)
-
- typedef struct _PRIVILEGE_SET {
- ULONG PrivilegeCount;
- ULONG Control;
- LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
- } PRIVILEGE_SET,*PPRIVILEGE_SET;
-
- typedef enum _SECURITY_IMPERSONATION_LEVEL {
- SecurityAnonymous,
- SecurityIdentification,
- SecurityImpersonation,
- SecurityDelegation
- } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;
-
- #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
- #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
- #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
- #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
-
- #define SECURITY_DYNAMIC_TRACKING (TRUE)
- #define SECURITY_STATIC_TRACKING (FALSE)
-
- typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;
-
- typedef struct _SECURITY_QUALITY_OF_SERVICE {
- ULONG Length;
- SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
- SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
- BOOLEAN EffectiveOnly;
- } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
-
- typedef struct _SE_IMPERSONATION_STATE {
- PACCESS_TOKEN Token;
- BOOLEAN CopyOnOpen;
- BOOLEAN EffectiveOnly;
- SECURITY_IMPERSONATION_LEVEL Level;
- } SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;
-
- #define OWNER_SECURITY_INFORMATION (0x00000001L)
- #define GROUP_SECURITY_INFORMATION (0x00000002L)
- #define DACL_SECURITY_INFORMATION (0x00000004L)
- #define SACL_SECURITY_INFORMATION (0x00000008L)
- #define LABEL_SECURITY_INFORMATION (0x00000010L)
-
- #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
- #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
- #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
- #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
-
- typedef enum _SECURITY_OPERATION_CODE {
- SetSecurityDescriptor,
- QuerySecurityDescriptor,
- DeleteSecurityDescriptor,
- AssignSecurityDescriptor
- } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
+ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
+ UCHAR Type;
+ UCHAR ShareDisposition;
+ USHORT Flags;
+ union {
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Generic;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Port;
+ struct {
+ #if defined(NT_PROCESSOR_GROUPS)
+ USHORT Level;
+ USHORT Group;
+ #else
+ ULONG Level;
+ #endif
+ ULONG Vector;
+ KAFFINITY Affinity;
+ } Interrupt;
+ #if (NTDDI_VERSION >= NTDDI_LONGHORN)
+ struct {
+ _ANONYMOUS_UNION union {
+ struct {
+ #if defined(NT_PROCESSOR_GROUPS)
+ USHORT Group;
+ #else
+ USHORT Reserved;
+ #endif
+ USHORT MessageCount;
+ ULONG Vector;
+ KAFFINITY Affinity;
+ } Raw;
+ struct {
+ #if defined(NT_PROCESSOR_GROUPS)
+ USHORT Level;
+ USHORT Group;
+ #else
+ ULONG Level;
+ #endif
+ ULONG Vector;
+ KAFFINITY Affinity;
+ } Translated;
+ } DUMMYUNIONNAME;
+ } MessageInterrupt;
+ #endif
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Memory;
+ struct {
+ ULONG Channel;
+ ULONG Port;
+ ULONG Reserved1;
+ } Dma;
+ struct {
+ ULONG Data[3];
+ } DevicePrivate;
+ struct {
+ ULONG Start;
+ ULONG Length;
+ ULONG Reserved;
+ } BusNumber;
+ struct {
+ ULONG DataSize;
+ ULONG Reserved1;
+ ULONG Reserved2;
+ } DeviceSpecificData;
+ #if (NTDDI_VERSION >= NTDDI_LONGHORN)
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length40;
+ } Memory40;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length48;
+ } Memory48;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length64;
+ } Memory64;
+ #endif
+ } u;
+ } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
+ #include <poppack.h>
- #define INITIAL_PRIVILEGE_COUNT 3
+ /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
+ #define CmResourceTypeNull 0
+ #define CmResourceTypePort 1
+ #define CmResourceTypeInterrupt 2
+ #define CmResourceTypeMemory 3
+ #define CmResourceTypeDma 4
+ #define CmResourceTypeDeviceSpecific 5
+ #define CmResourceTypeBusNumber 6
+ #define CmResourceTypeMemoryLarge 7
+ #define CmResourceTypeNonArbitrated 128
+ #define CmResourceTypeConfigData 128
+ #define CmResourceTypeDevicePrivate 129
+ #define CmResourceTypePcCardConfig 130
+ #define CmResourceTypeMfCardConfig 131
- typedef struct _INITIAL_PRIVILEGE_SET {
- ULONG PrivilegeCount;
- ULONG Control;
- LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
- } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
+ /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
+ typedef enum _CM_SHARE_DISPOSITION {
+ CmResourceShareUndetermined = 0,
+ CmResourceShareDeviceExclusive,
+ CmResourceShareDriverExclusive,
+ CmResourceShareShared
+ } CM_SHARE_DISPOSITION;
- #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
- #define SE_CREATE_TOKEN_PRIVILEGE 2
- #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
- #define SE_LOCK_MEMORY_PRIVILEGE 4
- #define SE_INCREASE_QUOTA_PRIVILEGE 5
- #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
- #define SE_TCB_PRIVILEGE 7
- #define SE_SECURITY_PRIVILEGE 8
- #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
- #define SE_LOAD_DRIVER_PRIVILEGE 10
- #define SE_SYSTEM_PROFILE_PRIVILEGE 11
- #define SE_SYSTEMTIME_PRIVILEGE 12
- #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
- #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
- #define SE_CREATE_PAGEFILE_PRIVILEGE 15
- #define SE_CREATE_PERMANENT_PRIVILEGE 16
- #define SE_BACKUP_PRIVILEGE 17
- #define SE_RESTORE_PRIVILEGE 18
- #define SE_SHUTDOWN_PRIVILEGE 19
- #define SE_DEBUG_PRIVILEGE 20
- #define SE_AUDIT_PRIVILEGE 21
- #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
- #define SE_CHANGE_NOTIFY_PRIVILEGE 23
- #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
- #define SE_UNDOCK_PRIVILEGE 25
- #define SE_SYNC_AGENT_PRIVILEGE 26
- #define SE_ENABLE_DELEGATION_PRIVILEGE 27
- #define SE_MANAGE_VOLUME_PRIVILEGE 28
- #define SE_IMPERSONATE_PRIVILEGE 29
- #define SE_CREATE_GLOBAL_PRIVILEGE 30
- #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
- #define SE_RELABEL_PRIVILEGE 32
- #define SE_INC_WORKING_SET_PRIVILEGE 33
- #define SE_TIME_ZONE_PRIVILEGE 34
- #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
- #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
+ /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
+ #define CM_RESOURCE_PORT_MEMORY 0x0000
+ #define CM_RESOURCE_PORT_IO 0x0001
+ #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
+ #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
+ #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
+ #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
+ #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
+ #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
+ #define CM_RESOURCE_PORT_BAR 0x0100
- typedef struct _SECURITY_SUBJECT_CONTEXT {
- PACCESS_TOKEN ClientToken;
- SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
- PACCESS_TOKEN PrimaryToken;
- PVOID ProcessAuditId;
- } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
+ /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
+ #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
+ #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
+ #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
+ #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
- typedef struct _ACCESS_STATE {
- LUID OperationID;
- BOOLEAN SecurityEvaluated;
- BOOLEAN GenerateAudit;
- BOOLEAN GenerateOnClose;
- BOOLEAN PrivilegesAllocated;
- ULONG Flags;
- ACCESS_MASK RemainingDesiredAccess;
- ACCESS_MASK PreviouslyGrantedAccess;
- ACCESS_MASK OriginalDesiredAccess;
- SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PVOID AuxData;
- union {
- INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
- PRIVILEGE_SET PrivilegeSet;
- } Privileges;
- BOOLEAN AuditPrivileges;
- UNICODE_STRING ObjectName;
- UNICODE_STRING ObjectTypeName;
- } ACCESS_STATE, *PACCESS_STATE;
+ #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
- typedef VOID
- (NTAPI *PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR)(
- _In_ PVOID Vcb,
- _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
+ #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
- #ifndef _NTLSA_IFS_
+ /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
+ #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
+ #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
+ #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
+ #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
+ #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
+ #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
+ #define CM_RESOURCE_MEMORY_24 0x0010
+ #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
+ #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
+ #define CM_RESOURCE_MEMORY_BAR 0x0080
+ #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
- #ifndef _NTLSA_AUDIT_
- #define _NTLSA_AUDIT_
+ #define CM_RESOURCE_MEMORY_LARGE 0x0E00
+ #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
+ #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
+ #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
- #define SE_MAX_AUDIT_PARAMETERS 32
- #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
+ #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
+ #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
+ #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
- #define SE_ADT_OBJECT_ONLY 0x1
+ /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
+ #define CM_RESOURCE_DMA_8 0x0000
+ #define CM_RESOURCE_DMA_16 0x0001
+ #define CM_RESOURCE_DMA_32 0x0002
+ #define CM_RESOURCE_DMA_8_AND_16 0x0004
+ #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
+ #define CM_RESOURCE_DMA_TYPE_A 0x0010
+ #define CM_RESOURCE_DMA_TYPE_B 0x0020
+ #define CM_RESOURCE_DMA_TYPE_F 0x0040
- #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
- #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
- #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
- #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
- #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
+ typedef struct _DEVICE_FLAGS {
+ ULONG Failed:1;
+ ULONG ReadOnly:1;
+ ULONG Removable:1;
+ ULONG ConsoleIn:1;
+ ULONG ConsoleOut:1;
+ ULONG Input:1;
+ ULONG Output:1;
+ } DEVICE_FLAGS, *PDEVICE_FLAGS;
- #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
- ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
- (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
+ typedef enum _INTERFACE_TYPE {
+ InterfaceTypeUndefined = -1,
+ Internal,
+ Isa,
+ Eisa,
+ MicroChannel,
+ TurboChannel,
+ PCIBus,
+ VMEBus,
+ NuBus,
+ PCMCIABus,
+ CBus,
+ MPIBus,
+ MPSABus,
+ ProcessorInternal,
+ InternalPowerBus,
+ PNPISABus,
+ PNPBus,
+ Vmcs,
+ MaximumInterfaceType
+ } INTERFACE_TYPE, *PINTERFACE_TYPE;
- typedef enum _SE_ADT_PARAMETER_TYPE {
- SeAdtParmTypeNone = 0,
- SeAdtParmTypeString,
- SeAdtParmTypeFileSpec,
- SeAdtParmTypeUlong,
- SeAdtParmTypeSid,
- SeAdtParmTypeLogonId,
- SeAdtParmTypeNoLogonId,
- SeAdtParmTypeAccessMask,
- SeAdtParmTypePrivs,
- SeAdtParmTypeObjectTypes,
- SeAdtParmTypeHexUlong,
- SeAdtParmTypePtr,
- SeAdtParmTypeTime,
- SeAdtParmTypeGuid,
- SeAdtParmTypeLuid,
- SeAdtParmTypeHexInt64,
- SeAdtParmTypeStringList,
- SeAdtParmTypeSidList,
- SeAdtParmTypeDuration,
- SeAdtParmTypeUserAccountControl,
- SeAdtParmTypeNoUac,
- SeAdtParmTypeMessage,
- SeAdtParmTypeDateTime,
- SeAdtParmTypeSockAddr,
- SeAdtParmTypeSD,
- SeAdtParmTypeLogonHours,
- SeAdtParmTypeLogonIdNoSid,
- SeAdtParmTypeUlongNoConv,
- SeAdtParmTypeSockAddrNoPort,
- SeAdtParmTypeAccessReason
- } SE_ADT_PARAMETER_TYPE, *PSE_ADT_PARAMETER_TYPE;
+ typedef struct _CM_COMPONENT_INFORMATION {
+ DEVICE_FLAGS Flags;
+ ULONG Version;
+ ULONG Key;
+ KAFFINITY AffinityMask;
+ } CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION;
- typedef struct _SE_ADT_OBJECT_TYPE {
- GUID ObjectType;
- USHORT Flags;
- USHORT Level;
- ACCESS_MASK AccessMask;
- } SE_ADT_OBJECT_TYPE, *PSE_ADT_OBJECT_TYPE;
+ typedef struct _CM_ROM_BLOCK {
+ ULONG Address;
+ ULONG Size;
+ } CM_ROM_BLOCK, *PCM_ROM_BLOCK;
- typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY {
- SE_ADT_PARAMETER_TYPE Type;
- ULONG Length;
- ULONG_PTR Data[2];
- PVOID Address;
- } SE_ADT_PARAMETER_ARRAY_ENTRY, *PSE_ADT_PARAMETER_ARRAY_ENTRY;
+ typedef struct _CM_PARTIAL_RESOURCE_LIST {
+ USHORT Version;
+ USHORT Revision;
+ ULONG Count;
+ CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
+ } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
- typedef struct _SE_ADT_ACCESS_REASON {
- ACCESS_MASK AccessMask;
- ULONG AccessReasons[32];
- ULONG ObjectTypeIndex;
- ULONG AccessGranted;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- } SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON;
+ typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
+ INTERFACE_TYPE InterfaceType;
+ ULONG BusNumber;
+ CM_PARTIAL_RESOURCE_LIST PartialResourceList;
+ } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
- typedef struct _SE_ADT_PARAMETER_ARRAY {
- ULONG CategoryId;
- ULONG AuditId;
- ULONG ParameterCount;
- ULONG Length;
- USHORT FlatSubCategoryId;
- USHORT Type;
- ULONG Flags;
- SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[ SE_MAX_AUDIT_PARAMETERS ];
- } SE_ADT_PARAMETER_ARRAY, *PSE_ADT_PARAMETER_ARRAY;
+ typedef struct _CM_RESOURCE_LIST {
+ ULONG Count;
+ CM_FULL_RESOURCE_DESCRIPTOR List[1];
+ } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
- #endif /* !_NTLSA_AUDIT_ */
- #endif /* !_NTLSA_IFS_ */
- /******************************************************************************
- * Power Management Support Types *
- ******************************************************************************/
+ typedef struct _PNP_BUS_INFORMATION {
+ GUID BusTypeGuid;
+ INTERFACE_TYPE LegacyBusType;
+ ULONG BusNumber;
+ } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
- #ifndef _PO_DDK_
- #define _PO_DDK_
+ #include <pshpack1.h>
- #define PO_CB_SYSTEM_POWER_POLICY 0
- #define PO_CB_AC_STATUS 1
- #define PO_CB_BUTTON_COLLISION 2
- #define PO_CB_SYSTEM_STATE_LOCK 3
- #define PO_CB_LID_SWITCH_STATE 4
- #define PO_CB_PROCESSOR_POWER_POLICY 5
+ typedef struct _CM_INT13_DRIVE_PARAMETER {
+ USHORT DriveSelect;
+ ULONG MaxCylinders;
+ USHORT SectorsPerTrack;
+ USHORT MaxHeads;
+ USHORT NumberDrives;
+ } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
- /* Power States/Levels */
- typedef enum _SYSTEM_POWER_STATE {
- PowerSystemUnspecified = 0,
- PowerSystemWorking,
- PowerSystemSleeping1,
- PowerSystemSleeping2,
- PowerSystemSleeping3,
- PowerSystemHibernate,
- PowerSystemShutdown,
- PowerSystemMaximum
- } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
+ typedef struct _CM_MCA_POS_DATA {
+ USHORT AdapterId;
+ UCHAR PosData1;
+ UCHAR PosData2;
+ UCHAR PosData3;
+ UCHAR PosData4;
+ } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
- #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
+ typedef struct _CM_PNP_BIOS_DEVICE_NODE {
+ USHORT Size;
+ UCHAR Node;
+ ULONG ProductId;
+ UCHAR DeviceType[3];
+ USHORT DeviceAttributes;
+ } CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE;
- typedef enum _POWER_INFORMATION_LEVEL {
- SystemPowerPolicyAc,
- SystemPowerPolicyDc,
- VerifySystemPolicyAc,
- VerifySystemPolicyDc,
- SystemPowerCapabilities,
- SystemBatteryState,
- SystemPowerStateHandler,
- ProcessorStateHandler,
- SystemPowerPolicyCurrent,
- AdministratorPowerPolicy,
- SystemReserveHiberFile,
- ProcessorInformation,
- SystemPowerInformation,
- ProcessorStateHandler2,
- LastWakeTime,
- LastSleepTime,
- SystemExecutionState,
- SystemPowerStateNotifyHandler,
- ProcessorPowerPolicyAc,
- ProcessorPowerPolicyDc,
- VerifyProcessorPowerPolicyAc,
- VerifyProcessorPowerPolicyDc,
- ProcessorPowerPolicyCurrent,
- SystemPowerStateLogging,
- SystemPowerLoggingEntry,
- SetPowerSettingValue,
- NotifyUserPowerSetting,
- PowerInformationLevelUnused0,
- PowerInformationLevelUnused1,
- SystemVideoState,
- TraceApplicationPowerMessage,
- TraceApplicationPowerMessageEnd,
- ProcessorPerfStates,
- ProcessorIdleStates,
- ProcessorCap,
- SystemWakeSource,
- SystemHiberFileInformation,
- TraceServicePowerMessage,
- ProcessorLoad,
- PowerShutdownNotification,
- MonitorCapabilities,
- SessionPowerInit,
- SessionDisplayState,
- PowerRequestCreate,
- PowerRequestAction,
- GetPowerRequestList,
- ProcessorInformationEx,
- NotifyUserModeLegacyPowerEvent,
- GroupPark,
- ProcessorIdleDomains,
- WakeTimerList,
- SystemHiberFileSize,
- PowerInformationLevelMaximum
- } POWER_INFORMATION_LEVEL;
+ typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK {
+ UCHAR Signature[4];
+ UCHAR Revision;
+ UCHAR Length;
+ USHORT ControlField;
+ UCHAR Checksum;
+ ULONG EventFlagAddress;
+ USHORT RealModeEntryOffset;
+ USHORT RealModeEntrySegment;
+ USHORT ProtectedModeEntryOffset;
+ ULONG ProtectedModeCodeBaseAddress;
+ ULONG OemDeviceId;
+ USHORT RealModeDataBaseAddress;
+ ULONG ProtectedModeDataBaseAddress;
+ } CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK;
- typedef enum {
- PowerActionNone = 0,
- PowerActionReserved,
- PowerActionSleep,
- PowerActionHibernate,
- PowerActionShutdown,
- PowerActionShutdownReset,
- PowerActionShutdownOff,
- PowerActionWarmEject
- } POWER_ACTION, *PPOWER_ACTION;
+ #include <poppack.h>
- typedef enum _DEVICE_POWER_STATE {
- PowerDeviceUnspecified = 0,
- PowerDeviceD0,
- PowerDeviceD1,
- PowerDeviceD2,
- PowerDeviceD3,
- PowerDeviceMaximum
- } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
+ typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA {
+ ULONG BytesPerSector;
+ ULONG NumberOfCylinders;
+ ULONG SectorsPerTrack;
+ ULONG NumberOfHeads;
+ } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
- typedef enum _MONITOR_DISPLAY_STATE {
- PowerMonitorOff = 0,
- PowerMonitorOn,
- PowerMonitorDim
- } MONITOR_DISPLAY_STATE, *PMONITOR_DISPLAY_STATE;
+ typedef struct _CM_KEYBOARD_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ UCHAR Type;
+ UCHAR Subtype;
+ USHORT KeyboardFlags;
+ } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
- typedef union _POWER_STATE {
- SYSTEM_POWER_STATE SystemState;
- DEVICE_POWER_STATE DeviceState;
- } POWER_STATE, *PPOWER_STATE;
+ typedef struct _CM_SCSI_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ UCHAR HostIdentifier;
+ } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA;
- typedef enum _POWER_STATE_TYPE {
- SystemPowerState = 0,
- DevicePowerState
- } POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
+ typedef struct _CM_VIDEO_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ ULONG VideoClock;
+ } CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA;
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- typedef struct _SYSTEM_POWER_STATE_CONTEXT {
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- ULONG Reserved1:8;
- ULONG TargetSystemState:4;
- ULONG EffectiveSystemState:4;
- ULONG CurrentSystemState:4;
- ULONG IgnoreHibernationPath:1;
- ULONG PseudoTransition:1;
- ULONG Reserved2:10;
- } DUMMYSTRUCTNAME;
- ULONG ContextAsUlong;
- } DUMMYUNIONNAME;
- } SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT;
- #endif
+ typedef struct _CM_SONIC_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ USHORT DataConfigurationRegister;
+ UCHAR EthernetAddress[8];
+ } CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA;
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- typedef struct _COUNTED_REASON_CONTEXT {
- ULONG Version;
- ULONG Flags;
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- UNICODE_STRING ResourceFileName;
- USHORT ResourceReasonId;
- ULONG StringCount;
- PUNICODE_STRING ReasonStrings;
- } DUMMYSTRUCTNAME;
- UNICODE_STRING SimpleString;
- } DUMMYUNIONNAME;
- } COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT;
- #endif
+ typedef struct _CM_SERIAL_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ ULONG BaudClock;
+ } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
- #define IOCTL_QUERY_DEVICE_POWER_STATE \
- CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
+ typedef struct _CM_MONITOR_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ USHORT HorizontalScreenSize;
+ USHORT VerticalScreenSize;
+ USHORT HorizontalResolution;
+ USHORT VerticalResolution;
+ USHORT HorizontalDisplayTimeLow;
+ USHORT HorizontalDisplayTime;
+ USHORT HorizontalDisplayTimeHigh;
+ USHORT HorizontalBackPorchLow;
+ USHORT HorizontalBackPorch;
+ USHORT HorizontalBackPorchHigh;
+ USHORT HorizontalFrontPorchLow;
+ USHORT HorizontalFrontPorch;
+ USHORT HorizontalFrontPorchHigh;
+ USHORT HorizontalSyncLow;
+ USHORT HorizontalSync;
+ USHORT HorizontalSyncHigh;
+ USHORT VerticalBackPorchLow;
+ USHORT VerticalBackPorch;
+ USHORT VerticalBackPorchHigh;
+ USHORT VerticalFrontPorchLow;
+ USHORT VerticalFrontPorch;
+ USHORT VerticalFrontPorchHigh;
+ USHORT VerticalSyncLow;
+ USHORT VerticalSync;
+ USHORT VerticalSyncHigh;
+ } CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA;
- #define IOCTL_SET_DEVICE_WAKE \
- CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+ typedef struct _CM_FLOPPY_DEVICE_DATA {
+ USHORT Version;
+ USHORT Revision;
+ CHAR Size[8];
+ ULONG MaxDensity;
+ ULONG MountDensity;
+ UCHAR StepRateHeadUnloadTime;
+ UCHAR HeadLoadTime;
+ UCHAR MotorOffTime;
+ UCHAR SectorLengthCode;
+ UCHAR SectorPerTrack;
+ UCHAR ReadWriteGapLength;
+ UCHAR DataTransferLength;
+ UCHAR FormatGapLength;
+ UCHAR FormatFillCharacter;
+ UCHAR HeadSettleTime;
+ UCHAR MotorSettleTime;
+ UCHAR MaximumTrackValue;
+ UCHAR DataTransferRate;
+ } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
- #define IOCTL_CANCEL_DEVICE_WAKE \
- CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+ typedef enum _KEY_INFORMATION_CLASS {
+ KeyBasicInformation,
+ KeyNodeInformation,
+ KeyFullInformation,
+ KeyNameInformation,
+ KeyCachedInformation,
+ KeyFlagsInformation,
+ KeyVirtualizationInformation,
+ KeyHandleTagsInformation,
+ MaxKeyInfoClass
+ } KEY_INFORMATION_CLASS;
- #define ES_SYSTEM_REQUIRED 0x00000001
- #define ES_DISPLAY_REQUIRED 0x00000002
- #define ES_USER_PRESENT 0x00000004
- #define ES_CONTINUOUS 0x80000000
+ typedef struct _KEY_BASIC_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG NameLength;
+ WCHAR Name[1];
+ } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
- typedef ULONG EXECUTION_STATE, *PEXECUTION_STATE;
+ typedef struct _KEY_CONTROL_FLAGS_INFORMATION {
+ ULONG ControlFlags;
+ } KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION;
- typedef enum {
- LT_DONT_CARE,
- LT_LOWEST_LATENCY
- } LATENCY_TIME;
+ typedef struct _KEY_FULL_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG ClassOffset;
+ ULONG ClassLength;
+ ULONG SubKeys;
+ ULONG MaxNameLen;
+ ULONG MaxClassLen;
+ ULONG Values;
+ ULONG MaxValueNameLen;
+ ULONG MaxValueDataLen;
+ WCHAR Class[1];
+ } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
- #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
- #define DIAGNOSTIC_REASON_VERSION 0
- #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
- #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
- #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
- #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
- #endif
+ typedef struct _KEY_HANDLE_TAGS_INFORMATION {
+ ULONG HandleTags;
+ } KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION;
- #define POWER_REQUEST_CONTEXT_VERSION 0
- #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
- #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
+ typedef struct _KEY_NODE_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG ClassOffset;
+ ULONG ClassLength;
+ ULONG NameLength;
+ WCHAR Name[1];
+ } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
- #define PowerRequestMaximum 3
+ typedef enum _KEY_SET_INFORMATION_CLASS {
+ KeyWriteTimeInformation,
+ KeyWow64FlagsInformation,
+ KeyControlFlagsInformation,
+ KeySetVirtualizationInformation,
+ KeySetDebugInformation,
+ KeySetHandleTagsInformation,
+ MaxKeySetInfoClass
+ } KEY_SET_INFORMATION_CLASS;
- typedef enum _POWER_REQUEST_TYPE {
- PowerRequestDisplayRequired,
- PowerRequestSystemRequired,
- PowerRequestAwayModeRequired
- } POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE;
+ typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION {
+ ULONG VirtualTarget:1;
+ ULONG VirtualStore:1;
+ ULONG VirtualSource:1;
+ ULONG Reserved:29;
+ } KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION;
- #if (NTDDI_VERSION >= NTDDI_WINXP)
+ typedef struct _KEY_VALUE_BASIC_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG NameLength;
+ WCHAR Name[1];
+ } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
- #define PDCAP_D0_SUPPORTED 0x00000001
- #define PDCAP_D1_SUPPORTED 0x00000002
- #define PDCAP_D2_SUPPORTED 0x00000004
- #define PDCAP_D3_SUPPORTED 0x00000008
- #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
- #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
- #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
- #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
- #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
+ typedef struct _KEY_VALUE_FULL_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG DataOffset;
+ ULONG DataLength;
+ ULONG NameLength;
+ WCHAR Name[1];
+ } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
- typedef struct CM_Power_Data_s {
- ULONG PD_Size;
- DEVICE_POWER_STATE PD_MostRecentPowerState;
- ULONG PD_Capabilities;
- ULONG PD_D1Latency;
- ULONG PD_D2Latency;
- ULONG PD_D3Latency;
- DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum];
- SYSTEM_POWER_STATE PD_DeepestSystemWake;
- } CM_POWER_DATA, *PCM_POWER_DATA;
-
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+ typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG DataLength;
+ _Field_size_bytes_(DataLength) UCHAR Data[1];
+ } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
- typedef enum _SYSTEM_POWER_CONDITION {
- PoAc,
- PoDc,
- PoHot,
- PoConditionMaximum
- } SYSTEM_POWER_CONDITION;
+ typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 {
+ ULONG Type;
+ ULONG DataLength;
+ _Field_size_bytes_(DataLength) UCHAR Data[1];
+ } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
- typedef struct _SET_POWER_SETTING_VALUE {
- ULONG Version;
- GUID Guid;
- SYSTEM_POWER_CONDITION PowerCondition;
+ typedef struct _KEY_VALUE_ENTRY {
+ PUNICODE_STRING ValueName;
ULONG DataLength;
- UCHAR Data[ANYSIZE_ARRAY];
- } SET_POWER_SETTING_VALUE, *PSET_POWER_SETTING_VALUE;
+ ULONG DataOffset;
+ ULONG Type;
+ } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
- #define POWER_SETTING_VALUE_VERSION (0x1)
+ typedef enum _KEY_VALUE_INFORMATION_CLASS {
+ KeyValueBasicInformation,
+ KeyValueFullInformation,
+ KeyValuePartialInformation,
+ KeyValueFullInformationAlign64,
+ KeyValuePartialInformationAlign64
+ } KEY_VALUE_INFORMATION_CLASS;
- typedef struct _NOTIFY_USER_POWER_SETTING {
- GUID Guid;
- } NOTIFY_USER_POWER_SETTING, *PNOTIFY_USER_POWER_SETTING;
+ typedef struct _KEY_WOW64_FLAGS_INFORMATION {
+ ULONG UserFlags;
+ } KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION;
- typedef struct _APPLICATIONLAUNCH_SETTING_VALUE {
- LARGE_INTEGER ActivationTime;
- ULONG Flags;
- ULONG ButtonInstanceID;
- } APPLICATIONLAUNCH_SETTING_VALUE, *PAPPLICATIONLAUNCH_SETTING_VALUE;
+ typedef struct _KEY_WRITE_TIME_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
- typedef enum _POWER_PLATFORM_ROLE {
- PlatformRoleUnspecified = 0,
- PlatformRoleDesktop,
- PlatformRoleMobile,
- PlatformRoleWorkstation,
- PlatformRoleEnterpriseServer,
- PlatformRoleSOHOServer,
- PlatformRoleAppliancePC,
- PlatformRolePerformanceServer,
- PlatformRoleMaximum
- } POWER_PLATFORM_ROLE;
+ typedef enum _REG_NOTIFY_CLASS {
+ RegNtDeleteKey,
+ RegNtPreDeleteKey = RegNtDeleteKey,
+ RegNtSetValueKey,
+ RegNtPreSetValueKey = RegNtSetValueKey,
+ RegNtDeleteValueKey,
+ RegNtPreDeleteValueKey = RegNtDeleteValueKey,
+ RegNtSetInformationKey,
+ RegNtPreSetInformationKey = RegNtSetInformationKey,
+ RegNtRenameKey,
+ RegNtPreRenameKey = RegNtRenameKey,
+ RegNtEnumerateKey,
+ RegNtPreEnumerateKey = RegNtEnumerateKey,
+ RegNtEnumerateValueKey,
+ RegNtPreEnumerateValueKey = RegNtEnumerateValueKey,
+ RegNtQueryKey,
+ RegNtPreQueryKey = RegNtQueryKey,
+ RegNtQueryValueKey,
+ RegNtPreQueryValueKey = RegNtQueryValueKey,
+ RegNtQueryMultipleValueKey,
+ RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey,
+ RegNtPreCreateKey,
+ RegNtPostCreateKey,
+ RegNtPreOpenKey,
+ RegNtPostOpenKey,
+ RegNtKeyHandleClose,
+ RegNtPreKeyHandleClose = RegNtKeyHandleClose,
+ RegNtPostDeleteKey,
+ RegNtPostSetValueKey,
+ RegNtPostDeleteValueKey,
+ RegNtPostSetInformationKey,
+ RegNtPostRenameKey,
+ RegNtPostEnumerateKey,
+ RegNtPostEnumerateValueKey,
+ RegNtPostQueryKey,
+ RegNtPostQueryValueKey,
+ RegNtPostQueryMultipleValueKey,
+ RegNtPostKeyHandleClose,
+ RegNtPreCreateKeyEx,
+ RegNtPostCreateKeyEx,
+ RegNtPreOpenKeyEx,
+ RegNtPostOpenKeyEx,
+ RegNtPreFlushKey,
+ RegNtPostFlushKey,
+ RegNtPreLoadKey,
+ RegNtPostLoadKey,
+ RegNtPreUnLoadKey,
+ RegNtPostUnLoadKey,
+ RegNtPreQueryKeySecurity,
+ RegNtPostQueryKeySecurity,
+ RegNtPreSetKeySecurity,
+ RegNtPostSetKeySecurity,
+ RegNtCallbackObjectContextCleanup,
+ RegNtPreRestoreKey,
+ RegNtPostRestoreKey,
+ RegNtPreSaveKey,
+ RegNtPostSaveKey,
+ RegNtPreReplaceKey,
+ RegNtPostReplaceKey,
+ MaxRegNtNotifyClass
+ } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS;
- #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
- typedef struct {
- ULONG Granularity;
- ULONG Capacity;
- } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
+ _IRQL_requires_same_
+ _Function_class_(EX_CALLBACK_FUNCTION)
+ typedef NTSTATUS
+ (NTAPI EX_CALLBACK_FUNCTION)(
+ _In_ PVOID CallbackContext,
+ _In_opt_ PVOID Argument1,
+ _In_opt_ PVOID Argument2);
+ typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION;
- #endif /* !_PO_DDK_ */
+ typedef struct _REG_DELETE_KEY_INFORMATION {
+ PVOID Object;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
+ , REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION
+ #endif
+ ;
- #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
- #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
- #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
- #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
+ typedef struct _REG_SET_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ PUNICODE_STRING ValueName;
+ ULONG TitleIndex;
+ ULONG Type;
+ PVOID Data;
+ ULONG DataSize;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
- DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A);
- DEFINE_GUID(GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C);
- DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E);
- DEFINE_GUID(NO_SUBGROUP_GUID, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94);
- DEFINE_GUID(ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0);
- DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7);
- DEFINE_GUID(GUID_ACTIVE_POWERSCHEME, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63);
- DEFINE_GUID(GUID_VIDEO_SUBGROUP, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99);
- DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E);
- DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63);
- DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64);
- DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
- DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B);
- DEFINE_GUID(GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA);
- DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
- DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
- DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
- DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
- DEFINE_GUID(GUID_SESSION_DISPLAY_STATE, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67);
- DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
- DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23);
- DEFINE_GUID(GUID_DISK_SUBGROUP, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42);
- DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E);
- DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63);
- DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67);
- DEFINE_GUID(GUID_SLEEP_SUBGROUP, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20);
- DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70);
- DEFINE_GUID(GUID_STANDBY_TIMEOUT, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA);
- DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0);
- DEFINE_GUID(GUID_HIBERNATE_TIMEOUT, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64);
- DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E);
- DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
- DEFINE_GUID(GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0);
- DEFINE_GUID(GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87);
- DEFINE_GUID(GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab);
- DEFINE_GUID(GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D);
- DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2);
- DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47);
- DEFINE_GUID(GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80);
- DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78);
- DEFINE_GUID(GUID_SLEEPBUTTON_ACTION, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB);
- DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93);
- DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5);
- DEFINE_GUID(GUID_LIDCLOSE_ACTION, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36);
- DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B);
- DEFINE_GUID(GUID_LIDOPEN_POWERSTATE, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4);
- DEFINE_GUID(GUID_BATTERY_SUBGROUP, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3);
- DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00);
- DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36);
- DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC);
- DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C);
- DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb);
- DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
- DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
- DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d);
- DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6);
- DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
- DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
- DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
- DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
- DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
- DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
- DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
- DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
- DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
- DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
- DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51);
- DEFINE_GUID(GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19);
- DEFINE_GUID(GUID_ACDC_POWER_SOURCE, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48);
- DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3);
- DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1);
- DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1);
- DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E);
- DEFINE_GUID(GUID_APPLAUNCH_BUTTON, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA);
- DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20);
- DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5);
- DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6);
+ typedef struct _REG_DELETE_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ PUNICODE_STRING ValueName;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
- #define PERFSTATE_POLICY_CHANGE_IDEAL 0
- #define PERFSTATE_POLICY_CHANGE_SINGLE 1
- #define PERFSTATE_POLICY_CHANGE_ROCKET 2
- #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
+ typedef struct _REG_SET_INFORMATION_KEY_INFORMATION {
+ PVOID Object;
+ KEY_SET_INFORMATION_CLASS KeySetInformationClass;
+ PVOID KeySetInformation;
+ ULONG KeySetInformationLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
- #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
- #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
+ typedef struct _REG_ENUMERATE_KEY_INFORMATION {
+ PVOID Object;
+ ULONG Index;
+ KEY_INFORMATION_CLASS KeyInformationClass;
+ PVOID KeyInformation;
+ ULONG Length;
+ PULONG ResultLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
- #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
- #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
+ typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ ULONG Index;
+ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
+ PVOID KeyValueInformation;
+ ULONG Length;
+ PULONG ResultLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
- _Function_class_(REQUEST_POWER_COMPLETE)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI REQUEST_POWER_COMPLETE)(
- _In_ struct _DEVICE_OBJECT *DeviceObject,
- _In_ UCHAR MinorFunction,
- _In_ POWER_STATE PowerState,
- _In_opt_ PVOID Context,
- _In_ struct _IO_STATUS_BLOCK *IoStatus);
- typedef REQUEST_POWER_COMPLETE *PREQUEST_POWER_COMPLETE;
+ typedef struct _REG_QUERY_KEY_INFORMATION {
+ PVOID Object;
+ KEY_INFORMATION_CLASS KeyInformationClass;
+ PVOID KeyInformation;
+ ULONG Length;
+ PULONG ResultLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
- _Function_class_(POWER_SETTING_CALLBACK)
- _IRQL_requires_same_
- typedef NTSTATUS
- (NTAPI POWER_SETTING_CALLBACK)(
- _In_ LPCGUID SettingGuid,
- _In_reads_bytes_(ValueLength) PVOID Value,
- _In_ ULONG ValueLength,
- _Inout_opt_ PVOID Context);
- typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK;
+ typedef struct _REG_QUERY_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ PUNICODE_STRING ValueName;
+ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
+ PVOID KeyValueInformation;
+ ULONG Length;
+ PULONG ResultLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
- /******************************************************************************
- * Configuration Manager Types *
- ******************************************************************************/
+ typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
+ PVOID Object;
+ PKEY_VALUE_ENTRY ValueEntries;
+ ULONG EntryCount;
+ PVOID ValueBuffer;
+ PULONG BufferLength;
+ PULONG RequiredBufferLength;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
- /* Resource list definitions */
- typedef int CM_RESOURCE_TYPE;
+ typedef struct _REG_RENAME_KEY_INFORMATION {
+ PVOID Object;
+ PUNICODE_STRING NewName;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION;
- #define CmResourceTypeNull 0
- #define CmResourceTypePort 1
- #define CmResourceTypeInterrupt 2
- #define CmResourceTypeMemory 3
- #define CmResourceTypeDma 4
- #define CmResourceTypeDeviceSpecific 5
- #define CmResourceTypeBusNumber 6
- #define CmResourceTypeNonArbitrated 128
- #define CmResourceTypeConfigData 128
- #define CmResourceTypeDevicePrivate 129
- #define CmResourceTypePcCardConfig 130
- #define CmResourceTypeMfCardConfig 131
+ typedef struct _REG_CREATE_KEY_INFORMATION {
+ PUNICODE_STRING CompleteName;
+ PVOID RootObject;
+ PVOID ObjectType;
+ ULONG CreateOptions;
+ PUNICODE_STRING Class;
+ PVOID SecurityDescriptor;
+ PVOID SecurityQualityOfService;
+ ACCESS_MASK DesiredAccess;
+ ACCESS_MASK GrantedAccess;
+ PULONG Disposition;
+ PVOID *ResultObject;
+ PVOID CallContext;
+ PVOID RootObjectContext;
+ PVOID Transaction;
+ PVOID Reserved;
+ } REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION;
- /* KEY_VALUE_Xxx.Type */
- #define REG_NONE 0
- #define REG_SZ 1
- #define REG_EXPAND_SZ 2
- #define REG_BINARY 3
- #define REG_DWORD 4
- #define REG_DWORD_LITTLE_ENDIAN 4
- #define REG_DWORD_BIG_ENDIAN 5
- #define REG_LINK 6
- #define REG_MULTI_SZ 7
- #define REG_RESOURCE_LIST 8
- #define REG_FULL_RESOURCE_DESCRIPTOR 9
- #define REG_RESOURCE_REQUIREMENTS_LIST 10
- #define REG_QWORD 11
- #define REG_QWORD_LITTLE_ENDIAN 11
+ typedef struct _REG_CREATE_KEY_INFORMATION_V1 {
+ PUNICODE_STRING CompleteName;
+ PVOID RootObject;
+ PVOID ObjectType;
+ ULONG Options;
+ PUNICODE_STRING Class;
+ PVOID SecurityDescriptor;
+ PVOID SecurityQualityOfService;
+ ACCESS_MASK DesiredAccess;
+ ACCESS_MASK GrantedAccess;
+ PULONG Disposition;
+ PVOID *ResultObject;
+ PVOID CallContext;
+ PVOID RootObjectContext;
+ PVOID Transaction;
+ ULONG_PTR Version;
+ PUNICODE_STRING RemainingName;
+ ULONG Wow64Flags;
+ ULONG Attributes;
+ KPROCESSOR_MODE CheckAccessMode;
+ } REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1;
- /* Registry Access Rights */
- #define KEY_QUERY_VALUE (0x0001)
- #define KEY_SET_VALUE (0x0002)
- #define KEY_CREATE_SUB_KEY (0x0004)
- #define KEY_ENUMERATE_SUB_KEYS (0x0008)
- #define KEY_NOTIFY (0x0010)
- #define KEY_CREATE_LINK (0x0020)
- #define KEY_WOW64_32KEY (0x0200)
- #define KEY_WOW64_64KEY (0x0100)
- #define KEY_WOW64_RES (0x0300)
+ typedef struct _REG_PRE_CREATE_KEY_INFORMATION {
+ PUNICODE_STRING CompleteName;
+ } REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;;
- #define KEY_READ ((STANDARD_RIGHTS_READ |\
- KEY_QUERY_VALUE |\
- KEY_ENUMERATE_SUB_KEYS |\
- KEY_NOTIFY) \
- & \
- (~SYNCHRONIZE))
+ typedef struct _REG_POST_CREATE_KEY_INFORMATION {
+ PUNICODE_STRING CompleteName;
+ PVOID Object;
+ NTSTATUS Status;
+ } REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
- #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
- KEY_SET_VALUE |\
- KEY_CREATE_SUB_KEY) \
- & \
- (~SYNCHRONIZE))
+ typedef struct _REG_POST_OPERATION_INFORMATION {
+ PVOID Object;
+ NTSTATUS Status;
+ PVOID PreInformation;
+ NTSTATUS ReturnStatus;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
- #define KEY_EXECUTE ((KEY_READ) \
- & \
- (~SYNCHRONIZE))
+ typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
+ PVOID Object;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
- #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
- KEY_QUERY_VALUE |\
- KEY_SET_VALUE |\
- KEY_CREATE_SUB_KEY |\
- KEY_ENUMERATE_SUB_KEYS |\
- KEY_NOTIFY |\
- KEY_CREATE_LINK) \
- & \
- (~SYNCHRONIZE))
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
- /* Registry Open/Create Options */
- #define REG_OPTION_RESERVED (0x00000000L)
- #define REG_OPTION_NON_VOLATILE (0x00000000L)
- #define REG_OPTION_VOLATILE (0x00000001L)
- #define REG_OPTION_CREATE_LINK (0x00000002L)
- #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
- #define REG_OPTION_OPEN_LINK (0x00000008L)
-
- #define REG_LEGAL_OPTION \
- (REG_OPTION_RESERVED |\
- REG_OPTION_NON_VOLATILE |\
- REG_OPTION_VOLATILE |\
- REG_OPTION_CREATE_LINK |\
- REG_OPTION_BACKUP_RESTORE |\
- REG_OPTION_OPEN_LINK)
-
- #define REG_OPEN_LEGAL_OPTION \
- (REG_OPTION_RESERVED |\
- REG_OPTION_BACKUP_RESTORE |\
- REG_OPTION_OPEN_LINK)
+ typedef struct _REG_LOAD_KEY_INFORMATION {
+ PVOID Object;
+ PUNICODE_STRING KeyName;
+ PUNICODE_STRING SourceFile;
+ ULONG Flags;
+ PVOID TrustClassObject;
+ PVOID UserEvent;
+ ACCESS_MASK DesiredAccess;
+ PHANDLE RootHandle;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION;
- #define REG_STANDARD_FORMAT 1
- #define REG_LATEST_FORMAT 2
- #define REG_NO_COMPRESSION 4
+ typedef struct _REG_UNLOAD_KEY_INFORMATION {
+ PVOID Object;
+ PVOID UserEvent;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION;
- /* Key creation/open disposition */
- #define REG_CREATED_NEW_KEY (0x00000001L)
- #define REG_OPENED_EXISTING_KEY (0x00000002L)
+ typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION {
+ PVOID Object;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
- /* Key restore & hive load flags */
- #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
- #define REG_REFRESH_HIVE (0x00000002L)
- #define REG_NO_LAZY_FLUSH (0x00000004L)
- #define REG_FORCE_RESTORE (0x00000008L)
- #define REG_APP_HIVE (0x00000010L)
- #define REG_PROCESS_PRIVATE (0x00000020L)
- #define REG_START_JOURNAL (0x00000040L)
- #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
- #define REG_HIVE_NO_RM (0x00000100L)
- #define REG_HIVE_SINGLE_LOG (0x00000200L)
- #define REG_BOOT_HIVE (0x00000400L)
+ typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION {
+ PVOID Object;
+ PSECURITY_INFORMATION SecurityInformation;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ PULONG Length;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION;
- /* Unload Flags */
- #define REG_FORCE_UNLOAD 1
+ typedef struct _REG_SET_KEY_SECURITY_INFORMATION {
+ PVOID Object;
+ PSECURITY_INFORMATION SecurityInformation;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION;
- /* Notify Filter Values */
- #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
- #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
- #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
- #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
+ typedef struct _REG_RESTORE_KEY_INFORMATION {
+ PVOID Object;
+ HANDLE FileHandle;
+ ULONG Flags;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION;
- #define REG_LEGAL_CHANGE_FILTER \
- (REG_NOTIFY_CHANGE_NAME |\
- REG_NOTIFY_CHANGE_ATTRIBUTES |\
- REG_NOTIFY_CHANGE_LAST_SET |\
- REG_NOTIFY_CHANGE_SECURITY)
+ typedef struct _REG_SAVE_KEY_INFORMATION {
+ PVOID Object;
+ HANDLE FileHandle;
+ ULONG Format;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION;
- #include <pshpack4.h>
- typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
- UCHAR Type;
- UCHAR ShareDisposition;
- USHORT Flags;
- union {
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length;
- } Generic;
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length;
- } Port;
- struct {
- #if defined(NT_PROCESSOR_GROUPS)
- USHORT Level;
- USHORT Group;
- #else
- ULONG Level;
- #endif
- ULONG Vector;
- KAFFINITY Affinity;
- } Interrupt;
- #if (NTDDI_VERSION >= NTDDI_LONGHORN)
- struct {
- _ANONYMOUS_UNION union {
- struct {
- #if defined(NT_PROCESSOR_GROUPS)
- USHORT Group;
- #else
- USHORT Reserved;
- #endif
- USHORT MessageCount;
- ULONG Vector;
- KAFFINITY Affinity;
- } Raw;
- struct {
- #if defined(NT_PROCESSOR_GROUPS)
- USHORT Level;
- USHORT Group;
- #else
- ULONG Level;
- #endif
- ULONG Vector;
- KAFFINITY Affinity;
- } Translated;
- } DUMMYUNIONNAME;
- } MessageInterrupt;
- #endif
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length;
- } Memory;
- struct {
- ULONG Channel;
- ULONG Port;
- ULONG Reserved1;
- } Dma;
- struct {
- ULONG Data[3];
- } DevicePrivate;
- struct {
- ULONG Start;
- ULONG Length;
- ULONG Reserved;
- } BusNumber;
- struct {
- ULONG DataSize;
- ULONG Reserved1;
- ULONG Reserved2;
- } DeviceSpecificData;
- #if (NTDDI_VERSION >= NTDDI_LONGHORN)
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length40;
- } Memory40;
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length48;
- } Memory48;
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length64;
- } Memory64;
- #endif
- } u;
- } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
- #include <poppack.h>
+ typedef struct _REG_REPLACE_KEY_INFORMATION {
+ PVOID Object;
+ PUNICODE_STRING OldFileName;
+ PUNICODE_STRING NewFileName;
+ PVOID CallContext;
+ PVOID ObjectContext;
+ PVOID Reserved;
+ } REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION;
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
- #define CmResourceTypeNull 0
- #define CmResourceTypePort 1
- #define CmResourceTypeInterrupt 2
- #define CmResourceTypeMemory 3
- #define CmResourceTypeDma 4
- #define CmResourceTypeDeviceSpecific 5
- #define CmResourceTypeBusNumber 6
- #define CmResourceTypeMemoryLarge 7
- #define CmResourceTypeNonArbitrated 128
- #define CmResourceTypeConfigData 128
- #define CmResourceTypeDevicePrivate 129
- #define CmResourceTypePcCardConfig 130
- #define CmResourceTypeMfCardConfig 131
+ #endif /* NTDDI_VERSION >= NTDDI_VISTA */
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
- typedef enum _CM_SHARE_DISPOSITION {
- CmResourceShareUndetermined = 0,
- CmResourceShareDeviceExclusive,
- CmResourceShareDriverExclusive,
- CmResourceShareShared
- } CM_SHARE_DISPOSITION;
+ #define SERVICE_KERNEL_DRIVER 0x00000001
+ #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
+ #define SERVICE_ADAPTER 0x00000004
+ #define SERVICE_RECOGNIZER_DRIVER 0x00000008
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
- #define CM_RESOURCE_PORT_MEMORY 0x0000
- #define CM_RESOURCE_PORT_IO 0x0001
- #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
- #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
- #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
- #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
- #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
- #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
- #define CM_RESOURCE_PORT_BAR 0x0100
+ #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
+ SERVICE_FILE_SYSTEM_DRIVER | \
+ SERVICE_RECOGNIZER_DRIVER)
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
- #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
- #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
- #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
- #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
+ #define SERVICE_WIN32_OWN_PROCESS 0x00000010
+ #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
+ #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
+ SERVICE_WIN32_SHARE_PROCESS)
- #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
+ #define SERVICE_INTERACTIVE_PROCESS 0x00000100
- #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
+ #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
+ SERVICE_ADAPTER | \
+ SERVICE_DRIVER | \
+ SERVICE_INTERACTIVE_PROCESS)
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
- #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
- #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
- #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
- #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
- #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
- #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
- #define CM_RESOURCE_MEMORY_24 0x0010
- #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
- #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
- #define CM_RESOURCE_MEMORY_BAR 0x0080
- #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
+ /* Service Start Types */
+ #define SERVICE_BOOT_START 0x00000000
+ #define SERVICE_SYSTEM_START 0x00000001
+ #define SERVICE_AUTO_START 0x00000002
+ #define SERVICE_DEMAND_START 0x00000003
+ #define SERVICE_DISABLED 0x00000004
- #define CM_RESOURCE_MEMORY_LARGE 0x0E00
- #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
- #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
- #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
+ #define SERVICE_ERROR_IGNORE 0x00000000
+ #define SERVICE_ERROR_NORMAL 0x00000001
+ #define SERVICE_ERROR_SEVERE 0x00000002
+ #define SERVICE_ERROR_CRITICAL 0x00000003
- #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
- #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
- #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
+ typedef enum _CM_SERVICE_NODE_TYPE {
+ DriverType = SERVICE_KERNEL_DRIVER,
+ FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
+ Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
+ Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
+ AdapterType = SERVICE_ADAPTER,
+ RecognizerType = SERVICE_RECOGNIZER_DRIVER
+ } SERVICE_NODE_TYPE;
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
- #define CM_RESOURCE_DMA_8 0x0000
- #define CM_RESOURCE_DMA_16 0x0001
- #define CM_RESOURCE_DMA_32 0x0002
- #define CM_RESOURCE_DMA_8_AND_16 0x0004
- #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
- #define CM_RESOURCE_DMA_TYPE_A 0x0010
- #define CM_RESOURCE_DMA_TYPE_B 0x0020
- #define CM_RESOURCE_DMA_TYPE_F 0x0040
+ typedef enum _CM_SERVICE_LOAD_TYPE {
+ BootLoad = SERVICE_BOOT_START,
+ SystemLoad = SERVICE_SYSTEM_START,
+ AutoLoad = SERVICE_AUTO_START,
+ DemandLoad = SERVICE_DEMAND_START,
+ DisableLoad = SERVICE_DISABLED
+ } SERVICE_LOAD_TYPE;
- typedef struct _DEVICE_FLAGS {
- ULONG Failed:1;
- ULONG ReadOnly:1;
- ULONG Removable:1;
- ULONG ConsoleIn:1;
- ULONG ConsoleOut:1;
- ULONG Input:1;
- ULONG Output:1;
- } DEVICE_FLAGS, *PDEVICE_FLAGS;
+ typedef enum _CM_ERROR_CONTROL_TYPE {
+ IgnoreError = SERVICE_ERROR_IGNORE,
+ NormalError = SERVICE_ERROR_NORMAL,
+ SevereError = SERVICE_ERROR_SEVERE,
+ CriticalError = SERVICE_ERROR_CRITICAL
+ } SERVICE_ERROR_TYPE;
- typedef enum _INTERFACE_TYPE {
- InterfaceTypeUndefined = -1,
- Internal,
- Isa,
- Eisa,
- MicroChannel,
- TurboChannel,
- PCIBus,
- VMEBus,
- NuBus,
- PCMCIABus,
- CBus,
- MPIBus,
- MPSABus,
- ProcessorInternal,
- InternalPowerBus,
- PNPISABus,
- PNPBus,
- Vmcs,
- MaximumInterfaceType
- } INTERFACE_TYPE, *PINTERFACE_TYPE;
+ #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
+ #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
+ #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
- typedef struct _CM_COMPONENT_INFORMATION {
- DEVICE_FLAGS Flags;
- ULONG Version;
- ULONG Key;
- KAFFINITY AffinityMask;
- } CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION;
+ #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
+ CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
+ CM_SERVICE_USB_DISK_BOOT_LOAD)
- typedef struct _CM_ROM_BLOCK {
- ULONG Address;
- ULONG Size;
- } CM_ROM_BLOCK, *PCM_ROM_BLOCK;
+ /******************************************************************************
+ * I/O Manager Types *
+ ******************************************************************************/
- typedef struct _CM_PARTIAL_RESOURCE_LIST {
- USHORT Version;
- USHORT Revision;
- ULONG Count;
- CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
- } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
- typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
- INTERFACE_TYPE InterfaceType;
- ULONG BusNumber;
- CM_PARTIAL_RESOURCE_LIST PartialResourceList;
- } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
+ #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
- typedef struct _CM_RESOURCE_LIST {
- ULONG Count;
- CM_FULL_RESOURCE_DESCRIPTOR List[1];
- } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
+ #define CONNECT_FULLY_SPECIFIED 0x1
+ #define CONNECT_LINE_BASED 0x2
+ #define CONNECT_MESSAGE_BASED 0x3
+ #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
+ #define CONNECT_CURRENT_VERSION 0x4
- typedef struct _PNP_BUS_INFORMATION {
- GUID BusTypeGuid;
- INTERFACE_TYPE LegacyBusType;
- ULONG BusNumber;
- } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
+ #define POOL_COLD_ALLOCATION 256
+ #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
+ #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
- #include <pshpack1.h>
+ #define IO_TYPE_ADAPTER 1
+ #define IO_TYPE_CONTROLLER 2
+ #define IO_TYPE_DEVICE 3
+ #define IO_TYPE_DRIVER 4
+ #define IO_TYPE_FILE 5
+ #define IO_TYPE_IRP 6
+ #define IO_TYPE_MASTER_ADAPTER 7
+ #define IO_TYPE_OPEN_PACKET 8
+ #define IO_TYPE_TIMER 9
+ #define IO_TYPE_VPB 10
+ #define IO_TYPE_ERROR_LOG 11
+ #define IO_TYPE_ERROR_MESSAGE 12
+ #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
- typedef struct _CM_INT13_DRIVE_PARAMETER {
- USHORT DriveSelect;
- ULONG MaxCylinders;
- USHORT SectorsPerTrack;
- USHORT MaxHeads;
- USHORT NumberDrives;
- } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
+ #define IO_TYPE_CSQ_IRP_CONTEXT 1
+ #define IO_TYPE_CSQ 2
+ #define IO_TYPE_CSQ_EX 3
- typedef struct _CM_MCA_POS_DATA {
- USHORT AdapterId;
- UCHAR PosData1;
- UCHAR PosData2;
- UCHAR PosData3;
- UCHAR PosData4;
- } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
+ /* IO_RESOURCE_DESCRIPTOR.Option */
+ #define IO_RESOURCE_PREFERRED 0x01
+ #define IO_RESOURCE_DEFAULT 0x02
+ #define IO_RESOURCE_ALTERNATIVE 0x08
- typedef struct _CM_PNP_BIOS_DEVICE_NODE {
- USHORT Size;
- UCHAR Node;
- ULONG ProductId;
- UCHAR DeviceType[3];
- USHORT DeviceAttributes;
- } CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE;
+ #define FILE_DEVICE_BEEP 0x00000001
+ #define FILE_DEVICE_CD_ROM 0x00000002
+ #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
+ #define FILE_DEVICE_CONTROLLER 0x00000004
+ #define FILE_DEVICE_DATALINK 0x00000005
+ #define FILE_DEVICE_DFS 0x00000006
+ #define FILE_DEVICE_DISK 0x00000007
+ #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
+ #define FILE_DEVICE_FILE_SYSTEM 0x00000009
+ #define FILE_DEVICE_INPORT_PORT 0x0000000a
+ #define FILE_DEVICE_KEYBOARD 0x0000000b
+ #define FILE_DEVICE_MAILSLOT 0x0000000c
+ #define FILE_DEVICE_MIDI_IN 0x0000000d
+ #define FILE_DEVICE_MIDI_OUT 0x0000000e
+ #define FILE_DEVICE_MOUSE 0x0000000f
+ #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
+ #define FILE_DEVICE_NAMED_PIPE 0x00000011
+ #define FILE_DEVICE_NETWORK 0x00000012
+ #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
+ #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
+ #define FILE_DEVICE_NULL 0x00000015
+ #define FILE_DEVICE_PARALLEL_PORT 0x00000016
+ #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
+ #define FILE_DEVICE_PRINTER 0x00000018
+ #define FILE_DEVICE_SCANNER 0x00000019
+ #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
+ #define FILE_DEVICE_SERIAL_PORT 0x0000001b
+ #define FILE_DEVICE_SCREEN 0x0000001c
+ #define FILE_DEVICE_SOUND 0x0000001d
+ #define FILE_DEVICE_STREAMS 0x0000001e
+ #define FILE_DEVICE_TAPE 0x0000001f
+ #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
+ #define FILE_DEVICE_TRANSPORT 0x00000021
+ #define FILE_DEVICE_UNKNOWN 0x00000022
+ #define FILE_DEVICE_VIDEO 0x00000023
+ #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
+ #define FILE_DEVICE_WAVE_IN 0x00000025
+ #define FILE_DEVICE_WAVE_OUT 0x00000026
+ #define FILE_DEVICE_8042_PORT 0x00000027
+ #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
+ #define FILE_DEVICE_BATTERY 0x00000029
+ #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
+ #define FILE_DEVICE_MODEM 0x0000002b
+ #define FILE_DEVICE_VDM 0x0000002c
+ #define FILE_DEVICE_MASS_STORAGE 0x0000002d
+ #define FILE_DEVICE_SMB 0x0000002e
+ #define FILE_DEVICE_KS 0x0000002f
+ #define FILE_DEVICE_CHANGER 0x00000030
+ #define FILE_DEVICE_SMARTCARD 0x00000031
+ #define FILE_DEVICE_ACPI 0x00000032
+ #define FILE_DEVICE_DVD 0x00000033
+ #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
+ #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
+ #define FILE_DEVICE_DFS_VOLUME 0x00000036
+ #define FILE_DEVICE_SERENUM 0x00000037
+ #define FILE_DEVICE_TERMSRV 0x00000038
+ #define FILE_DEVICE_KSEC 0x00000039
+ #define FILE_DEVICE_FIPS 0x0000003A
+ #define FILE_DEVICE_INFINIBAND 0x0000003B
+ #define FILE_DEVICE_VMBUS 0x0000003E
+ #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
+ #define FILE_DEVICE_WPD 0x00000040
+ #define FILE_DEVICE_BLUETOOTH 0x00000041
+ #define FILE_DEVICE_MT_COMPOSITE 0x00000042
+ #define FILE_DEVICE_MT_TRANSPORT 0x00000043
+ #define FILE_DEVICE_BIOMETRIC 0x00000044
+ #define FILE_DEVICE_PMI 0x00000045
- typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK {
- UCHAR Signature[4];
- UCHAR Revision;
- UCHAR Length;
- USHORT ControlField;
- UCHAR Checksum;
- ULONG EventFlagAddress;
- USHORT RealModeEntryOffset;
- USHORT RealModeEntrySegment;
- USHORT ProtectedModeEntryOffset;
- ULONG ProtectedModeCodeBaseAddress;
- ULONG OemDeviceId;
- USHORT RealModeDataBaseAddress;
- ULONG ProtectedModeDataBaseAddress;
- } CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK;
+ #if defined(NT_PROCESSOR_GROUPS)
- #include <poppack.h>
+ typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
- typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA {
- ULONG BytesPerSector;
- ULONG NumberOfCylinders;
- ULONG SectorsPerTrack;
- ULONG NumberOfHeads;
- } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
+ typedef enum _IRQ_DEVICE_POLICY_USHORT {
+ IrqPolicyMachineDefault = 0,
+ IrqPolicyAllCloseProcessors = 1,
+ IrqPolicyOneCloseProcessor = 2,
+ IrqPolicyAllProcessorsInMachine = 3,
+ IrqPolicyAllProcessorsInGroup = 3,
+ IrqPolicySpecifiedProcessors = 4,
+ IrqPolicySpreadMessagesAcrossAllProcessors = 5};
- typedef struct _CM_KEYBOARD_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- UCHAR Type;
- UCHAR Subtype;
- USHORT KeyboardFlags;
- } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
+ #else /* defined(NT_PROCESSOR_GROUPS) */
- typedef struct _CM_SCSI_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- UCHAR HostIdentifier;
- } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA;
+ typedef enum _IRQ_DEVICE_POLICY {
+ IrqPolicyMachineDefault = 0,
+ IrqPolicyAllCloseProcessors,
+ IrqPolicyOneCloseProcessor,
+ IrqPolicyAllProcessorsInMachine,
+ IrqPolicySpecifiedProcessors,
+ IrqPolicySpreadMessagesAcrossAllProcessors
+ } IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
- typedef struct _CM_VIDEO_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- ULONG VideoClock;
- } CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA;
+ #endif
- typedef struct _CM_SONIC_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- USHORT DataConfigurationRegister;
- UCHAR EthernetAddress[8];
- } CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA;
+ typedef enum _IRQ_PRIORITY {
+ IrqPriorityUndefined = 0,
+ IrqPriorityLow,
+ IrqPriorityNormal,
+ IrqPriorityHigh
+ } IRQ_PRIORITY, *PIRQ_PRIORITY;
- typedef struct _CM_SERIAL_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- ULONG BaudClock;
- } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
+ typedef enum _IRQ_GROUP_POLICY {
+ GroupAffinityAllGroupZero = 0,
+ GroupAffinityDontCare
+ } IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY;
- typedef struct _CM_MONITOR_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- USHORT HorizontalScreenSize;
- USHORT VerticalScreenSize;
- USHORT HorizontalResolution;
- USHORT VerticalResolution;
- USHORT HorizontalDisplayTimeLow;
- USHORT HorizontalDisplayTime;
- USHORT HorizontalDisplayTimeHigh;
- USHORT HorizontalBackPorchLow;
- USHORT HorizontalBackPorch;
- USHORT HorizontalBackPorchHigh;
- USHORT HorizontalFrontPorchLow;
- USHORT HorizontalFrontPorch;
- USHORT HorizontalFrontPorchHigh;
- USHORT HorizontalSyncLow;
- USHORT HorizontalSync;
- USHORT HorizontalSyncHigh;
- USHORT VerticalBackPorchLow;
- USHORT VerticalBackPorch;
- USHORT VerticalBackPorchHigh;
- USHORT VerticalFrontPorchLow;
- USHORT VerticalFrontPorch;
- USHORT VerticalFrontPorchHigh;
- USHORT VerticalSyncLow;
- USHORT VerticalSync;
- USHORT VerticalSyncHigh;
- } CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA;
+ #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
- typedef struct _CM_FLOPPY_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- CHAR Size[8];
- ULONG MaxDensity;
- ULONG MountDensity;
- UCHAR StepRateHeadUnloadTime;
- UCHAR HeadLoadTime;
- UCHAR MotorOffTime;
- UCHAR SectorLengthCode;
- UCHAR SectorPerTrack;
- UCHAR ReadWriteGapLength;
- UCHAR DataTransferLength;
- UCHAR FormatGapLength;
- UCHAR FormatFillCharacter;
- UCHAR HeadSettleTime;
- UCHAR MotorSettleTime;
- UCHAR MaximumTrackValue;
- UCHAR DataTransferRate;
- } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
+ typedef struct _OBJECT_HANDLE_INFORMATION {
+ ULONG HandleAttributes;
+ ACCESS_MASK GrantedAccess;
+ } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
- typedef enum _KEY_INFORMATION_CLASS {
- KeyBasicInformation,
- KeyNodeInformation,
- KeyFullInformation,
- KeyNameInformation,
- KeyCachedInformation,
- KeyFlagsInformation,
- KeyVirtualizationInformation,
- KeyHandleTagsInformation,
- MaxKeyInfoClass
- } KEY_INFORMATION_CLASS;
+ typedef struct _CLIENT_ID {
+ HANDLE UniqueProcess;
+ HANDLE UniqueThread;
+ } CLIENT_ID, *PCLIENT_ID;
- typedef struct _KEY_BASIC_INFORMATION {
- LARGE_INTEGER LastWriteTime;
- ULONG TitleIndex;
- ULONG NameLength;
- WCHAR Name[1];
- } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
+ typedef struct _VPB {
+ CSHORT Type;
+ CSHORT Size;
+ USHORT Flags;
+ USHORT VolumeLabelLength;
+ struct _DEVICE_OBJECT *DeviceObject;
+ struct _DEVICE_OBJECT *RealDevice;
+ ULONG SerialNumber;
+ ULONG ReferenceCount;
+ WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
+ } VPB, *PVPB;
- typedef struct _KEY_CONTROL_FLAGS_INFORMATION {
- ULONG ControlFlags;
- } KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION;
+ typedef enum _IO_ALLOCATION_ACTION {
+ KeepObject = 1,
+ DeallocateObject,
+ DeallocateObjectKeepRegisters
+ } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION;
- typedef struct _KEY_FULL_INFORMATION {
- LARGE_INTEGER LastWriteTime;
- ULONG TitleIndex;
- ULONG ClassOffset;
- ULONG ClassLength;
- ULONG SubKeys;
- ULONG MaxNameLen;
- ULONG MaxClassLen;
- ULONG Values;
- ULONG MaxValueNameLen;
- ULONG MaxValueDataLen;
- WCHAR Class[1];
- } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
+ _Function_class_(DRIVER_CONTROL)
+ _IRQL_requires_same_
+ typedef IO_ALLOCATION_ACTION
+ (NTAPI DRIVER_CONTROL)(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _Inout_ struct _IRP *Irp,
+ _In_ PVOID MapRegisterBase,
+ _In_ PVOID Context);
+ typedef DRIVER_CONTROL *PDRIVER_CONTROL;
- typedef struct _KEY_HANDLE_TAGS_INFORMATION {
- ULONG HandleTags;
- } KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION;
+ typedef struct _WAIT_CONTEXT_BLOCK {
+ KDEVICE_QUEUE_ENTRY WaitQueueEntry;
+ PDRIVER_CONTROL DeviceRoutine;
+ PVOID DeviceContext;
+ ULONG NumberOfMapRegisters;
+ PVOID DeviceObject;
+ PVOID CurrentIrp;
+ PKDPC BufferChainingDpc;
+ } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
- typedef struct _KEY_NODE_INFORMATION {
- LARGE_INTEGER LastWriteTime;
- ULONG TitleIndex;
- ULONG ClassOffset;
- ULONG ClassLength;
- ULONG NameLength;
- WCHAR Name[1];
- } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
+ /* DEVICE_OBJECT.Flags */
+ #define DO_VERIFY_VOLUME 0x00000002
+ #define DO_BUFFERED_IO 0x00000004
+ #define DO_EXCLUSIVE 0x00000008
+ #define DO_DIRECT_IO 0x00000010
+ #define DO_MAP_IO_BUFFER 0x00000020
+ #define DO_DEVICE_INITIALIZING 0x00000080
+ #define DO_SHUTDOWN_REGISTERED 0x00000800
+ #define DO_BUS_ENUMERATED_DEVICE 0x00001000
+ #define DO_POWER_PAGABLE 0x00002000
+ #define DO_POWER_INRUSH 0x00004000
- typedef enum _KEY_SET_INFORMATION_CLASS {
- KeyWriteTimeInformation,
- KeyWow64FlagsInformation,
- KeyControlFlagsInformation,
- KeySetVirtualizationInformation,
- KeySetDebugInformation,
- KeySetHandleTagsInformation,
- MaxKeySetInfoClass
- } KEY_SET_INFORMATION_CLASS;
+ /* DEVICE_OBJECT.Characteristics */
+ #define FILE_REMOVABLE_MEDIA 0x00000001
+ #define FILE_READ_ONLY_DEVICE 0x00000002
+ #define FILE_FLOPPY_DISKETTE 0x00000004
+ #define FILE_WRITE_ONCE_MEDIA 0x00000008
+ #define FILE_REMOTE_DEVICE 0x00000010
+ #define FILE_DEVICE_IS_MOUNTED 0x00000020
+ #define FILE_VIRTUAL_VOLUME 0x00000040
+ #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
+ #define FILE_DEVICE_SECURE_OPEN 0x00000100
+ #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
+ #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
+ #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
- typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION {
- ULONG VirtualTarget:1;
- ULONG VirtualStore:1;
- ULONG VirtualSource:1;
- ULONG Reserved:29;
- } KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION;
+ /* DEVICE_OBJECT.AlignmentRequirement */
+ #define FILE_BYTE_ALIGNMENT 0x00000000
+ #define FILE_WORD_ALIGNMENT 0x00000001
+ #define FILE_LONG_ALIGNMENT 0x00000003
+ #define FILE_QUAD_ALIGNMENT 0x00000007
+ #define FILE_OCTA_ALIGNMENT 0x0000000f
+ #define FILE_32_BYTE_ALIGNMENT 0x0000001f
+ #define FILE_64_BYTE_ALIGNMENT 0x0000003f
+ #define FILE_128_BYTE_ALIGNMENT 0x0000007f
+ #define FILE_256_BYTE_ALIGNMENT 0x000000ff
+ #define FILE_512_BYTE_ALIGNMENT 0x000001ff
- typedef struct _KEY_VALUE_BASIC_INFORMATION {
- ULONG TitleIndex;
- ULONG Type;
- ULONG NameLength;
- WCHAR Name[1];
- } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
+ /* DEVICE_OBJECT.DeviceType */
+ #define DEVICE_TYPE ULONG
- typedef struct _KEY_VALUE_FULL_INFORMATION {
- ULONG TitleIndex;
- ULONG Type;
- ULONG DataOffset;
- ULONG DataLength;
- ULONG NameLength;
- WCHAR Name[1];
- } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
+ typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT {
+ CSHORT Type;
+ USHORT Size;
+ LONG ReferenceCount;
+ struct _DRIVER_OBJECT *DriverObject;
+ struct _DEVICE_OBJECT *NextDevice;
+ struct _DEVICE_OBJECT *AttachedDevice;
+ struct _IRP *CurrentIrp;
+ PIO_TIMER Timer;
+ ULONG Flags;
+ ULONG Characteristics;
+ volatile PVPB Vpb;
+ PVOID DeviceExtension;
+ DEVICE_TYPE DeviceType;
+ CCHAR StackSize;
+ union {
+ LIST_ENTRY ListEntry;
+ WAIT_CONTEXT_BLOCK Wcb;
+ } Queue;
+ ULONG AlignmentRequirement;
+ KDEVICE_QUEUE DeviceQueue;
+ KDPC Dpc;
+ ULONG ActiveThreadCount;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ KEVENT DeviceLock;
+ USHORT SectorSize;
+ USHORT Spare1;
+ struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
+ PVOID Reserved;
+ } DEVICE_OBJECT, *PDEVICE_OBJECT;
- typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
- ULONG TitleIndex;
- ULONG Type;
- ULONG DataLength;
- _Field_size_bytes_(DataLength) UCHAR Data[1];
- } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
+ typedef enum _IO_SESSION_STATE {
+ IoSessionStateCreated = 1,
+ IoSessionStateInitialized,
+ IoSessionStateConnected,
+ IoSessionStateDisconnected,
+ IoSessionStateDisconnectedLoggedOn,
+ IoSessionStateLoggedOn,
+ IoSessionStateLoggedOff,
+ IoSessionStateTerminated,
+ IoSessionStateMax
+ } IO_SESSION_STATE, *PIO_SESSION_STATE;
- typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 {
- ULONG Type;
- ULONG DataLength;
- _Field_size_bytes_(DataLength) UCHAR Data[1];
- } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
+ typedef enum _IO_COMPLETION_ROUTINE_RESULT {
+ ContinueCompletion = STATUS_CONTINUE_COMPLETION,
+ StopCompletion = STATUS_MORE_PROCESSING_REQUIRED
+ } IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT;
- typedef struct _KEY_VALUE_ENTRY {
- PUNICODE_STRING ValueName;
- ULONG DataLength;
- ULONG DataOffset;
- ULONG Type;
- } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+ typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY {
+ PHYSICAL_ADDRESS MessageAddress;
+ KAFFINITY TargetProcessorSet;
+ PKINTERRUPT InterruptObject;
+ ULONG MessageData;
+ ULONG Vector;
+ KIRQL Irql;
+ KINTERRUPT_MODE Mode;
+ KINTERRUPT_POLARITY Polarity;
+ } IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY;
- typedef enum _KEY_VALUE_INFORMATION_CLASS {
- KeyValueBasicInformation,
- KeyValueFullInformation,
- KeyValuePartialInformation,
- KeyValueFullInformationAlign64,
- KeyValuePartialInformationAlign64
- } KEY_VALUE_INFORMATION_CLASS;
+ typedef struct _IO_INTERRUPT_MESSAGE_INFO {
+ KIRQL UnifiedIrql;
+ ULONG MessageCount;
+ IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1];
+ } IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO;
- typedef struct _KEY_WOW64_FLAGS_INFORMATION {
- ULONG UserFlags;
- } KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION;
+ typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS {
+ _In_ PDEVICE_OBJECT PhysicalDeviceObject;
+ _Out_ PKINTERRUPT *InterruptObject;
+ _In_ PKSERVICE_ROUTINE ServiceRoutine;
+ _In_ PVOID ServiceContext;
+ _In_opt_ PKSPIN_LOCK SpinLock;
+ _In_ KIRQL SynchronizeIrql;
+ _In_ BOOLEAN FloatingSave;
+ _In_ BOOLEAN ShareVector;
+ _In_ ULONG Vector;
+ _In_ KIRQL Irql;
+ _In_ KINTERRUPT_MODE InterruptMode;
+ _In_ KAFFINITY ProcessorEnableMask;
+ _In_ USHORT Group;
+ } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS;
- typedef struct _KEY_WRITE_TIME_INFORMATION {
- LARGE_INTEGER LastWriteTime;
- } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
+ typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS {
+ _In_ PDEVICE_OBJECT PhysicalDeviceObject;
+ _Out_ PKINTERRUPT *InterruptObject;
+ _In_ PKSERVICE_ROUTINE ServiceRoutine;
+ _In_ PVOID ServiceContext;
+ _In_opt_ PKSPIN_LOCK SpinLock;
+ _In_opt_ KIRQL SynchronizeIrql;
+ _In_ BOOLEAN FloatingSave;
+ } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS;
- typedef enum _REG_NOTIFY_CLASS {
- RegNtDeleteKey,
- RegNtPreDeleteKey = RegNtDeleteKey,
- RegNtSetValueKey,
- RegNtPreSetValueKey = RegNtSetValueKey,
- RegNtDeleteValueKey,
- RegNtPreDeleteValueKey = RegNtDeleteValueKey,
- RegNtSetInformationKey,
- RegNtPreSetInformationKey = RegNtSetInformationKey,
- RegNtRenameKey,
- RegNtPreRenameKey = RegNtRenameKey,
- RegNtEnumerateKey,
- RegNtPreEnumerateKey = RegNtEnumerateKey,
- RegNtEnumerateValueKey,
- RegNtPreEnumerateValueKey = RegNtEnumerateValueKey,
- RegNtQueryKey,
- RegNtPreQueryKey = RegNtQueryKey,
- RegNtQueryValueKey,
- RegNtPreQueryValueKey = RegNtQueryValueKey,
- RegNtQueryMultipleValueKey,
- RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey,
- RegNtPreCreateKey,
- RegNtPostCreateKey,
- RegNtPreOpenKey,
- RegNtPostOpenKey,
- RegNtKeyHandleClose,
- RegNtPreKeyHandleClose = RegNtKeyHandleClose,
- RegNtPostDeleteKey,
- RegNtPostSetValueKey,
- RegNtPostDeleteValueKey,
- RegNtPostSetInformationKey,
- RegNtPostRenameKey,
- RegNtPostEnumerateKey,
- RegNtPostEnumerateValueKey,
- RegNtPostQueryKey,
- RegNtPostQueryValueKey,
- RegNtPostQueryMultipleValueKey,
- RegNtPostKeyHandleClose,
- RegNtPreCreateKeyEx,
- RegNtPostCreateKeyEx,
- RegNtPreOpenKeyEx,
- RegNtPostOpenKeyEx,
- RegNtPreFlushKey,
- RegNtPostFlushKey,
- RegNtPreLoadKey,
- RegNtPostLoadKey,
- RegNtPreUnLoadKey,
- RegNtPostUnLoadKey,
- RegNtPreQueryKeySecurity,
- RegNtPostQueryKeySecurity,
- RegNtPreSetKeySecurity,
- RegNtPostSetKeySecurity,
- RegNtCallbackObjectContextCleanup,
- RegNtPreRestoreKey,
- RegNtPostRestoreKey,
- RegNtPreSaveKey,
- RegNtPostSaveKey,
- RegNtPreReplaceKey,
- RegNtPostReplaceKey,
- MaxRegNtNotifyClass
- } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS;
+ typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS {
+ _In_ PDEVICE_OBJECT PhysicalDeviceObject;
+ union {
+ _Out_ PVOID *Generic;
+ _Out_ PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable;
+ _Out_ PKINTERRUPT *InterruptObject;
+ } ConnectionContext;
+ _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine;
+ _In_ PVOID ServiceContext;
+ _In_opt_ PKSPIN_LOCK SpinLock;
+ _In_opt_ KIRQL SynchronizeIrql;
+ _In_ BOOLEAN FloatingSave;
+ _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine;
+ } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS;
- _IRQL_requires_same_
- _Function_class_(EX_CALLBACK_FUNCTION)
- typedef NTSTATUS
- (NTAPI EX_CALLBACK_FUNCTION)(
- _In_ PVOID CallbackContext,
- _In_opt_ PVOID Argument1,
- _In_opt_ PVOID Argument2);
- typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION;
+ typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
+ _Inout_ ULONG Version;
+ _ANONYMOUS_UNION union {
+ IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
+ IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
+ IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
+ } DUMMYUNIONNAME;
+ } IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
- typedef struct _REG_DELETE_KEY_INFORMATION {
- PVOID Object;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- , REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION
- #endif
- ;
+ typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS {
+ _In_ ULONG Version;
+ union {
+ _In_ PVOID Generic;
+ _In_ PKINTERRUPT InterruptObject;
+ _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable;
+ } ConnectionContext;
+ } IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS;
- typedef struct _REG_SET_VALUE_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING ValueName;
- ULONG TitleIndex;
- ULONG Type;
- PVOID Data;
- ULONG DataSize;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
+ typedef enum _IO_ACCESS_TYPE {
+ ReadAccess,
+ WriteAccess,
+ ModifyAccess
+ } IO_ACCESS_TYPE;
- typedef struct _REG_DELETE_VALUE_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING ValueName;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
+ typedef enum _IO_ACCESS_MODE {
+ SequentialAccess,
+ RandomAccess
+ } IO_ACCESS_MODE;
- typedef struct _REG_SET_INFORMATION_KEY_INFORMATION {
- PVOID Object;
- KEY_SET_INFORMATION_CLASS KeySetInformationClass;
- PVOID KeySetInformation;
- ULONG KeySetInformationLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
+ typedef enum _IO_CONTAINER_NOTIFICATION_CLASS {
+ IoSessionStateNotification,
+ IoMaxContainerNotificationClass
+ } IO_CONTAINER_NOTIFICATION_CLASS;
- typedef struct _REG_ENUMERATE_KEY_INFORMATION {
- PVOID Object;
- ULONG Index;
- KEY_INFORMATION_CLASS KeyInformationClass;
- PVOID KeyInformation;
- ULONG Length;
- PULONG ResultLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
+ typedef struct _IO_SESSION_STATE_NOTIFICATION {
+ ULONG Size;
+ ULONG Flags;
+ PVOID IoObject;
+ ULONG EventMask;
+ PVOID Context;
+ } IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION;
- typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION {
- PVOID Object;
- ULONG Index;
- KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
- PVOID KeyValueInformation;
- ULONG Length;
- PULONG ResultLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
+ typedef enum _IO_CONTAINER_INFORMATION_CLASS {
+ IoSessionStateInformation,
+ IoMaxContainerInformationClass
+ } IO_CONTAINER_INFORMATION_CLASS;
- typedef struct _REG_QUERY_KEY_INFORMATION {
- PVOID Object;
- KEY_INFORMATION_CLASS KeyInformationClass;
- PVOID KeyInformation;
- ULONG Length;
- PULONG ResultLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
+ typedef struct _IO_SESSION_STATE_INFORMATION {
+ ULONG SessionId;
+ IO_SESSION_STATE SessionState;
+ BOOLEAN LocalSession;
+ } IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION;
- typedef struct _REG_QUERY_VALUE_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING ValueName;
- KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
- PVOID KeyValueInformation;
- ULONG Length;
- PULONG ResultLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
+ #if (NTDDI_VERSION >= NTDDI_WIN7)
- typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
- PVOID Object;
- PKEY_VALUE_ENTRY ValueEntries;
- ULONG EntryCount;
- PVOID ValueBuffer;
- PULONG BufferLength;
- PULONG RequiredBufferLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
+ typedef NTSTATUS
+ (NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)(
+ VOID);
- typedef struct _REG_RENAME_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING NewName;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION;
+ typedef NTSTATUS
+ (NTAPI IO_SESSION_NOTIFICATION_FUNCTION)(
+ _In_ PVOID SessionObject,
+ _In_ PVOID IoObject,
+ _In_ ULONG Event,
+ _In_ PVOID Context,
+ _In_reads_bytes_opt_(PayloadLength) PVOID NotificationPayload,
+ _In_ ULONG PayloadLength);
- typedef struct _REG_CREATE_KEY_INFORMATION {
- PUNICODE_STRING CompleteName;
- PVOID RootObject;
- PVOID ObjectType;
- ULONG CreateOptions;
- PUNICODE_STRING Class;
- PVOID SecurityDescriptor;
- PVOID SecurityQualityOfService;
- ACCESS_MASK DesiredAccess;
- ACCESS_MASK GrantedAccess;
- PULONG Disposition;
- PVOID *ResultObject;
- PVOID CallContext;
- PVOID RootObjectContext;
- PVOID Transaction;
- PVOID Reserved;
- } REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION;
+ typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION;
- typedef struct _REG_CREATE_KEY_INFORMATION_V1 {
- PUNICODE_STRING CompleteName;
- PVOID RootObject;
- PVOID ObjectType;
- ULONG Options;
- PUNICODE_STRING Class;
- PVOID SecurityDescriptor;
- PVOID SecurityQualityOfService;
- ACCESS_MASK DesiredAccess;
- ACCESS_MASK GrantedAccess;
- PULONG Disposition;
- PVOID *ResultObject;
- PVOID CallContext;
- PVOID RootObjectContext;
- PVOID Transaction;
- ULONG_PTR Version;
- PUNICODE_STRING RemainingName;
- ULONG Wow64Flags;
- ULONG Attributes;
- KPROCESSOR_MODE CheckAccessMode;
- } REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1;
+ #endif
- typedef struct _REG_PRE_CREATE_KEY_INFORMATION {
- PUNICODE_STRING CompleteName;
- } REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;;
+ typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK;
- typedef struct _REG_POST_CREATE_KEY_INFORMATION {
- PUNICODE_STRING CompleteName;
- PVOID Object;
- NTSTATUS Status;
- } REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
+ typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
+ BOOLEAN Removed;
+ BOOLEAN Reserved[3];
+ volatile LONG IoCount;
+ KEVENT RemoveEvent;
+ } IO_REMOVE_LOCK_COMMON_BLOCK;
- typedef struct _REG_POST_OPERATION_INFORMATION {
- PVOID Object;
- NTSTATUS Status;
- PVOID PreInformation;
- NTSTATUS ReturnStatus;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
+ typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
+ LONG Signature;
+ LONG HighWatermark;
+ LONGLONG MaxLockedTicks;
+ LONG AllocateTag;
+ LIST_ENTRY LockList;
+ KSPIN_LOCK Spin;
+ volatile LONG LowMemoryCount;
+ ULONG Reserved1[4];
+ PVOID Reserved2;
+ PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
+ } IO_REMOVE_LOCK_DBG_BLOCK;
- typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
- PVOID Object;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
+ typedef struct _IO_REMOVE_LOCK {
+ IO_REMOVE_LOCK_COMMON_BLOCK Common;
+ #if DBG
+ IO_REMOVE_LOCK_DBG_BLOCK Dbg;
+ #endif
+ } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
- #if (NTDDI_VERSION >= NTDDI_VISTA)
+ typedef struct _IO_WORKITEM *PIO_WORKITEM;
- typedef struct _REG_LOAD_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING KeyName;
- PUNICODE_STRING SourceFile;
- ULONG Flags;
- PVOID TrustClassObject;
- PVOID UserEvent;
- ACCESS_MASK DesiredAccess;
- PHANDLE RootHandle;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION;
+ _Function_class_(IO_WORKITEM_ROUTINE)
+ _IRQL_requires_(PASSIVE_LEVEL)
+ _IRQL_requires_same_
+ typedef VOID
+ (NTAPI IO_WORKITEM_ROUTINE)(
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _In_opt_ PVOID Context);
+ typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE;
- typedef struct _REG_UNLOAD_KEY_INFORMATION {
- PVOID Object;
- PVOID UserEvent;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION;
+ typedef VOID
+ (NTAPI IO_WORKITEM_ROUTINE_EX)(
+ _In_ PVOID IoObject,
+ _In_opt_ PVOID Context,
+ _In_ PIO_WORKITEM IoWorkItem);
+ typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX;
- typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION {
- PVOID Object;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
+ typedef struct _SHARE_ACCESS {
+ ULONG OpenCount;
+ ULONG Readers;
+ ULONG Writers;
+ ULONG Deleters;
+ ULONG SharedRead;
+ ULONG SharedWrite;
+ ULONG SharedDelete;
+ } SHARE_ACCESS, *PSHARE_ACCESS;
- typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION {
- PVOID Object;
- PSECURITY_INFORMATION SecurityInformation;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PULONG Length;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION;
-
- typedef struct _REG_SET_KEY_SECURITY_INFORMATION {
- PVOID Object;
- PSECURITY_INFORMATION SecurityInformation;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION;
-
- typedef struct _REG_RESTORE_KEY_INFORMATION {
- PVOID Object;
- HANDLE FileHandle;
- ULONG Flags;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION;
-
- typedef struct _REG_SAVE_KEY_INFORMATION {
- PVOID Object;
- HANDLE FileHandle;
- ULONG Format;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION;
+ /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
+ inheritance, even from a struct renders the type non-POD. So we use
+ this hack */
+ #define PCI_COMMON_HEADER_LAYOUT \
+ USHORT VendorID; \
+ USHORT DeviceID; \
+ USHORT Command; \
+ USHORT Status; \
+ UCHAR RevisionID; \
+ UCHAR ProgIf; \
+ UCHAR SubClass; \
+ UCHAR BaseClass; \
+ UCHAR CacheLineSize; \
+ UCHAR LatencyTimer; \
+ UCHAR HeaderType; \
+ UCHAR BIST; \
+ union { \
+ struct _PCI_HEADER_TYPE_0 { \
+ ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
+ ULONG CIS; \
+ USHORT SubVendorID; \
+ USHORT SubSystemID; \
+ ULONG ROMBaseAddress; \
+ UCHAR CapabilitiesPtr; \
+ UCHAR Reserved1[3]; \
+ ULONG Reserved2; \
+ UCHAR InterruptLine; \
+ UCHAR InterruptPin; \
+ UCHAR MinimumGrant; \
+ UCHAR MaximumLatency; \
+ } type0; \
+ struct _PCI_HEADER_TYPE_1 { \
+ ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
+ UCHAR PrimaryBus; \
+ UCHAR SecondaryBus; \
+ UCHAR SubordinateBus; \
+ UCHAR SecondaryLatency; \
+ UCHAR IOBase; \
+ UCHAR IOLimit; \
+ USHORT SecondaryStatus; \
+ USHORT MemoryBase; \
+ USHORT MemoryLimit; \
+ USHORT PrefetchBase; \
+ USHORT PrefetchLimit; \
+ ULONG PrefetchBaseUpper32; \
+ ULONG PrefetchLimitUpper32; \
+ USHORT IOBaseUpper16; \
+ USHORT IOLimitUpper16; \
+ UCHAR CapabilitiesPtr; \
+ UCHAR Reserved1[3]; \
+ ULONG ROMBaseAddress; \
+ UCHAR InterruptLine; \
+ UCHAR InterruptPin; \
+ USHORT BridgeControl; \
+ } type1; \
+ struct _PCI_HEADER_TYPE_2 { \
+ ULONG SocketRegistersBaseAddress; \
+ UCHAR CapabilitiesPtr; \
+ UCHAR Reserved; \
+ USHORT SecondaryStatus; \
+ UCHAR PrimaryBus; \
+ UCHAR SecondaryBus; \
+ UCHAR SubordinateBus; \
+ UCHAR SecondaryLatency; \
+ struct { \
+ ULONG Base; \
+ ULONG Limit; \
+ } Range[PCI_TYPE2_ADDRESSES-1]; \
+ UCHAR InterruptLine; \
+ UCHAR InterruptPin; \
+ USHORT BridgeControl; \
+ } type2; \
+ } u;
- typedef struct _REG_REPLACE_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING OldFileName;
- PUNICODE_STRING NewFileName;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION;
+ typedef enum _CREATE_FILE_TYPE {
+ CreateFileTypeNone,
+ CreateFileTypeNamedPipe,
+ CreateFileTypeMailslot
+ } CREATE_FILE_TYPE;
- #endif /* NTDDI_VERSION >= NTDDI_VISTA */
+ #define IO_FORCE_ACCESS_CHECK 0x001
+ #define IO_NO_PARAMETER_CHECKING 0x100
- #define SERVICE_KERNEL_DRIVER 0x00000001
- #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
- #define SERVICE_ADAPTER 0x00000004
- #define SERVICE_RECOGNIZER_DRIVER 0x00000008
+ #define IO_REPARSE 0x0
+ #define IO_REMOUNT 0x1
- #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
- SERVICE_FILE_SYSTEM_DRIVER | \
- SERVICE_RECOGNIZER_DRIVER)
+ typedef struct _IO_STATUS_BLOCK {
+ _ANONYMOUS_UNION union {
+ NTSTATUS Status;
+ PVOID Pointer;
+ } DUMMYUNIONNAME;
+ ULONG_PTR Information;
+ } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
- #define SERVICE_WIN32_OWN_PROCESS 0x00000010
- #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
- #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
- SERVICE_WIN32_SHARE_PROCESS)
+ #if defined(_WIN64)
+ typedef struct _IO_STATUS_BLOCK32 {
+ NTSTATUS Status;
+ ULONG Information;
+ } IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32;
+ #endif
- #define SERVICE_INTERACTIVE_PROCESS 0x00000100
+ typedef VOID
+ (NTAPI *PIO_APC_ROUTINE)(
+ _In_ PVOID ApcContext,
+ _In_ PIO_STATUS_BLOCK IoStatusBlock,
+ _In_ ULONG Reserved);
- #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
- SERVICE_ADAPTER | \
- SERVICE_DRIVER | \
- SERVICE_INTERACTIVE_PROCESS)
+ #define PIO_APC_ROUTINE_DEFINED
- /* Service Start Types */
- #define SERVICE_BOOT_START 0x00000000
- #define SERVICE_SYSTEM_START 0x00000001
- #define SERVICE_AUTO_START 0x00000002
- #define SERVICE_DEMAND_START 0x00000003
- #define SERVICE_DISABLED 0x00000004
+ typedef enum _IO_SESSION_EVENT {
+ IoSessionEventIgnore = 0,
+ IoSessionEventCreated,
+ IoSessionEventTerminated,
+ IoSessionEventConnected,
+ IoSessionEventDisconnected,
+ IoSessionEventLogon,
+ IoSessionEventLogoff,
+ IoSessionEventMax
+ } IO_SESSION_EVENT, *PIO_SESSION_EVENT;
- #define SERVICE_ERROR_IGNORE 0x00000000
- #define SERVICE_ERROR_NORMAL 0x00000001
- #define SERVICE_ERROR_SEVERE 0x00000002
- #define SERVICE_ERROR_CRITICAL 0x00000003
+ #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
+ #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
+ #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
+ #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
+ #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
+ #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
+ #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
- typedef enum _CM_SERVICE_NODE_TYPE {
- DriverType = SERVICE_KERNEL_DRIVER,
- FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
- Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
- Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
- AdapterType = SERVICE_ADAPTER,
- RecognizerType = SERVICE_RECOGNIZER_DRIVER
- } SERVICE_NODE_TYPE;
+ #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
- typedef enum _CM_SERVICE_LOAD_TYPE {
- BootLoad = SERVICE_BOOT_START,
- SystemLoad = SERVICE_SYSTEM_START,
- AutoLoad = SERVICE_AUTO_START,
- DemandLoad = SERVICE_DEMAND_START,
- DisableLoad = SERVICE_DISABLED
- } SERVICE_LOAD_TYPE;
+ #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
- typedef enum _CM_ERROR_CONTROL_TYPE {
- IgnoreError = SERVICE_ERROR_IGNORE,
- NormalError = SERVICE_ERROR_NORMAL,
- SevereError = SERVICE_ERROR_SEVERE,
- CriticalError = SERVICE_ERROR_CRITICAL
- } SERVICE_ERROR_TYPE;
+ typedef struct _IO_SESSION_CONNECT_INFO {
+ ULONG SessionId;
+ BOOLEAN LocalSession;
+ } IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO;
- #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
- #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
- #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
+ #define EVENT_INCREMENT 1
+ #define IO_NO_INCREMENT 0
+ #define IO_CD_ROM_INCREMENT 1
+ #define IO_DISK_INCREMENT 1
+ #define IO_KEYBOARD_INCREMENT 6
+ #define IO_MAILSLOT_INCREMENT 2
+ #define IO_MOUSE_INCREMENT 6
+ #define IO_NAMED_PIPE_INCREMENT 2
+ #define IO_NETWORK_INCREMENT 2
+ #define IO_PARALLEL_INCREMENT 1
+ #define IO_SERIAL_INCREMENT 2
+ #define IO_SOUND_INCREMENT 8
+ #define IO_VIDEO_INCREMENT 1
+ #define SEMAPHORE_INCREMENT 1
- #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
- CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
- CM_SERVICE_USB_DISK_BOOT_LOAD)
+ #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
- /******************************************************************************
- * I/O Manager Types *
- ******************************************************************************/
+ typedef struct _BOOTDISK_INFORMATION {
+ LONGLONG BootPartitionOffset;
+ LONGLONG SystemPartitionOffset;
+ ULONG BootDeviceSignature;
+ ULONG SystemDeviceSignature;
+ } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION;
+ typedef struct _BOOTDISK_INFORMATION_EX {
+ LONGLONG BootPartitionOffset;
+ LONGLONG SystemPartitionOffset;
+ ULONG BootDeviceSignature;
+ ULONG SystemDeviceSignature;
+ GUID BootDeviceGuid;
+ GUID SystemDeviceGuid;
+ BOOLEAN BootDeviceIsGpt;
+ BOOLEAN SystemDeviceIsGpt;
+ } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX;
- #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
+ #if (NTDDI_VERSION >= NTDDI_WIN7)
- #define CONNECT_FULLY_SPECIFIED 0x1
- #define CONNECT_LINE_BASED 0x2
- #define CONNECT_MESSAGE_BASED 0x3
- #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
- #define CONNECT_CURRENT_VERSION 0x4
+ typedef struct _LOADER_PARTITION_INFORMATION_EX {
+ ULONG PartitionStyle;
+ ULONG PartitionNumber;
+ _ANONYMOUS_UNION union {
+ ULONG Signature;
+ GUID DeviceId;
+ } DUMMYUNIONNAME;
+ ULONG Flags;
+ } LOADER_PARTITION_INFORMATION_EX, *PLOADER_PARTITION_INFORMATION_EX;
- #define POOL_COLD_ALLOCATION 256
- #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
- #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
+ typedef struct _BOOTDISK_INFORMATION_LITE {
+ ULONG NumberEntries;
+ LOADER_PARTITION_INFORMATION_EX Entries[1];
+ } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
- #define IO_TYPE_ADAPTER 1
- #define IO_TYPE_CONTROLLER 2
- #define IO_TYPE_DEVICE 3
- #define IO_TYPE_DRIVER 4
- #define IO_TYPE_FILE 5
- #define IO_TYPE_IRP 6
- #define IO_TYPE_MASTER_ADAPTER 7
- #define IO_TYPE_OPEN_PACKET 8
- #define IO_TYPE_TIMER 9
- #define IO_TYPE_VPB 10
- #define IO_TYPE_ERROR_LOG 11
- #define IO_TYPE_ERROR_MESSAGE 12
- #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
+ #else
- #define IO_TYPE_CSQ_IRP_CONTEXT 1
- #define IO_TYPE_CSQ 2
- #define IO_TYPE_CSQ_EX 3
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
+ typedef struct _BOOTDISK_INFORMATION_LITE {
+ ULONG BootDeviceSignature;
+ ULONG SystemDeviceSignature;
+ GUID BootDeviceGuid;
+ GUID SystemDeviceGuid;
+ BOOLEAN BootDeviceIsGpt;
+ BOOLEAN SystemDeviceIsGpt;
+ } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
+ #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- /* IO_RESOURCE_DESCRIPTOR.Option */
- #define IO_RESOURCE_PREFERRED 0x01
- #define IO_RESOURCE_DEFAULT 0x02
- #define IO_RESOURCE_ALTERNATIVE 0x08
+ #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- #define FILE_DEVICE_BEEP 0x00000001
- #define FILE_DEVICE_CD_ROM 0x00000002
- #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
- #define FILE_DEVICE_CONTROLLER 0x00000004
- #define FILE_DEVICE_DATALINK 0x00000005
- #define FILE_DEVICE_DFS 0x00000006
- #define FILE_DEVICE_DISK 0x00000007
- #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
- #define FILE_DEVICE_FILE_SYSTEM 0x00000009
- #define FILE_DEVICE_INPORT_PORT 0x0000000a
- #define FILE_DEVICE_KEYBOARD 0x0000000b
- #define FILE_DEVICE_MAILSLOT 0x0000000c
- #define FILE_DEVICE_MIDI_IN 0x0000000d
- #define FILE_DEVICE_MIDI_OUT 0x0000000e
- #define FILE_DEVICE_MOUSE 0x0000000f
- #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
- #define FILE_DEVICE_NAMED_PIPE 0x00000011
- #define FILE_DEVICE_NETWORK 0x00000012
- #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
- #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
- #define FILE_DEVICE_NULL 0x00000015
- #define FILE_DEVICE_PARALLEL_PORT 0x00000016
- #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
- #define FILE_DEVICE_PRINTER 0x00000018
- #define FILE_DEVICE_SCANNER 0x00000019
- #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
- #define FILE_DEVICE_SERIAL_PORT 0x0000001b
- #define FILE_DEVICE_SCREEN 0x0000001c
- #define FILE_DEVICE_SOUND 0x0000001d
- #define FILE_DEVICE_STREAMS 0x0000001e
- #define FILE_DEVICE_TAPE 0x0000001f
- #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
- #define FILE_DEVICE_TRANSPORT 0x00000021
- #define FILE_DEVICE_UNKNOWN 0x00000022
- #define FILE_DEVICE_VIDEO 0x00000023
- #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
- #define FILE_DEVICE_WAVE_IN 0x00000025
- #define FILE_DEVICE_WAVE_OUT 0x00000026
- #define FILE_DEVICE_8042_PORT 0x00000027
- #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
- #define FILE_DEVICE_BATTERY 0x00000029
- #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
- #define FILE_DEVICE_MODEM 0x0000002b
- #define FILE_DEVICE_VDM 0x0000002c
- #define FILE_DEVICE_MASS_STORAGE 0x0000002d
- #define FILE_DEVICE_SMB 0x0000002e
- #define FILE_DEVICE_KS 0x0000002f
- #define FILE_DEVICE_CHANGER 0x00000030
- #define FILE_DEVICE_SMARTCARD 0x00000031
- #define FILE_DEVICE_ACPI 0x00000032
- #define FILE_DEVICE_DVD 0x00000033
- #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
- #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
- #define FILE_DEVICE_DFS_VOLUME 0x00000036
- #define FILE_DEVICE_SERENUM 0x00000037
- #define FILE_DEVICE_TERMSRV 0x00000038
- #define FILE_DEVICE_KSEC 0x00000039
- #define FILE_DEVICE_FIPS 0x0000003A
- #define FILE_DEVICE_INFINIBAND 0x0000003B
- #define FILE_DEVICE_VMBUS 0x0000003E
- #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
- #define FILE_DEVICE_WPD 0x00000040
- #define FILE_DEVICE_BLUETOOTH 0x00000041
- #define FILE_DEVICE_MT_COMPOSITE 0x00000042
- #define FILE_DEVICE_MT_TRANSPORT 0x00000043
- #define FILE_DEVICE_BIOMETRIC 0x00000044
- #define FILE_DEVICE_PMI 0x00000045
+ #include <pshpack1.h>
- #if defined(NT_PROCESSOR_GROUPS)
+ typedef struct _EISA_MEMORY_TYPE {
+ UCHAR ReadWrite:1;
+ UCHAR Cached:1;
+ UCHAR Reserved0:1;
+ UCHAR Type:2;
+ UCHAR Shared:1;
+ UCHAR Reserved1:1;
+ UCHAR MoreEntries:1;
+ } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
- typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
+ typedef struct _EISA_MEMORY_CONFIGURATION {
+ EISA_MEMORY_TYPE ConfigurationByte;
+ UCHAR DataSize;
+ USHORT AddressLowWord;
+ UCHAR AddressHighByte;
+ USHORT MemorySize;
+ } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
- typedef enum _IRQ_DEVICE_POLICY_USHORT {
- IrqPolicyMachineDefault = 0,
- IrqPolicyAllCloseProcessors = 1,
- IrqPolicyOneCloseProcessor = 2,
- IrqPolicyAllProcessorsInMachine = 3,
- IrqPolicyAllProcessorsInGroup = 3,
- IrqPolicySpecifiedProcessors = 4,
- IrqPolicySpreadMessagesAcrossAllProcessors = 5};
+ typedef struct _EISA_IRQ_DESCRIPTOR {
+ UCHAR Interrupt:4;
+ UCHAR Reserved:1;
+ UCHAR LevelTriggered:1;
+ UCHAR Shared:1;
+ UCHAR MoreEntries:1;
+ } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
- #else /* defined(NT_PROCESSOR_GROUPS) */
+ typedef struct _EISA_IRQ_CONFIGURATION {
+ EISA_IRQ_DESCRIPTOR ConfigurationByte;
+ UCHAR Reserved;
+ } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
- typedef enum _IRQ_DEVICE_POLICY {
- IrqPolicyMachineDefault = 0,
- IrqPolicyAllCloseProcessors,
- IrqPolicyOneCloseProcessor,
- IrqPolicyAllProcessorsInMachine,
- IrqPolicySpecifiedProcessors,
- IrqPolicySpreadMessagesAcrossAllProcessors
- } IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
+ typedef struct _DMA_CONFIGURATION_BYTE0 {
+ UCHAR Channel:3;
+ UCHAR Reserved:3;
+ UCHAR Shared:1;
+ UCHAR MoreEntries:1;
+ } DMA_CONFIGURATION_BYTE0;
- #endif
+ typedef struct _DMA_CONFIGURATION_BYTE1 {
+ UCHAR Reserved0:2;
+ UCHAR TransferSize:2;
+ UCHAR Timing:2;
+ UCHAR Reserved1:2;
+ } DMA_CONFIGURATION_BYTE1;
- typedef enum _IRQ_PRIORITY {
- IrqPriorityUndefined = 0,
- IrqPriorityLow,
- IrqPriorityNormal,
- IrqPriorityHigh
- } IRQ_PRIORITY, *PIRQ_PRIORITY;
+ typedef struct _EISA_DMA_CONFIGURATION {
+ DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
+ DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
+ } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
- typedef enum _IRQ_GROUP_POLICY {
- GroupAffinityAllGroupZero = 0,
- GroupAffinityDontCare
- } IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY;
+ typedef struct _EISA_PORT_DESCRIPTOR {
+ UCHAR NumberPorts:5;
+ UCHAR Reserved:1;
+ UCHAR Shared:1;
+ UCHAR MoreEntries:1;
+ } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
- #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
+ typedef struct _EISA_PORT_CONFIGURATION {
+ EISA_PORT_DESCRIPTOR Configuration;
+ USHORT PortAddress;
+ } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
- typedef struct _OBJECT_HANDLE_INFORMATION {
- ULONG HandleAttributes;
- ACCESS_MASK GrantedAccess;
- } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
+ typedef struct _CM_EISA_SLOT_INFORMATION {
+ UCHAR ReturnCode;
+ UCHAR ReturnFlags;
+ UCHAR MajorRevision;
+ UCHAR MinorRevision;
+ USHORT Checksum;
+ UCHAR NumberFunctions;
+ UCHAR FunctionInformation;
+ ULONG CompressedId;
+ } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
- typedef struct _CLIENT_ID {
- HANDLE UniqueProcess;
- HANDLE UniqueThread;
- } CLIENT_ID, *PCLIENT_ID;
+ typedef struct _CM_EISA_FUNCTION_INFORMATION {
+ ULONG CompressedId;
+ UCHAR IdSlotFlags1;
+ UCHAR IdSlotFlags2;
+ UCHAR MinorRevision;
+ UCHAR MajorRevision;
+ UCHAR Selections[26];
+ UCHAR FunctionFlags;
+ UCHAR TypeString[80];
+ EISA_MEMORY_CONFIGURATION EisaMemory[9];
+ EISA_IRQ_CONFIGURATION EisaIrq[7];
+ EISA_DMA_CONFIGURATION EisaDma[4];
+ EISA_PORT_CONFIGURATION EisaPort[20];
+ UCHAR InitializationData[60];
+ } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
- typedef struct _VPB {
- CSHORT Type;
- CSHORT Size;
- USHORT Flags;
- USHORT VolumeLabelLength;
- struct _DEVICE_OBJECT *DeviceObject;
- struct _DEVICE_OBJECT *RealDevice;
- ULONG SerialNumber;
- ULONG ReferenceCount;
- WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
- } VPB, *PVPB;
+ #include <poppack.h>
- typedef enum _IO_ALLOCATION_ACTION {
- KeepObject = 1,
- DeallocateObject,
- DeallocateObjectKeepRegisters
- } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION;
+ /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
- _Function_class_(DRIVER_CONTROL)
- _IRQL_requires_same_
- typedef IO_ALLOCATION_ACTION
- (NTAPI DRIVER_CONTROL)(
- _In_ struct _DEVICE_OBJECT *DeviceObject,
- _Inout_ struct _IRP *Irp,
- _In_ PVOID MapRegisterBase,
- _In_ PVOID Context);
- typedef DRIVER_CONTROL *PDRIVER_CONTROL;
+ #define EISA_FUNCTION_ENABLED 0x80
+ #define EISA_FREE_FORM_DATA 0x40
+ #define EISA_HAS_PORT_INIT_ENTRY 0x20
+ #define EISA_HAS_PORT_RANGE 0x10
+ #define EISA_HAS_DMA_ENTRY 0x08
+ #define EISA_HAS_IRQ_ENTRY 0x04
+ #define EISA_HAS_MEMORY_ENTRY 0x02
+ #define EISA_HAS_TYPE_ENTRY 0x01
+ #define EISA_HAS_INFORMATION \
+ (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
+ + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
- typedef struct _WAIT_CONTEXT_BLOCK {
- KDEVICE_QUEUE_ENTRY WaitQueueEntry;
- PDRIVER_CONTROL DeviceRoutine;
- PVOID DeviceContext;
- ULONG NumberOfMapRegisters;
- PVOID DeviceObject;
- PVOID CurrentIrp;
- PKDPC BufferChainingDpc;
- } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
+ #define EISA_MORE_ENTRIES 0x80
+ #define EISA_SYSTEM_MEMORY 0x00
+ #define EISA_MEMORY_TYPE_RAM 0x01
- /* DEVICE_OBJECT.Flags */
- #define DO_VERIFY_VOLUME 0x00000002
- #define DO_BUFFERED_IO 0x00000004
- #define DO_EXCLUSIVE 0x00000008
- #define DO_DIRECT_IO 0x00000010
- #define DO_MAP_IO_BUFFER 0x00000020
- #define DO_DEVICE_INITIALIZING 0x00000080
- #define DO_SHUTDOWN_REGISTERED 0x00000800
- #define DO_BUS_ENUMERATED_DEVICE 0x00001000
- #define DO_POWER_PAGABLE 0x00002000
- #define DO_POWER_INRUSH 0x00004000
+ /* CM_EISA_SLOT_INFORMATION.ReturnCode */
- /* DEVICE_OBJECT.Characteristics */
- #define FILE_REMOVABLE_MEDIA 0x00000001
- #define FILE_READ_ONLY_DEVICE 0x00000002
- #define FILE_FLOPPY_DISKETTE 0x00000004
- #define FILE_WRITE_ONCE_MEDIA 0x00000008
- #define FILE_REMOTE_DEVICE 0x00000010
- #define FILE_DEVICE_IS_MOUNTED 0x00000020
- #define FILE_VIRTUAL_VOLUME 0x00000040
- #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
- #define FILE_DEVICE_SECURE_OPEN 0x00000100
- #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
- #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
- #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
+ #define EISA_INVALID_SLOT 0x80
+ #define EISA_INVALID_FUNCTION 0x81
+ #define EISA_INVALID_CONFIGURATION 0x82
+ #define EISA_EMPTY_SLOT 0x83
+ #define EISA_INVALID_BIOS_CALL 0x86
- /* DEVICE_OBJECT.AlignmentRequirement */
- #define FILE_BYTE_ALIGNMENT 0x00000000
- #define FILE_WORD_ALIGNMENT 0x00000001
- #define FILE_LONG_ALIGNMENT 0x00000003
- #define FILE_QUAD_ALIGNMENT 0x00000007
- #define FILE_OCTA_ALIGNMENT 0x0000000f
- #define FILE_32_BYTE_ALIGNMENT 0x0000001f
- #define FILE_64_BYTE_ALIGNMENT 0x0000003f
- #define FILE_128_BYTE_ALIGNMENT 0x0000007f
- #define FILE_256_BYTE_ALIGNMENT 0x000000ff
- #define FILE_512_BYTE_ALIGNMENT 0x000001ff
+ /*
+ ** Plug and Play structures
+ */
- /* DEVICE_OBJECT.DeviceType */
- #define DEVICE_TYPE ULONG
+ typedef VOID
+ (NTAPI *PINTERFACE_REFERENCE)(
+ PVOID Context);
- typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT {
- CSHORT Type;
- USHORT Size;
- LONG ReferenceCount;
- struct _DRIVER_OBJECT *DriverObject;
- struct _DEVICE_OBJECT *NextDevice;
- struct _DEVICE_OBJECT *AttachedDevice;
- struct _IRP *CurrentIrp;
- PIO_TIMER Timer;
- ULONG Flags;
- ULONG Characteristics;
- volatile PVPB Vpb;
- PVOID DeviceExtension;
- DEVICE_TYPE DeviceType;
- CCHAR StackSize;
- union {
- LIST_ENTRY ListEntry;
- WAIT_CONTEXT_BLOCK Wcb;
- } Queue;
- ULONG AlignmentRequirement;
- KDEVICE_QUEUE DeviceQueue;
- KDPC Dpc;
- ULONG ActiveThreadCount;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- KEVENT DeviceLock;
- USHORT SectorSize;
- USHORT Spare1;
- struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
- PVOID Reserved;
- } DEVICE_OBJECT, *PDEVICE_OBJECT;
+ typedef VOID
+ (NTAPI *PINTERFACE_DEREFERENCE)(
+ PVOID Context);
- typedef enum _IO_SESSION_STATE {
- IoSessionStateCreated = 1,
- IoSessionStateInitialized,
- IoSessionStateConnected,
- IoSessionStateDisconnected,
- IoSessionStateDisconnectedLoggedOn,
- IoSessionStateLoggedOn,
- IoSessionStateLoggedOff,
- IoSessionStateTerminated,
- IoSessionStateMax
- } IO_SESSION_STATE, *PIO_SESSION_STATE;
+ _Function_class_(TRANSLATE_BUS_ADDRESS)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI TRANSLATE_BUS_ADDRESS)(
+ _Inout_opt_ PVOID Context,
+ _In_ PHYSICAL_ADDRESS BusAddress,
+ _In_ ULONG Length,
+ _Out_ PULONG AddressSpace,
+ _Out_ PPHYSICAL_ADDRESS TranslatedAddress);
+ typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS;
- typedef enum _IO_COMPLETION_ROUTINE_RESULT {
- ContinueCompletion = STATUS_CONTINUE_COMPLETION,
- StopCompletion = STATUS_MORE_PROCESSING_REQUIRED
- } IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT;
+ _Function_class_(GET_DMA_ADAPTER)
+ _IRQL_requires_same_
+ typedef struct _DMA_ADAPTER*
+ (NTAPI GET_DMA_ADAPTER)(
+ _Inout_opt_ PVOID Context,
+ _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor,
+ _Out_ PULONG NumberOfMapRegisters);
+ typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER;
- typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY {
- PHYSICAL_ADDRESS MessageAddress;
- KAFFINITY TargetProcessorSet;
- PKINTERRUPT InterruptObject;
- ULONG MessageData;
- ULONG Vector;
- KIRQL Irql;
- KINTERRUPT_MODE Mode;
- KINTERRUPT_POLARITY Polarity;
- } IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY;
+ _Function_class_(GET_SET_DEVICE_DATA)
+ _IRQL_requires_same_
+ typedef ULONG
+ (NTAPI GET_SET_DEVICE_DATA)(
+ _Inout_opt_ PVOID Context,
+ _In_ ULONG DataType,
+ _Inout_updates_bytes_(Length) PVOID Buffer,
+ _In_ ULONG Offset,
+ _In_ ULONG Length);
+ typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA;
- typedef struct _IO_INTERRUPT_MESSAGE_INFO {
- KIRQL UnifiedIrql;
- ULONG MessageCount;
- IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1];
- } IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO;
+ typedef enum _DEVICE_INSTALL_STATE {
+ InstallStateInstalled,
+ InstallStateNeedsReinstall,
+ InstallStateFailedInstall,
+ InstallStateFinishInstall
+ } DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE;
- typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS {
- _In_ PDEVICE_OBJECT PhysicalDeviceObject;
- _Out_ PKINTERRUPT *InterruptObject;
- _In_ PKSERVICE_ROUTINE ServiceRoutine;
- _In_ PVOID ServiceContext;
- _In_opt_ PKSPIN_LOCK SpinLock;
- _In_ KIRQL SynchronizeIrql;
- _In_ BOOLEAN FloatingSave;
- _In_ BOOLEAN ShareVector;
- _In_ ULONG Vector;
- _In_ KIRQL Irql;
- _In_ KINTERRUPT_MODE InterruptMode;
- _In_ KAFFINITY ProcessorEnableMask;
- _In_ USHORT Group;
- } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS;
+ typedef struct _LEGACY_BUS_INFORMATION {
+ GUID BusTypeGuid;
+ INTERFACE_TYPE LegacyBusType;
+ ULONG BusNumber;
+ } LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION;
- typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS {
- _In_ PDEVICE_OBJECT PhysicalDeviceObject;
- _Out_ PKINTERRUPT *InterruptObject;
- _In_ PKSERVICE_ROUTINE ServiceRoutine;
- _In_ PVOID ServiceContext;
- _In_opt_ PKSPIN_LOCK SpinLock;
- _In_opt_ KIRQL SynchronizeIrql;
- _In_ BOOLEAN FloatingSave;
- } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS;
+ typedef enum _DEVICE_REMOVAL_POLICY {
+ RemovalPolicyExpectNoRemoval = 1,
+ RemovalPolicyExpectOrderlyRemoval = 2,
+ RemovalPolicyExpectSurpriseRemoval = 3
+ } DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY;
- typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS {
- _In_ PDEVICE_OBJECT PhysicalDeviceObject;
- union {
- _Out_ PVOID *Generic;
- _Out_ PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable;
- _Out_ PKINTERRUPT *InterruptObject;
- } ConnectionContext;
- _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine;
- _In_ PVOID ServiceContext;
- _In_opt_ PKSPIN_LOCK SpinLock;
- _In_opt_ KIRQL SynchronizeIrql;
- _In_ BOOLEAN FloatingSave;
- _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine;
- } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS;
+ typedef VOID
+ (NTAPI *PREENUMERATE_SELF)(
+ _In_ PVOID Context);
- typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
- _Inout_ ULONG Version;
- _ANONYMOUS_UNION union {
- IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
- IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
- IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
- } DUMMYUNIONNAME;
- } IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
+ typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf;
+ } REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD;
- typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS {
- _In_ ULONG Version;
- union {
- _In_ PVOID Generic;
- _In_ PKINTERRUPT InterruptObject;
- _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable;
- } ConnectionContext;
- } IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS;
+ typedef VOID
+ (NTAPI *PIO_DEVICE_EJECT_CALLBACK)(
+ _In_ NTSTATUS Status,
+ _Inout_opt_ PVOID Context);
- typedef enum _IO_ACCESS_TYPE {
- ReadAccess,
- WriteAccess,
- ModifyAccess
- } IO_ACCESS_TYPE;
-
- typedef enum _IO_ACCESS_MODE {
- SequentialAccess,
- RandomAccess
- } IO_ACCESS_MODE;
+ #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
- typedef enum _IO_CONTAINER_NOTIFICATION_CLASS {
- IoSessionStateNotification,
- IoMaxContainerNotificationClass
- } IO_CONTAINER_NOTIFICATION_CLASS;
+ /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
+ #define PCI_USE_SUBSYSTEM_IDS 0x00000001
+ #define PCI_USE_REVISION 0x00000002
+ #define PCI_USE_VENDEV_IDS 0x00000004
+ #define PCI_USE_CLASS_SUBCLASS 0x00000008
+ #define PCI_USE_PROGIF 0x00000010
+ #define PCI_USE_LOCAL_BUS 0x00000020
+ #define PCI_USE_LOCAL_DEVICE 0x00000040
- typedef struct _IO_SESSION_STATE_NOTIFICATION {
+ typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS {
ULONG Size;
ULONG Flags;
- PVOID IoObject;
- ULONG EventMask;
+ USHORT VendorID;
+ USHORT DeviceID;
+ UCHAR RevisionID;
+ USHORT SubVendorID;
+ USHORT SubSystemID;
+ UCHAR BaseClass;
+ UCHAR SubClass;
+ UCHAR ProgIf;
+ } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS;
+
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ typedef BOOLEAN
+ (NTAPI PCI_IS_DEVICE_PRESENT)(
+ _In_ USHORT VendorID,
+ _In_ USHORT DeviceID,
+ _In_ UCHAR RevisionID,
+ _In_ USHORT SubVendorID,
+ _In_ USHORT SubSystemID,
+ _In_ ULONG Flags);
+ typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT;
+
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ typedef BOOLEAN
+ (NTAPI PCI_IS_DEVICE_PRESENT_EX)(
+ _In_ PVOID Context,
+ _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters);
+ typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX;
+
+ typedef struct _BUS_INTERFACE_STANDARD {
+ USHORT Size;
+ USHORT Version;
PVOID Context;
- } IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
+ PGET_DMA_ADAPTER GetDmaAdapter;
+ PGET_SET_DEVICE_DATA SetBusData;
+ PGET_SET_DEVICE_DATA GetBusData;
+ } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD;
- typedef enum _IO_CONTAINER_INFORMATION_CLASS {
- IoSessionStateInformation,
- IoMaxContainerInformationClass
- } IO_CONTAINER_INFORMATION_CLASS;
+ typedef struct _PCI_DEVICE_PRESENT_INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PPCI_IS_DEVICE_PRESENT IsDevicePresent;
+ PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx;
+ } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE;
- typedef struct _IO_SESSION_STATE_INFORMATION {
- ULONG SessionId;
- IO_SESSION_STATE SessionState;
- BOOLEAN LocalSession;
- } IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION;
+ _Struct_size_bytes_(Size)
+ typedef struct _DEVICE_CAPABILITIES {
+ _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES)) USHORT Size;
+ USHORT Version;
+ ULONG DeviceD1:1;
+ ULONG DeviceD2:1;
+ ULONG LockSupported:1;
+ ULONG EjectSupported:1;
+ ULONG Removable:1;
+ ULONG DockDevice:1;
+ ULONG UniqueID:1;
+ ULONG SilentInstall:1;
+ ULONG RawDeviceOK:1;
+ ULONG SurpriseRemovalOK:1;
+ ULONG WakeFromD0:1;
+ ULONG WakeFromD1:1;
+ ULONG WakeFromD2:1;
+ ULONG WakeFromD3:1;
+ ULONG HardwareDisabled:1;
+ ULONG NonDynamic:1;
+ ULONG WarmEjectSupported:1;
+ ULONG NoDisplayInUI:1;
+ ULONG Reserved:14;
+ ULONG Address;
+ ULONG UINumber;
+ DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
+ SYSTEM_POWER_STATE SystemWake;
+ DEVICE_POWER_STATE DeviceWake;
+ ULONG D1Latency;
+ ULONG D2Latency;
+ ULONG D3Latency;
+ } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
- #if (NTDDI_VERSION >= NTDDI_WIN7)
+ typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ GUID InterfaceClassGuid;
+ PUNICODE_STRING SymbolicLinkName;
+ } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
- typedef NTSTATUS
- (NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)(
- VOID);
+ typedef struct _HWPROFILE_CHANGE_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION;
- typedef NTSTATUS
- (NTAPI IO_SESSION_NOTIFICATION_FUNCTION)(
- _In_ PVOID SessionObject,
- _In_ PVOID IoObject,
- _In_ ULONG Event,
- _In_ PVOID Context,
- _In_reads_bytes_opt_(PayloadLength) PVOID NotificationPayload,
- _In_ ULONG PayloadLength);
+ #undef INTERFACE
- typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION;
+ typedef struct _INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ } INTERFACE, *PINTERFACE;
- #endif
+ typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
- typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK;
+ typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
- typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
- BOOLEAN Removed;
- BOOLEAN Reserved[3];
- volatile LONG IoCount;
- KEVENT RemoveEvent;
- } IO_REMOVE_LOCK_COMMON_BLOCK;
+ /* PNP_DEVICE_STATE */
- typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
- LONG Signature;
- LONG HighWatermark;
- LONGLONG MaxLockedTicks;
- LONG AllocateTag;
- LIST_ENTRY LockList;
- KSPIN_LOCK Spin;
- volatile LONG LowMemoryCount;
- ULONG Reserved1[4];
- PVOID Reserved2;
- PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
- } IO_REMOVE_LOCK_DBG_BLOCK;
+ #define PNP_DEVICE_DISABLED 0x00000001
+ #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
+ #define PNP_DEVICE_FAILED 0x00000004
+ #define PNP_DEVICE_REMOVED 0x00000008
+ #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
+ #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
- typedef struct _IO_REMOVE_LOCK {
- IO_REMOVE_LOCK_COMMON_BLOCK Common;
- #if DBG
- IO_REMOVE_LOCK_DBG_BLOCK Dbg;
+ typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ struct _FILE_OBJECT *FileObject;
+ LONG NameBufferOffset;
+ UCHAR CustomDataBuffer[1];
+ } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
+
+ typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ struct _FILE_OBJECT *FileObject;
+ } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
+
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
+ #include <devpropdef.h>
+ #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
#endif
- } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
- typedef struct _IO_WORKITEM *PIO_WORKITEM;
+ #define PNP_REPLACE_NO_MAP MAXLONGLONG
- _Function_class_(IO_WORKITEM_ROUTINE)
- _IRQL_requires_(PASSIVE_LEVEL)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI IO_WORKITEM_ROUTINE)(
- _In_ PDEVICE_OBJECT DeviceObject,
- _In_opt_ PVOID Context);
- typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE;
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_MAP_MEMORY)(
+ _In_ PHYSICAL_ADDRESS TargetPhysicalAddress,
+ _In_ PHYSICAL_ADDRESS SparePhysicalAddress,
+ _Inout_ PLARGE_INTEGER NumberOfBytes,
+ _Outptr_ PVOID *TargetAddress,
+ _Outptr_ PVOID *SpareAddress);
- typedef VOID
- (NTAPI IO_WORKITEM_ROUTINE_EX)(
- _In_ PVOID IoObject,
- _In_opt_ PVOID Context,
- _In_ PIO_WORKITEM IoWorkItem);
- typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX;
+ typedef struct _PNP_REPLACE_MEMORY_LIST {
+ ULONG AllocatedCount;
+ ULONG Count;
+ ULONGLONG TotalLength;
+ struct {
+ PHYSICAL_ADDRESS Address;
+ ULONGLONG Length;
+ } Ranges[ANYSIZE_ARRAY];
+ } PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST;
- typedef struct _SHARE_ACCESS {
- ULONG OpenCount;
- ULONG Readers;
- ULONG Writers;
- ULONG Deleters;
- ULONG SharedRead;
- ULONG SharedWrite;
- ULONG SharedDelete;
- } SHARE_ACCESS, *PSHARE_ACCESS;
+ typedef struct _PNP_REPLACE_PROCESSOR_LIST {
+ PKAFFINITY Affinity;
+ _Field_range_(<=, MAXIMUM_GROUPS) ULONG GroupCount;
+ ULONG AllocatedCount;
+ ULONG Count;
+ ULONG ApicIds[ANYSIZE_ARRAY];
+ } PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST;
- /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
- inheritance, even from a struct renders the type non-POD. So we use
- this hack */
- #define PCI_COMMON_HEADER_LAYOUT \
- USHORT VendorID; \
- USHORT DeviceID; \
- USHORT Command; \
- USHORT Status; \
- UCHAR RevisionID; \
- UCHAR ProgIf; \
- UCHAR SubClass; \
- UCHAR BaseClass; \
- UCHAR CacheLineSize; \
- UCHAR LatencyTimer; \
- UCHAR HeaderType; \
- UCHAR BIST; \
- union { \
- struct _PCI_HEADER_TYPE_0 { \
- ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
- ULONG CIS; \
- USHORT SubVendorID; \
- USHORT SubSystemID; \
- ULONG ROMBaseAddress; \
- UCHAR CapabilitiesPtr; \
- UCHAR Reserved1[3]; \
- ULONG Reserved2; \
- UCHAR InterruptLine; \
- UCHAR InterruptPin; \
- UCHAR MinimumGrant; \
- UCHAR MaximumLatency; \
- } type0; \
- struct _PCI_HEADER_TYPE_1 { \
- ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
- UCHAR PrimaryBus; \
- UCHAR SecondaryBus; \
- UCHAR SubordinateBus; \
- UCHAR SecondaryLatency; \
- UCHAR IOBase; \
- UCHAR IOLimit; \
- USHORT SecondaryStatus; \
- USHORT MemoryBase; \
- USHORT MemoryLimit; \
- USHORT PrefetchBase; \
- USHORT PrefetchLimit; \
- ULONG PrefetchBaseUpper32; \
- ULONG PrefetchLimitUpper32; \
- USHORT IOBaseUpper16; \
- USHORT IOLimitUpper16; \
- UCHAR CapabilitiesPtr; \
- UCHAR Reserved1[3]; \
- ULONG ROMBaseAddress; \
- UCHAR InterruptLine; \
- UCHAR InterruptPin; \
- USHORT BridgeControl; \
- } type1; \
- struct _PCI_HEADER_TYPE_2 { \
- ULONG SocketRegistersBaseAddress; \
- UCHAR CapabilitiesPtr; \
- UCHAR Reserved; \
- USHORT SecondaryStatus; \
- UCHAR PrimaryBus; \
- UCHAR SecondaryBus; \
- UCHAR SubordinateBus; \
- UCHAR SecondaryLatency; \
- struct { \
- ULONG Base; \
- ULONG Limit; \
- } Range[PCI_TYPE2_ADDRESSES-1]; \
- UCHAR InterruptLine; \
- UCHAR InterruptPin; \
- USHORT BridgeControl; \
- } type2; \
- } u;
-
- typedef enum _CREATE_FILE_TYPE {
- CreateFileTypeNone,
- CreateFileTypeNamedPipe,
- CreateFileTypeMailslot
- } CREATE_FILE_TYPE;
-
- #define IO_FORCE_ACCESS_CHECK 0x001
- #define IO_NO_PARAMETER_CHECKING 0x100
-
- #define IO_REPARSE 0x0
- #define IO_REMOUNT 0x1
+ typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 {
+ KAFFINITY AffinityMask;
+ ULONG AllocatedCount;
+ ULONG Count;
+ ULONG ApicIds[ANYSIZE_ARRAY];
+ } PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1;
- typedef struct _IO_STATUS_BLOCK {
- _ANONYMOUS_UNION union {
- NTSTATUS Status;
- PVOID Pointer;
- } DUMMYUNIONNAME;
- ULONG_PTR Information;
- } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+ #define PNP_REPLACE_PARAMETERS_VERSION 2
- #if defined(_WIN64)
- typedef struct _IO_STATUS_BLOCK32 {
- NTSTATUS Status;
- ULONG Information;
- } IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32;
- #endif
+ typedef struct _PNP_REPLACE_PARAMETERS {
+ ULONG Size;
+ ULONG Version;
+ ULONG64 Target;
+ ULONG64 Spare;
+ PPNP_REPLACE_PROCESSOR_LIST TargetProcessors;
+ PPNP_REPLACE_PROCESSOR_LIST SpareProcessors;
+ PPNP_REPLACE_MEMORY_LIST TargetMemory;
+ PPNP_REPLACE_MEMORY_LIST SpareMemory;
+ PREPLACE_MAP_MEMORY MapMemory;
+ } PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS;
typedef VOID
- (NTAPI *PIO_APC_ROUTINE)(
- _In_ PVOID ApcContext,
- _In_ PIO_STATUS_BLOCK IoStatusBlock,
- _In_ ULONG Reserved);
+ (NTAPI *PREPLACE_UNLOAD)(
+ VOID);
- #define PIO_APC_ROUTINE_DEFINED
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_BEGIN)(
+ _In_ PPNP_REPLACE_PARAMETERS Parameters,
+ _Outptr_ PVOID *Context);
- typedef enum _IO_SESSION_EVENT {
- IoSessionEventIgnore = 0,
- IoSessionEventCreated,
- IoSessionEventTerminated,
- IoSessionEventConnected,
- IoSessionEventDisconnected,
- IoSessionEventLogon,
- IoSessionEventLogoff,
- IoSessionEventMax
- } IO_SESSION_EVENT, *PIO_SESSION_EVENT;
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_END)(
+ _In_ PVOID Context);
- #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
- #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
- #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
- #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
- #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
- #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
- #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)(
+ _In_ PVOID Context,
+ _In_ PHYSICAL_ADDRESS PhysicalAddress,
+ _In_ LARGE_INTEGER ByteCount);
- #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_SET_PROCESSOR_ID)(
+ _In_ PVOID Context,
+ _In_ ULONG ApicId,
+ _In_ BOOLEAN Target);
- #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_SWAP)(
+ _In_ PVOID Context);
- typedef struct _IO_SESSION_CONNECT_INFO {
- ULONG SessionId;
- BOOLEAN LocalSession;
- } IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO;
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)(
+ _In_ PVOID Context);
- #define EVENT_INCREMENT 1
- #define IO_NO_INCREMENT 0
- #define IO_CD_ROM_INCREMENT 1
- #define IO_DISK_INCREMENT 1
- #define IO_KEYBOARD_INCREMENT 6
- #define IO_MAILSLOT_INCREMENT 2
- #define IO_MOUSE_INCREMENT 6
- #define IO_NAMED_PIPE_INCREMENT 2
- #define IO_NETWORK_INCREMENT 2
- #define IO_PARALLEL_INCREMENT 1
- #define IO_SERIAL_INCREMENT 2
- #define IO_SOUND_INCREMENT 8
- #define IO_VIDEO_INCREMENT 1
- #define SEMAPHORE_INCREMENT 1
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)(
+ _In_ PVOID Context);
- #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_GET_MEMORY_DESTINATION)(
+ _In_ PVOID Context,
+ _In_ PHYSICAL_ADDRESS SourceAddress,
+ _Out_ PPHYSICAL_ADDRESS DestinationAddress);
- typedef struct _BOOTDISK_INFORMATION {
- LONGLONG BootPartitionOffset;
- LONGLONG SystemPartitionOffset;
- ULONG BootDeviceSignature;
- ULONG SystemDeviceSignature;
- } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION;
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)(
+ _In_ PVOID Context,
+ _In_ BOOLEAN Enable);
- typedef struct _BOOTDISK_INFORMATION_EX {
- LONGLONG BootPartitionOffset;
- LONGLONG SystemPartitionOffset;
- ULONG BootDeviceSignature;
- ULONG SystemDeviceSignature;
- GUID BootDeviceGuid;
- GUID SystemDeviceGuid;
- BOOLEAN BootDeviceIsGpt;
- BOOLEAN SystemDeviceIsGpt;
- } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX;
+ #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
+ #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
+ FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
- #if (NTDDI_VERSION >= NTDDI_WIN7)
+ #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
+ #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
+ #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
+ #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
+ #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
- typedef struct _LOADER_PARTITION_INFORMATION_EX {
- ULONG PartitionStyle;
- ULONG PartitionNumber;
- _ANONYMOUS_UNION union {
- ULONG Signature;
- GUID DeviceId;
- } DUMMYUNIONNAME;
+ typedef struct _PNP_REPLACE_DRIVER_INTERFACE {
+ ULONG Size;
+ ULONG Version;
ULONG Flags;
- } LOADER_PARTITION_INFORMATION_EX, *PLOADER_PARTITION_INFORMATION_EX;
-
- typedef struct _BOOTDISK_INFORMATION_LITE {
- ULONG NumberEntries;
- LOADER_PARTITION_INFORMATION_EX Entries[1];
- } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
+ PREPLACE_UNLOAD Unload;
+ PREPLACE_BEGIN BeginReplace;
+ PREPLACE_END EndReplace;
+ PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory;
+ PREPLACE_SET_PROCESSOR_ID SetProcessorId;
+ PREPLACE_SWAP Swap;
+ PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror;
+ PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory;
+ PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination;
+ PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce;
+ } PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE;
- #else
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREPLACE_DRIVER_INIT)(
+ _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface,
+ _In_ PVOID Unused);
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- typedef struct _BOOTDISK_INFORMATION_LITE {
- ULONG BootDeviceSignature;
- ULONG SystemDeviceSignature;
- GUID BootDeviceGuid;
- GUID SystemDeviceGuid;
- BOOLEAN BootDeviceIsGpt;
- BOOLEAN SystemDeviceIsGpt;
- } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+ typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
+ DeviceUsageTypeUndefined,
+ DeviceUsageTypePaging,
+ DeviceUsageTypeHibernation,
+ DeviceUsageTypeDumpFile
+ } DEVICE_USAGE_NOTIFICATION_TYPE;
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+ typedef struct _POWER_SEQUENCE {
+ ULONG SequenceD1;
+ ULONG SequenceD2;
+ ULONG SequenceD3;
+ } POWER_SEQUENCE, *PPOWER_SEQUENCE;
- #include <pshpack1.h>
+ #ifdef _PREFAST_
+ #define __string_type 0x1000
+ #define __guid_type 0x2000
+ #define __multiString_type 0x4000
+ #else
+ #define __string_type 0
+ #define __guid_type 0
+ #define __multiString_type 0
+ #endif
- typedef struct _EISA_MEMORY_TYPE {
- UCHAR ReadWrite:1;
- UCHAR Cached:1;
- UCHAR Reserved0:1;
- UCHAR Type:2;
- UCHAR Shared:1;
- UCHAR Reserved1:1;
- UCHAR MoreEntries:1;
- } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
+ typedef enum {
+ DevicePropertyDeviceDescription = 0x0 | __string_type,
+ DevicePropertyHardwareID = 0x1 | __multiString_type,
+ DevicePropertyCompatibleIDs = 0x2 | __multiString_type,
+ DevicePropertyBootConfiguration = 0x3,
+ DevicePropertyBootConfigurationTranslated = 0x4,
+ DevicePropertyClassName = 0x5 | __string_type,
+ DevicePropertyClassGuid = 0x6 | __string_type,
+ DevicePropertyDriverKeyName = 0x7 | __string_type,
+ DevicePropertyManufacturer = 0x8 | __string_type,
+ DevicePropertyFriendlyName = 0x9 | __string_type,
+ DevicePropertyLocationInformation = 0xa | __string_type,
+ DevicePropertyPhysicalDeviceObjectName = 0xb | __string_type,
+ DevicePropertyBusTypeGuid = 0xc | __guid_type,
+ DevicePropertyLegacyBusType = 0xd,
+ DevicePropertyBusNumber = 0xe,
+ DevicePropertyEnumeratorName = 0xf | __string_type,
+ DevicePropertyAddress = 0x10,
+ DevicePropertyUINumber = 0x11,
+ DevicePropertyInstallState = 0x12,
+ DevicePropertyRemovalPolicy = 0x13,
+ DevicePropertyResourceRequirements = 0x14,
+ DevicePropertyAllocatedResources = 0x15,
+ DevicePropertyContainerID = 0x16 | __string_type
+ } DEVICE_REGISTRY_PROPERTY;
- typedef struct _EISA_MEMORY_CONFIGURATION {
- EISA_MEMORY_TYPE ConfigurationByte;
- UCHAR DataSize;
- USHORT AddressLowWord;
- UCHAR AddressHighByte;
- USHORT MemorySize;
- } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
+ typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
+ EventCategoryReserved,
+ EventCategoryHardwareProfileChange,
+ EventCategoryDeviceInterfaceChange,
+ EventCategoryTargetDeviceChange
+ } IO_NOTIFICATION_EVENT_CATEGORY;
- typedef struct _EISA_IRQ_DESCRIPTOR {
- UCHAR Interrupt:4;
- UCHAR Reserved:1;
- UCHAR LevelTriggered:1;
- UCHAR Shared:1;
- UCHAR MoreEntries:1;
- } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
+ typedef enum _IO_PRIORITY_HINT {
+ IoPriorityVeryLow = 0,
+ IoPriorityLow,
+ IoPriorityNormal,
+ IoPriorityHigh,
+ IoPriorityCritical,
+ MaxIoPriorityTypes
+ } IO_PRIORITY_HINT;
- typedef struct _EISA_IRQ_CONFIGURATION {
- EISA_IRQ_DESCRIPTOR ConfigurationByte;
- UCHAR Reserved;
- } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
+ #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
- typedef struct _DMA_CONFIGURATION_BYTE0 {
- UCHAR Channel:3;
- UCHAR Reserved:3;
- UCHAR Shared:1;
- UCHAR MoreEntries:1;
- } DMA_CONFIGURATION_BYTE0;
+ _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE)
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ typedef NTSTATUS
+ (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
+ _In_ PVOID NotificationStructure,
+ _Inout_opt_ PVOID Context);
+ typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE;
- typedef struct _DMA_CONFIGURATION_BYTE1 {
- UCHAR Reserved0:2;
- UCHAR TransferSize:2;
- UCHAR Timing:2;
- UCHAR Reserved1:2;
- } DMA_CONFIGURATION_BYTE1;
+ _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK)
+ _IRQL_requires_same_
+ typedef VOID
+ (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)(
+ _Inout_opt_ PVOID Context);
+ typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK;
- typedef struct _EISA_DMA_CONFIGURATION {
- DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
- DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
- } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
+ typedef enum _FILE_INFORMATION_CLASS {
+ FileDirectoryInformation = 1,
+ FileFullDirectoryInformation,
+ FileBothDirectoryInformation,
+ FileBasicInformation,
+ FileStandardInformation,
+ FileInternalInformation,
+ FileEaInformation,
+ FileAccessInformation,
+ FileNameInformation,
+ FileRenameInformation,
+ FileLinkInformation,
+ FileNamesInformation,
+ FileDispositionInformation,
+ FilePositionInformation,
+ FileFullEaInformation,
+ FileModeInformation,
+ FileAlignmentInformation,
+ FileAllInformation,
+ FileAllocationInformation,
+ FileEndOfFileInformation,
+ FileAlternateNameInformation,
+ FileStreamInformation,
+ FilePipeInformation,
+ FilePipeLocalInformation,
+ FilePipeRemoteInformation,
+ FileMailslotQueryInformation,
+ FileMailslotSetInformation,
+ FileCompressionInformation,
+ FileObjectIdInformation,
+ FileCompletionInformation,
+ FileMoveClusterInformation,
+ FileQuotaInformation,
+ FileReparsePointInformation,
+ FileNetworkOpenInformation,
+ FileAttributeTagInformation,
+ FileTrackingInformation,
+ FileIdBothDirectoryInformation,
+ FileIdFullDirectoryInformation,
+ FileValidDataLengthInformation,
+ FileShortNameInformation,
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
+ FileIoCompletionNotificationInformation,
+ FileIoStatusBlockRangeInformation,
+ FileIoPriorityHintInformation,
+ FileSfioReserveInformation,
+ FileSfioVolumeInformation,
+ FileHardLinkInformation,
+ FileProcessIdsUsingFileInformation,
+ FileNormalizedNameInformation,
+ FileNetworkPhysicalNameInformation,
+ #endif
+ #if (NTDDI_VERSION >= NTDDI_WIN7)
+ FileIdGlobalTxDirectoryInformation,
+ FileIsRemoteDeviceInformation,
+ FileAttributeCacheInformation,
+ FileNumaNodeInformation,
+ FileStandardLinkInformation,
+ FileRemoteProtocolInformation,
+ #endif
+ FileMaximumInformation
+ } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
- typedef struct _EISA_PORT_DESCRIPTOR {
- UCHAR NumberPorts:5;
- UCHAR Reserved:1;
- UCHAR Shared:1;
- UCHAR MoreEntries:1;
- } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
+ typedef struct _FILE_POSITION_INFORMATION {
+ LARGE_INTEGER CurrentByteOffset;
+ } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
- typedef struct _EISA_PORT_CONFIGURATION {
- EISA_PORT_DESCRIPTOR Configuration;
- USHORT PortAddress;
- } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
+ typedef struct _FILE_BASIC_INFORMATION {
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ ULONG FileAttributes;
+ } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
- typedef struct _CM_EISA_SLOT_INFORMATION {
- UCHAR ReturnCode;
- UCHAR ReturnFlags;
- UCHAR MajorRevision;
- UCHAR MinorRevision;
- USHORT Checksum;
- UCHAR NumberFunctions;
- UCHAR FunctionInformation;
- ULONG CompressedId;
- } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
+ typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION {
+ IO_PRIORITY_HINT PriorityHint;
+ } FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION;
- typedef struct _CM_EISA_FUNCTION_INFORMATION {
- ULONG CompressedId;
- UCHAR IdSlotFlags1;
- UCHAR IdSlotFlags2;
- UCHAR MinorRevision;
- UCHAR MajorRevision;
- UCHAR Selections[26];
- UCHAR FunctionFlags;
- UCHAR TypeString[80];
- EISA_MEMORY_CONFIGURATION EisaMemory[9];
- EISA_IRQ_CONFIGURATION EisaIrq[7];
- EISA_DMA_CONFIGURATION EisaDma[4];
- EISA_PORT_CONFIGURATION EisaPort[20];
- UCHAR InitializationData[60];
- } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
+ typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {
+ ULONG Flags;
+ } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
- #include <poppack.h>
+ typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION {
+ PUCHAR IoStatusBlockRange;
+ ULONG Length;
+ } FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION;
- /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
+ typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION {
+ BOOLEAN IsRemote;
+ } FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION;
- #define EISA_FUNCTION_ENABLED 0x80
- #define EISA_FREE_FORM_DATA 0x40
- #define EISA_HAS_PORT_INIT_ENTRY 0x20
- #define EISA_HAS_PORT_RANGE 0x10
- #define EISA_HAS_DMA_ENTRY 0x08
- #define EISA_HAS_IRQ_ENTRY 0x04
- #define EISA_HAS_MEMORY_ENTRY 0x02
- #define EISA_HAS_TYPE_ENTRY 0x01
- #define EISA_HAS_INFORMATION \
- (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
- + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
+ typedef struct _FILE_NUMA_NODE_INFORMATION {
+ USHORT NodeNumber;
+ } FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION;
- #define EISA_MORE_ENTRIES 0x80
- #define EISA_SYSTEM_MEMORY 0x00
- #define EISA_MEMORY_TYPE_RAM 0x01
+ typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION {
+ ULONG NumberOfProcessIdsInList;
+ ULONG_PTR ProcessIdList[1];
+ } FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION;
- /* CM_EISA_SLOT_INFORMATION.ReturnCode */
+ typedef struct _FILE_STANDARD_INFORMATION {
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER EndOfFile;
+ ULONG NumberOfLinks;
+ BOOLEAN DeletePending;
+ BOOLEAN Directory;
+ } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
- #define EISA_INVALID_SLOT 0x80
- #define EISA_INVALID_FUNCTION 0x81
- #define EISA_INVALID_CONFIGURATION 0x82
- #define EISA_EMPTY_SLOT 0x83
- #define EISA_INVALID_BIOS_CALL 0x86
+ typedef struct _FILE_NETWORK_OPEN_INFORMATION {
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER EndOfFile;
+ ULONG FileAttributes;
+ } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
- /*
- ** Plug and Play structures
- */
+ typedef enum _FSINFOCLASS {
+ FileFsVolumeInformation = 1,
+ FileFsLabelInformation,
+ FileFsSizeInformation,
+ FileFsDeviceInformation,
+ FileFsAttributeInformation,
+ FileFsControlInformation,
+ FileFsFullSizeInformation,
+ FileFsObjectIdInformation,
+ FileFsDriverPathInformation,
+ FileFsVolumeFlagsInformation,
+ FileFsMaximumInformation
+ } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
- typedef VOID
- (NTAPI *PINTERFACE_REFERENCE)(
- PVOID Context);
+ typedef struct _FILE_FS_DEVICE_INFORMATION {
+ DEVICE_TYPE DeviceType;
+ ULONG Characteristics;
+ } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
- typedef VOID
- (NTAPI *PINTERFACE_DEREFERENCE)(
- PVOID Context);
+ typedef struct _FILE_FULL_EA_INFORMATION {
+ ULONG NextEntryOffset;
+ UCHAR Flags;
+ UCHAR EaNameLength;
+ USHORT EaValueLength;
+ CHAR EaName[1];
+ } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
- _Function_class_(TRANSLATE_BUS_ADDRESS)
+ typedef struct _FILE_SFIO_RESERVE_INFORMATION {
+ ULONG RequestsPerPeriod;
+ ULONG Period;
+ BOOLEAN RetryFailures;
+ BOOLEAN Discardable;
+ ULONG RequestSize;
+ ULONG NumOutstandingRequests;
+ } FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION;
+
+ typedef struct _FILE_SFIO_VOLUME_INFORMATION {
+ ULONG MaximumRequestsPerPeriod;
+ ULONG MinimumPeriod;
+ ULONG MinimumTransferSize;
+ } FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION;
+
+ #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
+ #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
+ #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
+
+ #define FM_LOCK_BIT (0x1)
+ #define FM_LOCK_BIT_V (0x0)
+ #define FM_LOCK_WAITER_WOKEN (0x2)
+ #define FM_LOCK_WAITER_INC (0x4)
+
+ _Function_class_(FAST_IO_CHECK_IF_POSSIBLE)
_IRQL_requires_same_
typedef BOOLEAN
- (NTAPI TRANSLATE_BUS_ADDRESS)(
- _Inout_opt_ PVOID Context,
- _In_ PHYSICAL_ADDRESS BusAddress,
+ (NTAPI FAST_IO_CHECK_IF_POSSIBLE)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
_In_ ULONG Length,
- _Out_ PULONG AddressSpace,
- _Out_ PPHYSICAL_ADDRESS TranslatedAddress);
- typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS;
+ _In_ BOOLEAN Wait,
+ _In_ ULONG LockKey,
+ _In_ BOOLEAN CheckForReadOperation,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE;
- _Function_class_(GET_DMA_ADAPTER)
+ _Function_class_(FAST_IO_READ)
_IRQL_requires_same_
- typedef struct _DMA_ADAPTER*
- (NTAPI GET_DMA_ADAPTER)(
- _Inout_opt_ PVOID Context,
- _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor,
- _Out_ PULONG NumberOfMapRegisters);
- typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER;
+ typedef BOOLEAN
+ (NTAPI FAST_IO_READ)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ BOOLEAN Wait,
+ _In_ ULONG LockKey,
+ _Out_ PVOID Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_READ *PFAST_IO_READ;
- _Function_class_(GET_SET_DEVICE_DATA)
+ _Function_class_(FAST_IO_WRITE)
_IRQL_requires_same_
- typedef ULONG
- (NTAPI GET_SET_DEVICE_DATA)(
- _Inout_opt_ PVOID Context,
- _In_ ULONG DataType,
- _Inout_updates_bytes_(Length) PVOID Buffer,
- _In_ ULONG Offset,
- _In_ ULONG Length);
- typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA;
-
- typedef enum _DEVICE_INSTALL_STATE {
- InstallStateInstalled,
- InstallStateNeedsReinstall,
- InstallStateFailedInstall,
- InstallStateFinishInstall
- } DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE;
+ typedef BOOLEAN
+ (NTAPI FAST_IO_WRITE)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ BOOLEAN Wait,
+ _In_ ULONG LockKey,
+ _In_ PVOID Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_WRITE *PFAST_IO_WRITE;
- typedef struct _LEGACY_BUS_INFORMATION {
- GUID BusTypeGuid;
- INTERFACE_TYPE LegacyBusType;
- ULONG BusNumber;
- } LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION;
+ _Function_class_(FAST_IO_QUERY_BASIC_INFO)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_QUERY_BASIC_INFO)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ BOOLEAN Wait,
+ _Out_ PFILE_BASIC_INFORMATION Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO;
- typedef enum _DEVICE_REMOVAL_POLICY {
- RemovalPolicyExpectNoRemoval = 1,
- RemovalPolicyExpectOrderlyRemoval = 2,
- RemovalPolicyExpectSurpriseRemoval = 3
- } DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY;
+ _Function_class_(FAST_IO_QUERY_STANDARD_INFO)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_QUERY_STANDARD_INFO)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ BOOLEAN Wait,
+ _Out_ PFILE_STANDARD_INFORMATION Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO;
- typedef VOID
- (NTAPI *PREENUMERATE_SELF)(
- _In_ PVOID Context);
+ _Function_class_(FAST_IO_LOCK)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_LOCK)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ PLARGE_INTEGER Length,
+ _In_ PEPROCESS ProcessId,
+ _In_ ULONG Key,
+ _In_ BOOLEAN FailImmediately,
+ _In_ BOOLEAN ExclusiveLock,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_LOCK *PFAST_IO_LOCK;
- typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf;
- } REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD;
+ _Function_class_(FAST_IO_UNLOCK_SINGLE)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_UNLOCK_SINGLE)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ PLARGE_INTEGER Length,
+ _In_ PEPROCESS ProcessId,
+ _In_ ULONG Key,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE;
- typedef VOID
- (NTAPI *PIO_DEVICE_EJECT_CALLBACK)(
- _In_ NTSTATUS Status,
- _Inout_opt_ PVOID Context);
+ _Function_class_(FAST_IO_UNLOCK_ALL)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_UNLOCK_ALL)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PEPROCESS ProcessId,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL;
- #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
+ _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PVOID ProcessId,
+ _In_ ULONG Key,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY;
- /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
- #define PCI_USE_SUBSYSTEM_IDS 0x00000001
- #define PCI_USE_REVISION 0x00000002
- #define PCI_USE_VENDEV_IDS 0x00000004
- #define PCI_USE_CLASS_SUBCLASS 0x00000008
- #define PCI_USE_PROGIF 0x00000010
- #define PCI_USE_LOCAL_BUS 0x00000020
- #define PCI_USE_LOCAL_DEVICE 0x00000040
-
- typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS {
- ULONG Size;
- ULONG Flags;
- USHORT VendorID;
- USHORT DeviceID;
- UCHAR RevisionID;
- USHORT SubVendorID;
- USHORT SubSystemID;
- UCHAR BaseClass;
- UCHAR SubClass;
- UCHAR ProgIf;
- } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS;
-
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
+ _Function_class_(FAST_IO_DEVICE_CONTROL)
+ _IRQL_requires_same_
typedef BOOLEAN
- (NTAPI PCI_IS_DEVICE_PRESENT)(
- _In_ USHORT VendorID,
- _In_ USHORT DeviceID,
- _In_ UCHAR RevisionID,
- _In_ USHORT SubVendorID,
- _In_ USHORT SubSystemID,
- _In_ ULONG Flags);
- typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT;
+ (NTAPI FAST_IO_DEVICE_CONTROL)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ BOOLEAN Wait,
+ _In_opt_ PVOID InputBuffer,
+ _In_ ULONG InputBufferLength,
+ _Out_opt_ PVOID OutputBuffer,
+ _In_ ULONG OutputBufferLength,
+ _In_ ULONG IoControlCode,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL;
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
- typedef BOOLEAN
- (NTAPI PCI_IS_DEVICE_PRESENT_EX)(
- _In_ PVOID Context,
- _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters);
- typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX;
+ _Function_class_(FAST_IO_ACQUIRE_FILE)
+ _IRQL_requires_same_
+ typedef VOID
+ (NTAPI FAST_IO_ACQUIRE_FILE)(
+ _In_ struct _FILE_OBJECT *FileObject);
+ typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE;
- typedef struct _BUS_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
- PGET_DMA_ADAPTER GetDmaAdapter;
- PGET_SET_DEVICE_DATA SetBusData;
- PGET_SET_DEVICE_DATA GetBusData;
- } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD;
+ _Function_class_(FAST_IO_RELEASE_FILE)
+ _IRQL_requires_same_
+ typedef VOID
+ (NTAPI FAST_IO_RELEASE_FILE)(
+ _In_ struct _FILE_OBJECT *FileObject);
+ typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE;
- typedef struct _PCI_DEVICE_PRESENT_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_IS_DEVICE_PRESENT IsDevicePresent;
- PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx;
- } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE;
+ _Function_class_(FAST_IO_DETACH_DEVICE)
+ _IRQL_requires_same_
+ typedef VOID
+ (NTAPI FAST_IO_DETACH_DEVICE)(
+ _In_ struct _DEVICE_OBJECT *SourceDevice,
+ _In_ struct _DEVICE_OBJECT *TargetDevice);
+ typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE;
- _Struct_size_bytes_(Size)
- typedef struct _DEVICE_CAPABILITIES {
- _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES)) USHORT Size;
- USHORT Version;
- ULONG DeviceD1:1;
- ULONG DeviceD2:1;
- ULONG LockSupported:1;
- ULONG EjectSupported:1;
- ULONG Removable:1;
- ULONG DockDevice:1;
- ULONG UniqueID:1;
- ULONG SilentInstall:1;
- ULONG RawDeviceOK:1;
- ULONG SurpriseRemovalOK:1;
- ULONG WakeFromD0:1;
- ULONG WakeFromD1:1;
- ULONG WakeFromD2:1;
- ULONG WakeFromD3:1;
- ULONG HardwareDisabled:1;
- ULONG NonDynamic:1;
- ULONG WarmEjectSupported:1;
- ULONG NoDisplayInUI:1;
- ULONG Reserved:14;
- ULONG Address;
- ULONG UINumber;
- DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
- SYSTEM_POWER_STATE SystemWake;
- DEVICE_POWER_STATE DeviceWake;
- ULONG D1Latency;
- ULONG D2Latency;
- ULONG D3Latency;
- } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
+ _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ BOOLEAN Wait,
+ _Out_ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
+ _Out_ struct _IO_STATUS_BLOCK *IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO;
- typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
- USHORT Version;
- USHORT Size;
- GUID Event;
- GUID InterfaceClassGuid;
- PUNICODE_STRING SymbolicLinkName;
- } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
+ _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE)
+ _IRQL_requires_same_
+ typedef NTSTATUS
+ (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER EndingOffset,
+ _Out_ struct _ERESOURCE **ResourceToRelease,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE;
- typedef struct _HWPROFILE_CHANGE_NOTIFICATION {
- USHORT Version;
- USHORT Size;
- GUID Event;
- } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION;
+ _Function_class_(FAST_IO_MDL_READ)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_MDL_READ)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ ULONG LockKey,
+ _Out_ PMDL *MdlChain,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ;
- #undef INTERFACE
+ _Function_class_(FAST_IO_MDL_READ_COMPLETE)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_MDL_READ_COMPLETE)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PMDL MdlChain,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE;
- typedef struct _INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- } INTERFACE, *PINTERFACE;
+ _Function_class_(FAST_IO_PREPARE_MDL_WRITE)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_PREPARE_MDL_WRITE)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ ULONG LockKey,
+ _Out_ PMDL *MdlChain,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE;
- typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
- USHORT Version;
- USHORT Size;
- GUID Event;
- } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
+ _Function_class_(FAST_IO_MDL_WRITE_COMPLETE)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_MDL_WRITE_COMPLETE)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ PMDL MdlChain,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE;
- typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
+ _Function_class_(FAST_IO_READ_COMPRESSED)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_READ_COMPRESSED)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ ULONG LockKey,
+ _Out_ PVOID Buffer,
+ _Out_ PMDL *MdlChain,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _Out_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
+ _In_ ULONG CompressedDataInfoLength,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED;
- /* PNP_DEVICE_STATE */
+ _Function_class_(FAST_IO_WRITE_COMPRESSED)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_WRITE_COMPRESSED)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ ULONG LockKey,
+ _In_ PVOID Buffer,
+ _Out_ PMDL *MdlChain,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
+ _In_ ULONG CompressedDataInfoLength,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED;
- #define PNP_DEVICE_DISABLED 0x00000001
- #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
- #define PNP_DEVICE_FAILED 0x00000004
- #define PNP_DEVICE_REMOVED 0x00000008
- #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
- #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
+ _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PMDL MdlChain,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED;
- typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION {
- USHORT Version;
- USHORT Size;
- GUID Event;
- struct _FILE_OBJECT *FileObject;
- LONG NameBufferOffset;
- UCHAR CustomDataBuffer[1];
- } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
-
- typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
- USHORT Version;
- USHORT Size;
- GUID Event;
- struct _FILE_OBJECT *FileObject;
- } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
+ _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ PMDL MdlChain,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED;
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- #include <devpropdef.h>
- #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
- #endif
+ _Function_class_(FAST_IO_QUERY_OPEN)
+ _IRQL_requires_same_
+ typedef BOOLEAN
+ (NTAPI FAST_IO_QUERY_OPEN)(
+ _Inout_ struct _IRP *Irp,
+ _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN;
- #define PNP_REPLACE_NO_MAP MAXLONGLONG
+ _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE)
+ _IRQL_requires_same_
+ typedef NTSTATUS
+ (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ struct _ERESOURCE *ResourceToRelease,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE;
- _Must_inspect_result_
+ _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH)
+ _IRQL_requires_same_
typedef NTSTATUS
- (NTAPI *PREPLACE_MAP_MEMORY)(
- _In_ PHYSICAL_ADDRESS TargetPhysicalAddress,
- _In_ PHYSICAL_ADDRESS SparePhysicalAddress,
- _Inout_ PLARGE_INTEGER NumberOfBytes,
- _Outptr_ PVOID *TargetAddress,
- _Outptr_ PVOID *SpareAddress);
+ (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH;
- typedef struct _PNP_REPLACE_MEMORY_LIST {
- ULONG AllocatedCount;
- ULONG Count;
- ULONGLONG TotalLength;
- struct {
- PHYSICAL_ADDRESS Address;
- ULONGLONG Length;
- } Ranges[ANYSIZE_ARRAY];
- } PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST;
+ _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH)
+ _IRQL_requires_same_
+ typedef NTSTATUS
+ (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)(
+ _In_ struct _FILE_OBJECT *FileObject,
+ _In_ struct _DEVICE_OBJECT *DeviceObject);
+ typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH;
- typedef struct _PNP_REPLACE_PROCESSOR_LIST {
- PKAFFINITY Affinity;
- _Field_range_(<=, MAXIMUM_GROUPS) ULONG GroupCount;
- ULONG AllocatedCount;
- ULONG Count;
- ULONG ApicIds[ANYSIZE_ARRAY];
- } PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST;
+ typedef struct _FAST_IO_DISPATCH {
+ ULONG SizeOfFastIoDispatch;
+ PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible;
+ PFAST_IO_READ FastIoRead;
+ PFAST_IO_WRITE FastIoWrite;
+ PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo;
+ PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo;
+ PFAST_IO_LOCK FastIoLock;
+ PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle;
+ PFAST_IO_UNLOCK_ALL FastIoUnlockAll;
+ PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey;
+ PFAST_IO_DEVICE_CONTROL FastIoDeviceControl;
+ PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection;
+ PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection;
+ PFAST_IO_DETACH_DEVICE FastIoDetachDevice;
+ PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo;
+ PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite;
+ PFAST_IO_MDL_READ MdlRead;
+ PFAST_IO_MDL_READ_COMPLETE MdlReadComplete;
+ PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite;
+ PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete;
+ PFAST_IO_READ_COMPRESSED FastIoReadCompressed;
+ PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed;
+ PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed;
+ PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed;
+ PFAST_IO_QUERY_OPEN FastIoQueryOpen;
+ PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite;
+ PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush;
+ PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush;
+ } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
- typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 {
- KAFFINITY AffinityMask;
- ULONG AllocatedCount;
- ULONG Count;
- ULONG ApicIds[ANYSIZE_ARRAY];
- } PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1;
+ typedef struct _SECTION_OBJECT_POINTERS {
+ PVOID DataSectionObject;
+ PVOID SharedCacheMap;
+ PVOID ImageSectionObject;
+ } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
- #define PNP_REPLACE_PARAMETERS_VERSION 2
+ typedef struct _IO_COMPLETION_CONTEXT {
+ PVOID Port;
+ PVOID Key;
+ } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
- typedef struct _PNP_REPLACE_PARAMETERS {
- ULONG Size;
- ULONG Version;
- ULONG64 Target;
- ULONG64 Spare;
- PPNP_REPLACE_PROCESSOR_LIST TargetProcessors;
- PPNP_REPLACE_PROCESSOR_LIST SpareProcessors;
- PPNP_REPLACE_MEMORY_LIST TargetMemory;
- PPNP_REPLACE_MEMORY_LIST SpareMemory;
- PREPLACE_MAP_MEMORY MapMemory;
- } PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS;
+ /* FILE_OBJECT.Flags */
+ #define FO_FILE_OPEN 0x00000001
+ #define FO_SYNCHRONOUS_IO 0x00000002
+ #define FO_ALERTABLE_IO 0x00000004
+ #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
+ #define FO_WRITE_THROUGH 0x00000010
+ #define FO_SEQUENTIAL_ONLY 0x00000020
+ #define FO_CACHE_SUPPORTED 0x00000040
+ #define FO_NAMED_PIPE 0x00000080
+ #define FO_STREAM_FILE 0x00000100
+ #define FO_MAILSLOT 0x00000200
+ #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
+ #define FO_QUEUE_IRP_TO_THREAD 0x00000400
+ #define FO_DIRECT_DEVICE_OPEN 0x00000800
+ #define FO_FILE_MODIFIED 0x00001000
+ #define FO_FILE_SIZE_CHANGED 0x00002000
+ #define FO_CLEANUP_COMPLETE 0x00004000
+ #define FO_TEMPORARY_FILE 0x00008000
+ #define FO_DELETE_ON_CLOSE 0x00010000
+ #define FO_OPENED_CASE_SENSITIVE 0x00020000
+ #define FO_HANDLE_CREATED 0x00040000
+ #define FO_FILE_FAST_IO_READ 0x00080000
+ #define FO_RANDOM_ACCESS 0x00100000
+ #define FO_FILE_OPEN_CANCELLED 0x00200000
+ #define FO_VOLUME_OPEN 0x00400000
+ #define FO_REMOTE_ORIGIN 0x01000000
+ #define FO_DISALLOW_EXCLUSIVE 0x02000000
+ #define FO_SKIP_COMPLETION_PORT 0x02000000
+ #define FO_SKIP_SET_EVENT 0x04000000
+ #define FO_SKIP_SET_FAST_IO 0x08000000
+ #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
- typedef VOID
- (NTAPI *PREPLACE_UNLOAD)(
- VOID);
+ /* VPB.Flags */
+ #define VPB_MOUNTED 0x0001
+ #define VPB_LOCKED 0x0002
+ #define VPB_PERSISTENT 0x0004
+ #define VPB_REMOVE_PENDING 0x0008
+ #define VPB_RAW_MOUNT 0x0010
+ #define VPB_DIRECT_WRITES_ALLOWED 0x0020
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_BEGIN)(
- _In_ PPNP_REPLACE_PARAMETERS Parameters,
- _Outptr_ PVOID *Context);
+ /* IRP.Flags */
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_END)(
- _In_ PVOID Context);
+ #define SL_FORCE_ACCESS_CHECK 0x01
+ #define SL_OPEN_PAGING_FILE 0x02
+ #define SL_OPEN_TARGET_DIRECTORY 0x04
+ #define SL_STOP_ON_SYMLINK 0x08
+ #define SL_CASE_SENSITIVE 0x80
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)(
- _In_ PVOID Context,
- _In_ PHYSICAL_ADDRESS PhysicalAddress,
- _In_ LARGE_INTEGER ByteCount);
+ #define SL_KEY_SPECIFIED 0x01
+ #define SL_OVERRIDE_VERIFY_VOLUME 0x02
+ #define SL_WRITE_THROUGH 0x04
+ #define SL_FT_SEQUENTIAL_WRITE 0x08
+ #define SL_FORCE_DIRECT_WRITE 0x10
+ #define SL_REALTIME_STREAM 0x20
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_SET_PROCESSOR_ID)(
- _In_ PVOID Context,
- _In_ ULONG ApicId,
- _In_ BOOLEAN Target);
+ #define SL_READ_ACCESS_GRANTED 0x01
+ #define SL_WRITE_ACCESS_GRANTED 0x04
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_SWAP)(
- _In_ PVOID Context);
+ #define SL_FAIL_IMMEDIATELY 0x01
+ #define SL_EXCLUSIVE_LOCK 0x02
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)(
- _In_ PVOID Context);
+ #define SL_RESTART_SCAN 0x01
+ #define SL_RETURN_SINGLE_ENTRY 0x02
+ #define SL_INDEX_SPECIFIED 0x04
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)(
- _In_ PVOID Context);
+ #define SL_WATCH_TREE 0x01
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_GET_MEMORY_DESTINATION)(
- _In_ PVOID Context,
- _In_ PHYSICAL_ADDRESS SourceAddress,
- _Out_ PPHYSICAL_ADDRESS DestinationAddress);
+ #define SL_ALLOW_RAW_MOUNT 0x01
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)(
- _In_ PVOID Context,
- _In_ BOOLEAN Enable);
+ #define CTL_CODE(DeviceType, Function, Method, Access) \
+ (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
- #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
- #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
- FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
+ #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
- #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
- #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
- #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
- #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
- #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
+ #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
- typedef struct _PNP_REPLACE_DRIVER_INTERFACE {
- ULONG Size;
- ULONG Version;
- ULONG Flags;
- PREPLACE_UNLOAD Unload;
- PREPLACE_BEGIN BeginReplace;
- PREPLACE_END EndReplace;
- PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory;
- PREPLACE_SET_PROCESSOR_ID SetProcessorId;
- PREPLACE_SWAP Swap;
- PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror;
- PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory;
- PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination;
- PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce;
- } PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE;
+ #define IRP_NOCACHE 0x00000001
+ #define IRP_PAGING_IO 0x00000002
+ #define IRP_MOUNT_COMPLETION 0x00000002
+ #define IRP_SYNCHRONOUS_API 0x00000004
+ #define IRP_ASSOCIATED_IRP 0x00000008
+ #define IRP_BUFFERED_IO 0x00000010
+ #define IRP_DEALLOCATE_BUFFER 0x00000020
+ #define IRP_INPUT_OPERATION 0x00000040
+ #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
+ #define IRP_CREATE_OPERATION 0x00000080
+ #define IRP_READ_OPERATION 0x00000100
+ #define IRP_WRITE_OPERATION 0x00000200
+ #define IRP_CLOSE_OPERATION 0x00000400
+ #define IRP_DEFER_IO_COMPLETION 0x00000800
+ #define IRP_OB_QUERY_NAME 0x00001000
+ #define IRP_HOLD_DEVICE_QUEUE 0x00002000
+ /* The following 2 are missing in latest WDK */
+ #define IRP_RETRY_IO_COMPLETION 0x00004000
+ #define IRP_CLASS_CACHE_OPERATION 0x00008000
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREPLACE_DRIVER_INIT)(
- _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface,
- _In_ PVOID Unused);
+ #define IRP_QUOTA_CHARGED 0x01
+ #define IRP_ALLOCATED_MUST_SUCCEED 0x02
+ #define IRP_ALLOCATED_FIXED_SIZE 0x04
+ #define IRP_LOOKASIDE_ALLOCATION 0x08
- typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
- DeviceUsageTypeUndefined,
- DeviceUsageTypePaging,
- DeviceUsageTypeHibernation,
- DeviceUsageTypeDumpFile
- } DEVICE_USAGE_NOTIFICATION_TYPE;
+ /*
+ ** IRP function codes
+ */
- typedef struct _POWER_SEQUENCE {
- ULONG SequenceD1;
- ULONG SequenceD2;
- ULONG SequenceD3;
- } POWER_SEQUENCE, *PPOWER_SEQUENCE;
+ #define IRP_MJ_CREATE 0x00
+ #define IRP_MJ_CREATE_NAMED_PIPE 0x01
+ #define IRP_MJ_CLOSE 0x02
+ #define IRP_MJ_READ 0x03
+ #define IRP_MJ_WRITE 0x04
+ #define IRP_MJ_QUERY_INFORMATION 0x05
+ #define IRP_MJ_SET_INFORMATION 0x06
+ #define IRP_MJ_QUERY_EA 0x07
+ #define IRP_MJ_SET_EA 0x08
+ #define IRP_MJ_FLUSH_BUFFERS 0x09
+ #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
+ #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
+ #define IRP_MJ_DIRECTORY_CONTROL 0x0c
+ #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
+ #define IRP_MJ_DEVICE_CONTROL 0x0e
+ #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
+ #define IRP_MJ_SCSI 0x0f
+ #define IRP_MJ_SHUTDOWN 0x10
+ #define IRP_MJ_LOCK_CONTROL 0x11
+ #define IRP_MJ_CLEANUP 0x12
+ #define IRP_MJ_CREATE_MAILSLOT 0x13
+ #define IRP_MJ_QUERY_SECURITY 0x14
+ #define IRP_MJ_SET_SECURITY 0x15
+ #define IRP_MJ_POWER 0x16
+ #define IRP_MJ_SYSTEM_CONTROL 0x17
+ #define IRP_MJ_DEVICE_CHANGE 0x18
+ #define IRP_MJ_QUERY_QUOTA 0x19
+ #define IRP_MJ_SET_QUOTA 0x1a
+ #define IRP_MJ_PNP 0x1b
+ #define IRP_MJ_PNP_POWER 0x1b
+ #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
- #ifdef _PREFAST_
- #define __string_type 0x1000
- #define __guid_type 0x2000
- #define __multiString_type 0x4000
- #else
- #define __string_type 0
- #define __guid_type 0
- #define __multiString_type 0
+ #define IRP_MN_SCSI_CLASS 0x01
+
+ #define IRP_MN_START_DEVICE 0x00
+ #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
+ #define IRP_MN_REMOVE_DEVICE 0x02
+ #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
+ #define IRP_MN_STOP_DEVICE 0x04
+ #define IRP_MN_QUERY_STOP_DEVICE 0x05
+ #define IRP_MN_CANCEL_STOP_DEVICE 0x06
+
+ #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
+ #define IRP_MN_QUERY_INTERFACE 0x08
+ #define IRP_MN_QUERY_CAPABILITIES 0x09
+ #define IRP_MN_QUERY_RESOURCES 0x0A
+ #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
+ #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
+ #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
+
+ #define IRP_MN_READ_CONFIG 0x0F
+ #define IRP_MN_WRITE_CONFIG 0x10
+ #define IRP_MN_EJECT 0x11
+ #define IRP_MN_SET_LOCK 0x12
+ #define IRP_MN_QUERY_ID 0x13
+ #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
+ #define IRP_MN_QUERY_BUS_INFORMATION 0x15
+ #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
+ #define IRP_MN_SURPRISE_REMOVAL 0x17
+ #if (NTDDI_VERSION >= NTDDI_WIN7)
+ #define IRP_MN_DEVICE_ENUMERATED 0x19
#endif
- typedef enum {
- DevicePropertyDeviceDescription = 0x0 | __string_type,
- DevicePropertyHardwareID = 0x1 | __multiString_type,
- DevicePropertyCompatibleIDs = 0x2 | __multiString_type,
- DevicePropertyBootConfiguration = 0x3,
- DevicePropertyBootConfigurationTranslated = 0x4,
- DevicePropertyClassName = 0x5 | __string_type,
- DevicePropertyClassGuid = 0x6 | __string_type,
- DevicePropertyDriverKeyName = 0x7 | __string_type,
- DevicePropertyManufacturer = 0x8 | __string_type,
- DevicePropertyFriendlyName = 0x9 | __string_type,
- DevicePropertyLocationInformation = 0xa | __string_type,
- DevicePropertyPhysicalDeviceObjectName = 0xb | __string_type,
- DevicePropertyBusTypeGuid = 0xc | __guid_type,
- DevicePropertyLegacyBusType = 0xd,
- DevicePropertyBusNumber = 0xe,
- DevicePropertyEnumeratorName = 0xf | __string_type,
- DevicePropertyAddress = 0x10,
- DevicePropertyUINumber = 0x11,
- DevicePropertyInstallState = 0x12,
- DevicePropertyRemovalPolicy = 0x13,
- DevicePropertyResourceRequirements = 0x14,
- DevicePropertyAllocatedResources = 0x15,
- DevicePropertyContainerID = 0x16 | __string_type
- } DEVICE_REGISTRY_PROPERTY;
+ #define IRP_MN_WAIT_WAKE 0x00
+ #define IRP_MN_POWER_SEQUENCE 0x01
+ #define IRP_MN_SET_POWER 0x02
+ #define IRP_MN_QUERY_POWER 0x03
- typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
- EventCategoryReserved,
- EventCategoryHardwareProfileChange,
- EventCategoryDeviceInterfaceChange,
- EventCategoryTargetDeviceChange
- } IO_NOTIFICATION_EVENT_CATEGORY;
+ #define IRP_MN_QUERY_ALL_DATA 0x00
+ #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
+ #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
+ #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
+ #define IRP_MN_ENABLE_EVENTS 0x04
+ #define IRP_MN_DISABLE_EVENTS 0x05
+ #define IRP_MN_ENABLE_COLLECTION 0x06
+ #define IRP_MN_DISABLE_COLLECTION 0x07
+ #define IRP_MN_REGINFO 0x08
+ #define IRP_MN_EXECUTE_METHOD 0x09
- typedef enum _IO_PRIORITY_HINT {
- IoPriorityVeryLow = 0,
- IoPriorityLow,
- IoPriorityNormal,
- IoPriorityHigh,
- IoPriorityCritical,
- MaxIoPriorityTypes
- } IO_PRIORITY_HINT;
+ #define IRP_MN_REGINFO_EX 0x0b
- #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
+ typedef struct _FILE_OBJECT {
+ CSHORT Type;
+ CSHORT Size;
+ PDEVICE_OBJECT DeviceObject;
+ PVPB Vpb;
+ PVOID FsContext;
+ PVOID FsContext2;
+ PSECTION_OBJECT_POINTERS SectionObjectPointer;
+ PVOID PrivateCacheMap;
+ NTSTATUS FinalStatus;
+ struct _FILE_OBJECT *RelatedFileObject;
+ BOOLEAN LockOperation;
+ BOOLEAN DeletePending;
+ BOOLEAN ReadAccess;
+ BOOLEAN WriteAccess;
+ BOOLEAN DeleteAccess;
+ BOOLEAN SharedRead;
+ BOOLEAN SharedWrite;
+ BOOLEAN SharedDelete;
+ ULONG Flags;
+ UNICODE_STRING FileName;
+ LARGE_INTEGER CurrentByteOffset;
+ volatile ULONG Waiters;
+ volatile ULONG Busy;
+ PVOID LastLock;
+ KEVENT Lock;
+ KEVENT Event;
+ volatile PIO_COMPLETION_CONTEXT CompletionContext;
+ KSPIN_LOCK IrpListLock;
+ LIST_ENTRY IrpList;
+ volatile PVOID FileObjectExtension;
+ } FILE_OBJECT, *PFILE_OBJECT;
- _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE)
- _IRQL_requires_max_(PASSIVE_LEVEL)
- typedef NTSTATUS
- (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
- _In_ PVOID NotificationStructure,
- _Inout_opt_ PVOID Context);
- typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE;
+ typedef struct _IO_ERROR_LOG_PACKET {
+ UCHAR MajorFunctionCode;
+ UCHAR RetryCount;
+ USHORT DumpDataSize;
+ USHORT NumberOfStrings;
+ USHORT StringOffset;
+ USHORT EventCategory;
+ NTSTATUS ErrorCode;
+ ULONG UniqueErrorValue;
+ NTSTATUS FinalStatus;
+ ULONG SequenceNumber;
+ ULONG IoControlCode;
+ LARGE_INTEGER DeviceOffset;
+ ULONG DumpData[1];
+ } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
- _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)(
- _Inout_opt_ PVOID Context);
- typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK;
+ typedef struct _IO_ERROR_LOG_MESSAGE {
+ USHORT Type;
+ USHORT Size;
+ USHORT DriverNameLength;
+ LARGE_INTEGER TimeStamp;
+ ULONG DriverNameOffset;
+ IO_ERROR_LOG_PACKET EntryData;
+ } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
- typedef enum _FILE_INFORMATION_CLASS {
- FileDirectoryInformation = 1,
- FileFullDirectoryInformation,
- FileBothDirectoryInformation,
- FileBasicInformation,
- FileStandardInformation,
- FileInternalInformation,
- FileEaInformation,
- FileAccessInformation,
- FileNameInformation,
- FileRenameInformation,
- FileLinkInformation,
- FileNamesInformation,
- FileDispositionInformation,
- FilePositionInformation,
- FileFullEaInformation,
- FileModeInformation,
- FileAlignmentInformation,
- FileAllInformation,
- FileAllocationInformation,
- FileEndOfFileInformation,
- FileAlternateNameInformation,
- FileStreamInformation,
- FilePipeInformation,
- FilePipeLocalInformation,
- FilePipeRemoteInformation,
- FileMailslotQueryInformation,
- FileMailslotSetInformation,
- FileCompressionInformation,
- FileObjectIdInformation,
- FileCompletionInformation,
- FileMoveClusterInformation,
- FileQuotaInformation,
- FileReparsePointInformation,
- FileNetworkOpenInformation,
- FileAttributeTagInformation,
- FileTrackingInformation,
- FileIdBothDirectoryInformation,
- FileIdFullDirectoryInformation,
- FileValidDataLengthInformation,
- FileShortNameInformation,
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- FileIoCompletionNotificationInformation,
- FileIoStatusBlockRangeInformation,
- FileIoPriorityHintInformation,
- FileSfioReserveInformation,
- FileSfioVolumeInformation,
- FileHardLinkInformation,
- FileProcessIdsUsingFileInformation,
- FileNormalizedNameInformation,
- FileNetworkPhysicalNameInformation,
- #endif
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- FileIdGlobalTxDirectoryInformation,
- FileIsRemoteDeviceInformation,
- FileAttributeCacheInformation,
- FileNumaNodeInformation,
- FileStandardLinkInformation,
- FileRemoteProtocolInformation,
- #endif
- FileMaximumInformation
- } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
-
- typedef struct _FILE_POSITION_INFORMATION {
- LARGE_INTEGER CurrentByteOffset;
- } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
+ #define ERROR_LOG_LIMIT_SIZE 240
+ #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
+ sizeof(IO_ERROR_LOG_PACKET) + \
+ (sizeof(WCHAR) * 40))
+ #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
+ (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
+ #define IO_ERROR_LOG_MESSAGE_LENGTH \
+ ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
+ ERROR_LOG_MESSAGE_LIMIT_SIZE : \
+ PORT_MAXIMUM_MESSAGE_LENGTH)
+ #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
+ IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
- typedef struct _FILE_BASIC_INFORMATION {
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- ULONG FileAttributes;
- } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
+ #ifdef _WIN64
+ #define PORT_MAXIMUM_MESSAGE_LENGTH 512
+ #else
+ #define PORT_MAXIMUM_MESSAGE_LENGTH 256
+ #endif
- typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION {
- IO_PRIORITY_HINT PriorityHint;
- } FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION;
+ typedef enum _DMA_WIDTH {
+ Width8Bits,
+ Width16Bits,
+ Width32Bits,
+ MaximumDmaWidth
+ } DMA_WIDTH, *PDMA_WIDTH;
- typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {
- ULONG Flags;
- } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
+ typedef enum _DMA_SPEED {
+ Compatible,
+ TypeA,
+ TypeB,
+ TypeC,
+ TypeF,
+ MaximumDmaSpeed
+ } DMA_SPEED, *PDMA_SPEED;
- typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION {
- PUCHAR IoStatusBlockRange;
- ULONG Length;
- } FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION;
+ /* DEVICE_DESCRIPTION.Version */
- typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION {
- BOOLEAN IsRemote;
- } FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION;
+ #define DEVICE_DESCRIPTION_VERSION 0x0000
+ #define DEVICE_DESCRIPTION_VERSION1 0x0001
+ #define DEVICE_DESCRIPTION_VERSION2 0x0002
- typedef struct _FILE_NUMA_NODE_INFORMATION {
- USHORT NodeNumber;
- } FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION;
+ typedef struct _DEVICE_DESCRIPTION {
+ ULONG Version;
+ BOOLEAN Master;
+ BOOLEAN ScatterGather;
+ BOOLEAN DemandMode;
+ BOOLEAN AutoInitialize;
+ BOOLEAN Dma32BitAddresses;
+ BOOLEAN IgnoreCount;
+ BOOLEAN Reserved1;
+ BOOLEAN Dma64BitAddresses;
+ ULONG BusNumber;
+ ULONG DmaChannel;
+ INTERFACE_TYPE InterfaceType;
+ DMA_WIDTH DmaWidth;
+ DMA_SPEED DmaSpeed;
+ ULONG MaximumLength;
+ ULONG DmaPort;
+ } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
- typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION {
- ULONG NumberOfProcessIdsInList;
- ULONG_PTR ProcessIdList[1];
- } FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION;
+ typedef enum _DEVICE_RELATION_TYPE {
+ BusRelations,
+ EjectionRelations,
+ PowerRelations,
+ RemovalRelations,
+ TargetDeviceRelation,
+ SingleBusRelations,
+ TransportRelations
+ } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
- typedef struct _FILE_STANDARD_INFORMATION {
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER EndOfFile;
- ULONG NumberOfLinks;
- BOOLEAN DeletePending;
- BOOLEAN Directory;
- } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
+ typedef struct _DEVICE_RELATIONS {
+ ULONG Count;
+ PDEVICE_OBJECT Objects[1];
+ } DEVICE_RELATIONS, *PDEVICE_RELATIONS;
- typedef struct _FILE_NETWORK_OPEN_INFORMATION {
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER EndOfFile;
- ULONG FileAttributes;
- } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+ typedef struct _DEVOBJ_EXTENSION {
+ CSHORT Type;
+ USHORT Size;
+ PDEVICE_OBJECT DeviceObject;
+ } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
- typedef enum _FSINFOCLASS {
- FileFsVolumeInformation = 1,
- FileFsLabelInformation,
- FileFsSizeInformation,
- FileFsDeviceInformation,
- FileFsAttributeInformation,
- FileFsControlInformation,
- FileFsFullSizeInformation,
- FileFsObjectIdInformation,
- FileFsDriverPathInformation,
- FileFsVolumeFlagsInformation,
- FileFsMaximumInformation
- } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+ typedef struct _SCATTER_GATHER_ELEMENT {
+ PHYSICAL_ADDRESS Address;
+ ULONG Length;
+ ULONG_PTR Reserved;
+ } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
- typedef struct _FILE_FS_DEVICE_INFORMATION {
- DEVICE_TYPE DeviceType;
- ULONG Characteristics;
- } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
+ #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
- typedef struct _FILE_FULL_EA_INFORMATION {
- ULONG NextEntryOffset;
- UCHAR Flags;
- UCHAR EaNameLength;
- USHORT EaValueLength;
- CHAR EaName[1];
- } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
+ #if defined(_MSC_VER)
+ #if _MSC_VER >= 1200
+ #pragma warning(push)
+ #endif
+ #pragma warning(disable:4200)
+ #endif /* _MSC_VER */
- typedef struct _FILE_SFIO_RESERVE_INFORMATION {
- ULONG RequestsPerPeriod;
- ULONG Period;
- BOOLEAN RetryFailures;
- BOOLEAN Discardable;
- ULONG RequestSize;
- ULONG NumOutstandingRequests;
- } FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION;
+ typedef struct _SCATTER_GATHER_LIST {
+ ULONG NumberOfElements;
+ ULONG_PTR Reserved;
+ SCATTER_GATHER_ELEMENT Elements[1];
+ } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
- typedef struct _FILE_SFIO_VOLUME_INFORMATION {
- ULONG MaximumRequestsPerPeriod;
- ULONG MinimumPeriod;
- ULONG MinimumTransferSize;
- } FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION;
+ #if defined(_MSC_VER)
+ #if _MSC_VER >= 1200
+ #pragma warning(pop)
+ #else
+ #pragma warning(default:4200)
+ #endif
+ #endif /* _MSC_VER */
- #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
- #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
- #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
+ #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
- #define FM_LOCK_BIT (0x1)
- #define FM_LOCK_BIT_V (0x0)
- #define FM_LOCK_WAITER_WOKEN (0x2)
- #define FM_LOCK_WAITER_INC (0x4)
+ struct _SCATTER_GATHER_LIST;
+ typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
- _Function_class_(FAST_IO_CHECK_IF_POSSIBLE)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_CHECK_IF_POSSIBLE)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ ULONG Length,
- _In_ BOOLEAN Wait,
- _In_ ULONG LockKey,
- _In_ BOOLEAN CheckForReadOperation,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE;
+ #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
- _Function_class_(FAST_IO_READ)
+ _Function_class_(DRIVER_ADD_DEVICE)
+ _IRQL_requires_(PASSIVE_LEVEL)
_IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_READ)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ ULONG Length,
- _In_ BOOLEAN Wait,
- _In_ ULONG LockKey,
- _Out_ PVOID Buffer,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_READ *PFAST_IO_READ;
+ _When_(return>=0, _Kernel_clear_do_init_(__yes))
+ typedef NTSTATUS
+ (NTAPI DRIVER_ADD_DEVICE)(
+ _In_ struct _DRIVER_OBJECT *DriverObject,
+ _In_ struct _DEVICE_OBJECT *PhysicalDeviceObject);
+ typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE;
- _Function_class_(FAST_IO_WRITE)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_WRITE)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ ULONG Length,
- _In_ BOOLEAN Wait,
- _In_ ULONG LockKey,
- _In_ PVOID Buffer,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_WRITE *PFAST_IO_WRITE;
+ typedef struct _DRIVER_EXTENSION {
+ struct _DRIVER_OBJECT *DriverObject;
+ PDRIVER_ADD_DEVICE AddDevice;
+ ULONG Count;
+ UNICODE_STRING ServiceKeyName;
+ } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
- _Function_class_(FAST_IO_QUERY_BASIC_INFO)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_QUERY_BASIC_INFO)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ BOOLEAN Wait,
- _Out_ PFILE_BASIC_INFORMATION Buffer,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO;
+ #define DRVO_UNLOAD_INVOKED 0x00000001
+ #define DRVO_LEGACY_DRIVER 0x00000002
+ #define DRVO_BUILTIN_DRIVER 0x00000004
- _Function_class_(FAST_IO_QUERY_STANDARD_INFO)
+ _Function_class_(DRIVER_INITIALIZE)
_IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_QUERY_STANDARD_INFO)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ BOOLEAN Wait,
- _Out_ PFILE_STANDARD_INFORMATION Buffer,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO;
+ typedef NTSTATUS
+ (NTAPI DRIVER_INITIALIZE)(
+ _In_ struct _DRIVER_OBJECT *DriverObject,
+ _In_ PUNICODE_STRING RegistryPath);
+ typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE;
- _Function_class_(FAST_IO_LOCK)
+ _Function_class_(DRIVER_STARTIO)
+ _IRQL_always_function_min_(DISPATCH_LEVEL)
+ _IRQL_requires_(DISPATCH_LEVEL)
_IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_LOCK)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ PLARGE_INTEGER Length,
- _In_ PEPROCESS ProcessId,
- _In_ ULONG Key,
- _In_ BOOLEAN FailImmediately,
- _In_ BOOLEAN ExclusiveLock,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_LOCK *PFAST_IO_LOCK;
+ typedef VOID
+ (NTAPI DRIVER_STARTIO)(
+ _Inout_ struct _DEVICE_OBJECT *DeviceObject,
+ _Inout_ struct _IRP *Irp);
+ typedef DRIVER_STARTIO *PDRIVER_STARTIO;
- _Function_class_(FAST_IO_UNLOCK_SINGLE)
+ _Function_class_(DRIVER_UNLOAD)
+ _IRQL_requires_(PASSIVE_LEVEL)
_IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_UNLOCK_SINGLE)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ PLARGE_INTEGER Length,
- _In_ PEPROCESS ProcessId,
- _In_ ULONG Key,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE;
+ typedef VOID
+ (NTAPI DRIVER_UNLOAD)(
+ _In_ struct _DRIVER_OBJECT *DriverObject);
+ typedef DRIVER_UNLOAD *PDRIVER_UNLOAD;
- _Function_class_(FAST_IO_UNLOCK_ALL)
+ _Function_class_(DRIVER_DISPATCH)
+ _IRQL_requires_(PASSIVE_LEVEL)
_IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_UNLOCK_ALL)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PEPROCESS ProcessId,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL;
+ typedef NTSTATUS
+ (NTAPI DRIVER_DISPATCH)(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _Inout_ struct _IRP *Irp);
+ typedef DRIVER_DISPATCH *PDRIVER_DISPATCH;
- _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PVOID ProcessId,
- _In_ ULONG Key,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY;
+ typedef struct _DRIVER_OBJECT {
+ CSHORT Type;
+ CSHORT Size;
+ PDEVICE_OBJECT DeviceObject;
+ ULONG Flags;
+ PVOID DriverStart;
+ ULONG DriverSize;
+ PVOID DriverSection;
+ PDRIVER_EXTENSION DriverExtension;
+ UNICODE_STRING DriverName;
+ PUNICODE_STRING HardwareDatabase;
+ struct _FAST_IO_DISPATCH *FastIoDispatch;
+ PDRIVER_INITIALIZE DriverInit;
+ PDRIVER_STARTIO DriverStartIo;
+ PDRIVER_UNLOAD DriverUnload;
+ PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
+ } DRIVER_OBJECT, *PDRIVER_OBJECT;
- _Function_class_(FAST_IO_DEVICE_CONTROL)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_DEVICE_CONTROL)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ BOOLEAN Wait,
- _In_opt_ PVOID InputBuffer,
- _In_ ULONG InputBufferLength,
- _Out_opt_ PVOID OutputBuffer,
- _In_ ULONG OutputBufferLength,
- _In_ ULONG IoControlCode,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL;
+ typedef struct _DMA_ADAPTER {
+ USHORT Version;
+ USHORT Size;
+ struct _DMA_OPERATIONS* DmaOperations;
+ } DMA_ADAPTER, *PDMA_ADAPTER;
- _Function_class_(FAST_IO_ACQUIRE_FILE)
- _IRQL_requires_same_
typedef VOID
- (NTAPI FAST_IO_ACQUIRE_FILE)(
- _In_ struct _FILE_OBJECT *FileObject);
- typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE;
+ (NTAPI *PPUT_DMA_ADAPTER)(
+ PDMA_ADAPTER DmaAdapter);
- _Function_class_(FAST_IO_RELEASE_FILE)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI FAST_IO_RELEASE_FILE)(
- _In_ struct _FILE_OBJECT *FileObject);
- typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE;
+ typedef PVOID
+ (NTAPI *PALLOCATE_COMMON_BUFFER)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ ULONG Length,
+ _Out_ PPHYSICAL_ADDRESS LogicalAddress,
+ _In_ BOOLEAN CacheEnabled);
- _Function_class_(FAST_IO_DETACH_DEVICE)
- _IRQL_requires_same_
typedef VOID
- (NTAPI FAST_IO_DETACH_DEVICE)(
- _In_ struct _DEVICE_OBJECT *SourceDevice,
- _In_ struct _DEVICE_OBJECT *TargetDevice);
- typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE;
-
- _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ BOOLEAN Wait,
- _Out_ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
- _Out_ struct _IO_STATUS_BLOCK *IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO;
+ (NTAPI *PFREE_COMMON_BUFFER)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ ULONG Length,
+ _In_ PHYSICAL_ADDRESS LogicalAddress,
+ _In_ PVOID VirtualAddress,
+ _In_ BOOLEAN CacheEnabled);
- _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE)
- _IRQL_requires_same_
typedef NTSTATUS
- (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER EndingOffset,
- _Out_ struct _ERESOURCE **ResourceToRelease,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE;
+ (NTAPI *PALLOCATE_ADAPTER_CHANNEL)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _In_ ULONG NumberOfMapRegisters,
+ _In_ PDRIVER_CONTROL ExecutionRoutine,
+ _In_ PVOID Context);
- _Function_class_(FAST_IO_MDL_READ)
- _IRQL_requires_same_
typedef BOOLEAN
- (NTAPI FAST_IO_MDL_READ)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
+ (NTAPI *PFLUSH_ADAPTER_BUFFERS)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ PMDL Mdl,
+ _In_ PVOID MapRegisterBase,
+ _In_ PVOID CurrentVa,
_In_ ULONG Length,
- _In_ ULONG LockKey,
- _Out_ PMDL *MdlChain,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ;
+ _In_ BOOLEAN WriteToDevice);
- _Function_class_(FAST_IO_MDL_READ_COMPLETE)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_MDL_READ_COMPLETE)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PMDL MdlChain,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE;
+ typedef VOID
+ (NTAPI *PFREE_ADAPTER_CHANNEL)(
+ _In_ PDMA_ADAPTER DmaAdapter);
- _Function_class_(FAST_IO_PREPARE_MDL_WRITE)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_PREPARE_MDL_WRITE)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ ULONG Length,
- _In_ ULONG LockKey,
- _Out_ PMDL *MdlChain,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE;
+ typedef VOID
+ (NTAPI *PFREE_MAP_REGISTERS)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ PVOID MapRegisterBase,
+ ULONG NumberOfMapRegisters);
- _Function_class_(FAST_IO_MDL_WRITE_COMPLETE)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_MDL_WRITE_COMPLETE)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ PMDL MdlChain,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE;
+ typedef PHYSICAL_ADDRESS
+ (NTAPI *PMAP_TRANSFER)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ PMDL Mdl,
+ _In_ PVOID MapRegisterBase,
+ _In_ PVOID CurrentVa,
+ _Inout_ PULONG Length,
+ _In_ BOOLEAN WriteToDevice);
- _Function_class_(FAST_IO_READ_COMPRESSED)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_READ_COMPRESSED)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ ULONG Length,
- _In_ ULONG LockKey,
- _Out_ PVOID Buffer,
- _Out_ PMDL *MdlChain,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _Out_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
- _In_ ULONG CompressedDataInfoLength,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED;
+ typedef ULONG
+ (NTAPI *PGET_DMA_ALIGNMENT)(
+ _In_ PDMA_ADAPTER DmaAdapter);
- _Function_class_(FAST_IO_WRITE_COMPRESSED)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_WRITE_COMPRESSED)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ ULONG Length,
- _In_ ULONG LockKey,
- _In_ PVOID Buffer,
- _Out_ PMDL *MdlChain,
- _Out_ PIO_STATUS_BLOCK IoStatus,
- _In_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
- _In_ ULONG CompressedDataInfoLength,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED;
+ typedef ULONG
+ (NTAPI *PREAD_DMA_COUNTER)(
+ _In_ PDMA_ADAPTER DmaAdapter);
- _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED)
+ _Function_class_(DRIVER_LIST_CONTROL)
_IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PMDL MdlChain,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED;
+ typedef VOID
+ (NTAPI DRIVER_LIST_CONTROL)(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _In_ struct _IRP *Irp,
+ _In_ struct _SCATTER_GATHER_LIST *ScatterGather,
+ _In_ PVOID Context);
+ typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL;
- _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ PLARGE_INTEGER FileOffset,
- _In_ PMDL MdlChain,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED;
+ typedef NTSTATUS
+ (NTAPI *PGET_SCATTER_GATHER_LIST)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _In_ PMDL Mdl,
+ _In_ PVOID CurrentVa,
+ _In_ ULONG Length,
+ _In_ PDRIVER_LIST_CONTROL ExecutionRoutine,
+ _In_ PVOID Context,
+ _In_ BOOLEAN WriteToDevice);
- _Function_class_(FAST_IO_QUERY_OPEN)
- _IRQL_requires_same_
- typedef BOOLEAN
- (NTAPI FAST_IO_QUERY_OPEN)(
- _Inout_ struct _IRP *Irp,
- _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN;
+ typedef VOID
+ (NTAPI *PPUT_SCATTER_GATHER_LIST)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ PSCATTER_GATHER_LIST ScatterGather,
+ _In_ BOOLEAN WriteToDevice);
- _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE)
- _IRQL_requires_same_
typedef NTSTATUS
- (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ struct _ERESOURCE *ResourceToRelease,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE;
+ (NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ PMDL Mdl OPTIONAL,
+ _In_ PVOID CurrentVa,
+ _In_ ULONG Length,
+ _Out_ PULONG ScatterGatherListSize,
+ _Out_ OPTIONAL PULONG pNumberOfMapRegisters);
- _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH)
- _IRQL_requires_same_
typedef NTSTATUS
- (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH;
+ (NTAPI *PBUILD_SCATTER_GATHER_LIST)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _In_ PMDL Mdl,
+ _In_ PVOID CurrentVa,
+ _In_ ULONG Length,
+ _In_ PDRIVER_LIST_CONTROL ExecutionRoutine,
+ _In_ PVOID Context,
+ _In_ BOOLEAN WriteToDevice,
+ _In_ PVOID ScatterGatherBuffer,
+ _In_ ULONG ScatterGatherLength);
- _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH)
- _IRQL_requires_same_
typedef NTSTATUS
- (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)(
- _In_ struct _FILE_OBJECT *FileObject,
- _In_ struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH;
+ (NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
+ _In_ PDMA_ADAPTER DmaAdapter,
+ _In_ PSCATTER_GATHER_LIST ScatterGather,
+ _In_ PMDL OriginalMdl,
+ _Out_ PMDL *TargetMdl);
- typedef struct _FAST_IO_DISPATCH {
- ULONG SizeOfFastIoDispatch;
- PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible;
- PFAST_IO_READ FastIoRead;
- PFAST_IO_WRITE FastIoWrite;
- PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo;
- PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo;
- PFAST_IO_LOCK FastIoLock;
- PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle;
- PFAST_IO_UNLOCK_ALL FastIoUnlockAll;
- PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey;
- PFAST_IO_DEVICE_CONTROL FastIoDeviceControl;
- PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection;
- PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection;
- PFAST_IO_DETACH_DEVICE FastIoDetachDevice;
- PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo;
- PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite;
- PFAST_IO_MDL_READ MdlRead;
- PFAST_IO_MDL_READ_COMPLETE MdlReadComplete;
- PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite;
- PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete;
- PFAST_IO_READ_COMPRESSED FastIoReadCompressed;
- PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed;
- PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed;
- PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed;
- PFAST_IO_QUERY_OPEN FastIoQueryOpen;
- PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite;
- PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush;
- PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush;
- } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
+ typedef struct _DMA_OPERATIONS {
+ ULONG Size;
+ PPUT_DMA_ADAPTER PutDmaAdapter;
+ PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
+ PFREE_COMMON_BUFFER FreeCommonBuffer;
+ PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
+ PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
+ PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
+ PFREE_MAP_REGISTERS FreeMapRegisters;
+ PMAP_TRANSFER MapTransfer;
+ PGET_DMA_ALIGNMENT GetDmaAlignment;
+ PREAD_DMA_COUNTER ReadDmaCounter;
+ PGET_SCATTER_GATHER_LIST GetScatterGatherList;
+ PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
+ PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
+ PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
+ PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
+ } DMA_OPERATIONS, *PDMA_OPERATIONS;
- typedef struct _SECTION_OBJECT_POINTERS {
- PVOID DataSectionObject;
- PVOID SharedCacheMap;
- PVOID ImageSectionObject;
- } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
+ typedef struct _IO_RESOURCE_DESCRIPTOR {
+ UCHAR Option;
+ UCHAR Type;
+ UCHAR ShareDisposition;
+ UCHAR Spare1;
+ USHORT Flags;
+ USHORT Spare2;
+ union {
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Port;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Memory;
+ struct {
+ ULONG MinimumVector;
+ ULONG MaximumVector;
+ } Interrupt;
+ struct {
+ ULONG MinimumChannel;
+ ULONG MaximumChannel;
+ } Dma;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Generic;
+ struct {
+ ULONG Data[3];
+ } DevicePrivate;
+ struct {
+ ULONG Length;
+ ULONG MinBusNumber;
+ ULONG MaxBusNumber;
+ ULONG Reserved;
+ } BusNumber;
+ struct {
+ ULONG Priority;
+ ULONG Reserved1;
+ ULONG Reserved2;
+ } ConfigData;
+ } u;
+ } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
- typedef struct _IO_COMPLETION_CONTEXT {
- PVOID Port;
- PVOID Key;
- } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
+ typedef struct _IO_RESOURCE_LIST {
+ USHORT Version;
+ USHORT Revision;
+ ULONG Count;
+ IO_RESOURCE_DESCRIPTOR Descriptors[1];
+ } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
- /* FILE_OBJECT.Flags */
- #define FO_FILE_OPEN 0x00000001
- #define FO_SYNCHRONOUS_IO 0x00000002
- #define FO_ALERTABLE_IO 0x00000004
- #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
- #define FO_WRITE_THROUGH 0x00000010
- #define FO_SEQUENTIAL_ONLY 0x00000020
- #define FO_CACHE_SUPPORTED 0x00000040
- #define FO_NAMED_PIPE 0x00000080
- #define FO_STREAM_FILE 0x00000100
- #define FO_MAILSLOT 0x00000200
- #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
- #define FO_QUEUE_IRP_TO_THREAD 0x00000400
- #define FO_DIRECT_DEVICE_OPEN 0x00000800
- #define FO_FILE_MODIFIED 0x00001000
- #define FO_FILE_SIZE_CHANGED 0x00002000
- #define FO_CLEANUP_COMPLETE 0x00004000
- #define FO_TEMPORARY_FILE 0x00008000
- #define FO_DELETE_ON_CLOSE 0x00010000
- #define FO_OPENED_CASE_SENSITIVE 0x00020000
- #define FO_HANDLE_CREATED 0x00040000
- #define FO_FILE_FAST_IO_READ 0x00080000
- #define FO_RANDOM_ACCESS 0x00100000
- #define FO_FILE_OPEN_CANCELLED 0x00200000
- #define FO_VOLUME_OPEN 0x00400000
- #define FO_REMOTE_ORIGIN 0x01000000
- #define FO_DISALLOW_EXCLUSIVE 0x02000000
- #define FO_SKIP_COMPLETION_PORT 0x02000000
- #define FO_SKIP_SET_EVENT 0x04000000
- #define FO_SKIP_SET_FAST_IO 0x08000000
- #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
+ typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
+ ULONG ListSize;
+ INTERFACE_TYPE InterfaceType;
+ ULONG BusNumber;
+ ULONG SlotNumber;
+ ULONG Reserved[3];
+ ULONG AlternativeLists;
+ IO_RESOURCE_LIST List[1];
+ } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
- /* VPB.Flags */
- #define VPB_MOUNTED 0x0001
- #define VPB_LOCKED 0x0002
- #define VPB_PERSISTENT 0x0004
- #define VPB_REMOVE_PENDING 0x0008
- #define VPB_RAW_MOUNT 0x0010
- #define VPB_DIRECT_WRITES_ALLOWED 0x0020
+ _Function_class_(DRIVER_CANCEL)
+ _Requires_lock_held_(_Global_cancel_spin_lock_)
+ _Releases_lock_(_Global_cancel_spin_lock_)
+ _IRQL_requires_min_(DISPATCH_LEVEL)
+ _IRQL_requires_(DISPATCH_LEVEL)
+ typedef VOID
+ (NTAPI DRIVER_CANCEL)(
+ _Inout_ struct _DEVICE_OBJECT *DeviceObject,
+ _Inout_ _IRQL_uses_cancel_ struct _IRP *Irp);
+ typedef DRIVER_CANCEL *PDRIVER_CANCEL;
- /* IRP.Flags */
+ typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP {
+ CSHORT Type;
+ USHORT Size;
+ struct _MDL *MdlAddress;
+ ULONG Flags;
+ union {
+ struct _IRP *MasterIrp;
+ volatile LONG IrpCount;
+ PVOID SystemBuffer;
+ } AssociatedIrp;
+ LIST_ENTRY ThreadListEntry;
+ IO_STATUS_BLOCK IoStatus;
+ KPROCESSOR_MODE RequestorMode;
+ BOOLEAN PendingReturned;
+ CHAR StackCount;
+ CHAR CurrentLocation;
+ BOOLEAN Cancel;
+ KIRQL CancelIrql;
+ CCHAR ApcEnvironment;
+ UCHAR AllocationFlags;
+ PIO_STATUS_BLOCK UserIosb;
+ PKEVENT UserEvent;
+ union {
+ struct {
+ _ANONYMOUS_UNION union {
+ PIO_APC_ROUTINE UserApcRoutine;
+ PVOID IssuingProcess;
+ } DUMMYUNIONNAME;
+ PVOID UserApcContext;
+ } AsynchronousParameters;
+ LARGE_INTEGER AllocationSize;
+ } Overlay;
+ volatile PDRIVER_CANCEL CancelRoutine;
+ PVOID UserBuffer;
+ union {
+ struct {
+ _ANONYMOUS_UNION union {
+ KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
+ _ANONYMOUS_STRUCT struct {
+ PVOID DriverContext[4];
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ PETHREAD Thread;
+ PCHAR AuxiliaryBuffer;
+ _ANONYMOUS_STRUCT struct {
+ LIST_ENTRY ListEntry;
+ _ANONYMOUS_UNION union {
+ struct _IO_STACK_LOCATION *CurrentStackLocation;
+ ULONG PacketType;
+ } DUMMYUNIONNAME;
+ } DUMMYSTRUCTNAME;
+ struct _FILE_OBJECT *OriginalFileObject;
+ } Overlay;
+ KAPC Apc;
+ PVOID CompletionKey;
+ } Tail;
+ } IRP, *PIRP;
- #define SL_FORCE_ACCESS_CHECK 0x01
- #define SL_OPEN_PAGING_FILE 0x02
- #define SL_OPEN_TARGET_DIRECTORY 0x04
- #define SL_STOP_ON_SYMLINK 0x08
- #define SL_CASE_SENSITIVE 0x80
+ typedef enum _IO_PAGING_PRIORITY {
+ IoPagingPriorityInvalid,
+ IoPagingPriorityNormal,
+ IoPagingPriorityHigh,
+ IoPagingPriorityReserved1,
+ IoPagingPriorityReserved2
+ } IO_PAGING_PRIORITY;
- #define SL_KEY_SPECIFIED 0x01
- #define SL_OVERRIDE_VERIFY_VOLUME 0x02
- #define SL_WRITE_THROUGH 0x04
- #define SL_FT_SEQUENTIAL_WRITE 0x08
- #define SL_FORCE_DIRECT_WRITE 0x10
- #define SL_REALTIME_STREAM 0x20
+ _Function_class_(IO_COMPLETION_ROUTINE)
+ _IRQL_requires_same_
+ typedef NTSTATUS
+ (NTAPI IO_COMPLETION_ROUTINE)(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _In_ struct _IRP *Irp,
+ _In_opt_ PVOID Context);
+ typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE;
- #define SL_READ_ACCESS_GRANTED 0x01
- #define SL_WRITE_ACCESS_GRANTED 0x04
+ _Function_class_(IO_DPC_ROUTINE)
+ _IRQL_always_function_min_(DISPATCH_LEVEL)
+ _IRQL_requires_(DISPATCH_LEVEL)
+ _IRQL_requires_same_
+ typedef VOID
+ (NTAPI IO_DPC_ROUTINE)(
+ _In_ struct _KDPC *Dpc,
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _Inout_ struct _IRP *Irp,
+ _In_opt_ PVOID Context);
+ typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE;
- #define SL_FAIL_IMMEDIATELY 0x01
- #define SL_EXCLUSIVE_LOCK 0x02
+ typedef NTSTATUS
+ (NTAPI *PMM_DLL_INITIALIZE)(
+ _In_ PUNICODE_STRING RegistryPath);
- #define SL_RESTART_SCAN 0x01
- #define SL_RETURN_SINGLE_ENTRY 0x02
- #define SL_INDEX_SPECIFIED 0x04
+ typedef NTSTATUS
+ (NTAPI *PMM_DLL_UNLOAD)(
+ VOID);
- #define SL_WATCH_TREE 0x01
+ _Function_class_(IO_TIMER_ROUTINE)
+ _IRQL_requires_same_
+ typedef VOID
+ (NTAPI IO_TIMER_ROUTINE)(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _In_opt_ PVOID Context);
+ typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
- #define SL_ALLOW_RAW_MOUNT 0x01
+ typedef struct _IO_SECURITY_CONTEXT {
+ PSECURITY_QUALITY_OF_SERVICE SecurityQos;
+ PACCESS_STATE AccessState;
+ ACCESS_MASK DesiredAccess;
+ ULONG FullCreateOptions;
+ } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
- #define CTL_CODE(DeviceType, Function, Method, Access) \
- (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
+ struct _IO_CSQ;
- #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
+ typedef struct _IO_CSQ_IRP_CONTEXT {
+ ULONG Type;
+ struct _IRP *Irp;
+ struct _IO_CSQ *Csq;
+ } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT;
- #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
+ typedef VOID
+ (NTAPI *PIO_CSQ_INSERT_IRP)(
+ _In_ struct _IO_CSQ *Csq,
+ _In_ PIRP Irp);
- #define IRP_NOCACHE 0x00000001
- #define IRP_PAGING_IO 0x00000002
- #define IRP_MOUNT_COMPLETION 0x00000002
- #define IRP_SYNCHRONOUS_API 0x00000004
- #define IRP_ASSOCIATED_IRP 0x00000008
- #define IRP_BUFFERED_IO 0x00000010
- #define IRP_DEALLOCATE_BUFFER 0x00000020
- #define IRP_INPUT_OPERATION 0x00000040
- #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
- #define IRP_CREATE_OPERATION 0x00000080
- #define IRP_READ_OPERATION 0x00000100
- #define IRP_WRITE_OPERATION 0x00000200
- #define IRP_CLOSE_OPERATION 0x00000400
- #define IRP_DEFER_IO_COMPLETION 0x00000800
- #define IRP_OB_QUERY_NAME 0x00001000
- #define IRP_HOLD_DEVICE_QUEUE 0x00002000
- /* The following 2 are missing in latest WDK */
- #define IRP_RETRY_IO_COMPLETION 0x00004000
- #define IRP_CLASS_CACHE_OPERATION 0x00008000
+ typedef NTSTATUS
+ (NTAPI IO_CSQ_INSERT_IRP_EX)(
+ _In_ struct _IO_CSQ *Csq,
+ _In_ PIRP Irp,
+ _In_ PVOID InsertContext);
+ typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX;
- #define IRP_QUOTA_CHARGED 0x01
- #define IRP_ALLOCATED_MUST_SUCCEED 0x02
- #define IRP_ALLOCATED_FIXED_SIZE 0x04
- #define IRP_LOOKASIDE_ALLOCATION 0x08
+ typedef VOID
+ (NTAPI *PIO_CSQ_REMOVE_IRP)(
+ _In_ struct _IO_CSQ *Csq,
+ _In_ PIRP Irp);
- /*
- ** IRP function codes
- */
+ typedef PIRP
+ (NTAPI *PIO_CSQ_PEEK_NEXT_IRP)(
+ _In_ struct _IO_CSQ *Csq,
+ _In_ PIRP Irp,
+ _In_ PVOID PeekContext);
- #define IRP_MJ_CREATE 0x00
- #define IRP_MJ_CREATE_NAMED_PIPE 0x01
- #define IRP_MJ_CLOSE 0x02
- #define IRP_MJ_READ 0x03
- #define IRP_MJ_WRITE 0x04
- #define IRP_MJ_QUERY_INFORMATION 0x05
- #define IRP_MJ_SET_INFORMATION 0x06
- #define IRP_MJ_QUERY_EA 0x07
- #define IRP_MJ_SET_EA 0x08
- #define IRP_MJ_FLUSH_BUFFERS 0x09
- #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
- #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
- #define IRP_MJ_DIRECTORY_CONTROL 0x0c
- #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
- #define IRP_MJ_DEVICE_CONTROL 0x0e
- #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
- #define IRP_MJ_SCSI 0x0f
- #define IRP_MJ_SHUTDOWN 0x10
- #define IRP_MJ_LOCK_CONTROL 0x11
- #define IRP_MJ_CLEANUP 0x12
- #define IRP_MJ_CREATE_MAILSLOT 0x13
- #define IRP_MJ_QUERY_SECURITY 0x14
- #define IRP_MJ_SET_SECURITY 0x15
- #define IRP_MJ_POWER 0x16
- #define IRP_MJ_SYSTEM_CONTROL 0x17
- #define IRP_MJ_DEVICE_CHANGE 0x18
- #define IRP_MJ_QUERY_QUOTA 0x19
- #define IRP_MJ_SET_QUOTA 0x1a
- #define IRP_MJ_PNP 0x1b
- #define IRP_MJ_PNP_POWER 0x1b
- #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
+ typedef VOID
+ (NTAPI *PIO_CSQ_ACQUIRE_LOCK)(
+ _In_ struct _IO_CSQ *Csq,
+ _Out_ PKIRQL Irql);
- #define IRP_MN_SCSI_CLASS 0x01
+ typedef VOID
+ (NTAPI *PIO_CSQ_RELEASE_LOCK)(
+ _In_ struct _IO_CSQ *Csq,
+ _In_ KIRQL Irql);
- #define IRP_MN_START_DEVICE 0x00
- #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
- #define IRP_MN_REMOVE_DEVICE 0x02
- #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
- #define IRP_MN_STOP_DEVICE 0x04
- #define IRP_MN_QUERY_STOP_DEVICE 0x05
- #define IRP_MN_CANCEL_STOP_DEVICE 0x06
+ typedef VOID
+ (NTAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)(
+ _In_ struct _IO_CSQ *Csq,
+ _In_ PIRP Irp);
- #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
- #define IRP_MN_QUERY_INTERFACE 0x08
- #define IRP_MN_QUERY_CAPABILITIES 0x09
- #define IRP_MN_QUERY_RESOURCES 0x0A
- #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
- #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
- #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
+ typedef struct _IO_CSQ {
+ ULONG Type;
+ PIO_CSQ_INSERT_IRP CsqInsertIrp;
+ PIO_CSQ_REMOVE_IRP CsqRemoveIrp;
+ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp;
+ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock;
+ PIO_CSQ_RELEASE_LOCK CsqReleaseLock;
+ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp;
+ PVOID ReservePointer;
+ } IO_CSQ, *PIO_CSQ;
- #define IRP_MN_READ_CONFIG 0x0F
- #define IRP_MN_WRITE_CONFIG 0x10
- #define IRP_MN_EJECT 0x11
- #define IRP_MN_SET_LOCK 0x12
- #define IRP_MN_QUERY_ID 0x13
- #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
- #define IRP_MN_QUERY_BUS_INFORMATION 0x15
- #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
- #define IRP_MN_SURPRISE_REMOVAL 0x17
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- #define IRP_MN_DEVICE_ENUMERATED 0x19
- #endif
+ typedef enum _BUS_QUERY_ID_TYPE {
+ BusQueryDeviceID,
+ BusQueryHardwareIDs,
+ BusQueryCompatibleIDs,
+ BusQueryInstanceID,
+ BusQueryDeviceSerialNumber
+ } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
- #define IRP_MN_WAIT_WAKE 0x00
- #define IRP_MN_POWER_SEQUENCE 0x01
- #define IRP_MN_SET_POWER 0x02
- #define IRP_MN_QUERY_POWER 0x03
+ typedef enum _DEVICE_TEXT_TYPE {
+ DeviceTextDescription,
+ DeviceTextLocationInformation
+ } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
- #define IRP_MN_QUERY_ALL_DATA 0x00
- #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
- #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
- #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
- #define IRP_MN_ENABLE_EVENTS 0x04
- #define IRP_MN_DISABLE_EVENTS 0x05
- #define IRP_MN_ENABLE_COLLECTION 0x06
- #define IRP_MN_DISABLE_COLLECTION 0x07
- #define IRP_MN_REGINFO 0x08
- #define IRP_MN_EXECUTE_METHOD 0x09
+ typedef BOOLEAN
+ (NTAPI *PGPE_SERVICE_ROUTINE)(
+ PVOID,
+ PVOID);
- #define IRP_MN_REGINFO_EX 0x0b
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PGPE_CONNECT_VECTOR)(
+ PDEVICE_OBJECT,
+ ULONG,
+ KINTERRUPT_MODE,
+ BOOLEAN,
+ PGPE_SERVICE_ROUTINE,
+ PVOID,
+ PVOID);
- typedef struct _FILE_OBJECT {
- CSHORT Type;
- CSHORT Size;
- PDEVICE_OBJECT DeviceObject;
- PVPB Vpb;
- PVOID FsContext;
- PVOID FsContext2;
- PSECTION_OBJECT_POINTERS SectionObjectPointer;
- PVOID PrivateCacheMap;
- NTSTATUS FinalStatus;
- struct _FILE_OBJECT *RelatedFileObject;
- BOOLEAN LockOperation;
- BOOLEAN DeletePending;
- BOOLEAN ReadAccess;
- BOOLEAN WriteAccess;
- BOOLEAN DeleteAccess;
- BOOLEAN SharedRead;
- BOOLEAN SharedWrite;
- BOOLEAN SharedDelete;
- ULONG Flags;
- UNICODE_STRING FileName;
- LARGE_INTEGER CurrentByteOffset;
- volatile ULONG Waiters;
- volatile ULONG Busy;
- PVOID LastLock;
- KEVENT Lock;
- KEVENT Event;
- volatile PIO_COMPLETION_CONTEXT CompletionContext;
- KSPIN_LOCK IrpListLock;
- LIST_ENTRY IrpList;
- volatile PVOID FileObjectExtension;
- } FILE_OBJECT, *PFILE_OBJECT;
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PGPE_DISCONNECT_VECTOR)(
+ PVOID);
- typedef struct _IO_ERROR_LOG_PACKET {
- UCHAR MajorFunctionCode;
- UCHAR RetryCount;
- USHORT DumpDataSize;
- USHORT NumberOfStrings;
- USHORT StringOffset;
- USHORT EventCategory;
- NTSTATUS ErrorCode;
- ULONG UniqueErrorValue;
- NTSTATUS FinalStatus;
- ULONG SequenceNumber;
- ULONG IoControlCode;
- LARGE_INTEGER DeviceOffset;
- ULONG DumpData[1];
- } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PGPE_ENABLE_EVENT)(
+ PDEVICE_OBJECT,
+ PVOID);
- typedef struct _IO_ERROR_LOG_MESSAGE {
- USHORT Type;
- USHORT Size;
- USHORT DriverNameLength;
- LARGE_INTEGER TimeStamp;
- ULONG DriverNameOffset;
- IO_ERROR_LOG_PACKET EntryData;
- } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PGPE_DISABLE_EVENT)(
+ PDEVICE_OBJECT,
+ PVOID);
- #define ERROR_LOG_LIMIT_SIZE 240
- #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
- sizeof(IO_ERROR_LOG_PACKET) + \
- (sizeof(WCHAR) * 40))
- #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
- (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
- #define IO_ERROR_LOG_MESSAGE_LENGTH \
- ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
- ERROR_LOG_MESSAGE_LIMIT_SIZE : \
- PORT_MAXIMUM_MESSAGE_LENGTH)
- #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
- IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PGPE_CLEAR_STATUS)(
+ PDEVICE_OBJECT,
+ PVOID);
- #ifdef _WIN64
- #define PORT_MAXIMUM_MESSAGE_LENGTH 512
- #else
- #define PORT_MAXIMUM_MESSAGE_LENGTH 256
- #endif
+ typedef VOID
+ (NTAPI *PDEVICE_NOTIFY_CALLBACK)(
+ PVOID,
+ ULONG);
- typedef enum _DMA_WIDTH {
- Width8Bits,
- Width16Bits,
- Width32Bits,
- MaximumDmaWidth
- } DMA_WIDTH, *PDMA_WIDTH;
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)(
+ PDEVICE_OBJECT,
+ PDEVICE_NOTIFY_CALLBACK,
+ PVOID);
- typedef enum _DMA_SPEED {
- Compatible,
- TypeA,
- TypeB,
- TypeC,
- TypeF,
- MaximumDmaSpeed
- } DMA_SPEED, *PDMA_SPEED;
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ typedef VOID
+ (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)(
+ PDEVICE_OBJECT,
+ PDEVICE_NOTIFY_CALLBACK);
- /* DEVICE_DESCRIPTION.Version */
+ typedef struct _ACPI_INTERFACE_STANDARD {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PGPE_CONNECT_VECTOR GpeConnectVector;
+ PGPE_DISCONNECT_VECTOR GpeDisconnectVector;
+ PGPE_ENABLE_EVENT GpeEnableEvent;
+ PGPE_DISABLE_EVENT GpeDisableEvent;
+ PGPE_CLEAR_STATUS GpeClearStatus;
+ PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications;
+ PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications;
+ } ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD;
- #define DEVICE_DESCRIPTION_VERSION 0x0000
- #define DEVICE_DESCRIPTION_VERSION1 0x0001
- #define DEVICE_DESCRIPTION_VERSION2 0x0002
+ typedef BOOLEAN
+ (NTAPI *PGPE_SERVICE_ROUTINE2)(
+ PVOID ObjectContext,
+ PVOID ServiceContext);
- typedef struct _DEVICE_DESCRIPTION {
- ULONG Version;
- BOOLEAN Master;
- BOOLEAN ScatterGather;
- BOOLEAN DemandMode;
- BOOLEAN AutoInitialize;
- BOOLEAN Dma32BitAddresses;
- BOOLEAN IgnoreCount;
- BOOLEAN Reserved1;
- BOOLEAN Dma64BitAddresses;
- ULONG BusNumber;
- ULONG DmaChannel;
- INTERFACE_TYPE InterfaceType;
- DMA_WIDTH DmaWidth;
- DMA_SPEED DmaSpeed;
- ULONG MaximumLength;
- ULONG DmaPort;
- } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
-
- typedef enum _DEVICE_RELATION_TYPE {
- BusRelations,
- EjectionRelations,
- PowerRelations,
- RemovalRelations,
- TargetDeviceRelation,
- SingleBusRelations,
- TransportRelations
- } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
-
- typedef struct _DEVICE_RELATIONS {
- ULONG Count;
- PDEVICE_OBJECT Objects[1];
- } DEVICE_RELATIONS, *PDEVICE_RELATIONS;
-
- typedef struct _DEVOBJ_EXTENSION {
- CSHORT Type;
- USHORT Size;
- PDEVICE_OBJECT DeviceObject;
- } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
-
- typedef struct _SCATTER_GATHER_ELEMENT {
- PHYSICAL_ADDRESS Address;
- ULONG Length;
- ULONG_PTR Reserved;
- } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
-
- #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
-
- #if defined(_MSC_VER)
- #if _MSC_VER >= 1200
- #pragma warning(push)
- #endif
- #pragma warning(disable:4200)
- #endif /* _MSC_VER */
-
- typedef struct _SCATTER_GATHER_LIST {
- ULONG NumberOfElements;
- ULONG_PTR Reserved;
- SCATTER_GATHER_ELEMENT Elements[1];
- } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
-
- #if defined(_MSC_VER)
- #if _MSC_VER >= 1200
- #pragma warning(pop)
- #else
- #pragma warning(default:4200)
- #endif
- #endif /* _MSC_VER */
-
- #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
-
- struct _SCATTER_GATHER_LIST;
- typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
-
- #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
-
- _Function_class_(DRIVER_ADD_DEVICE)
- _IRQL_requires_(PASSIVE_LEVEL)
- _IRQL_requires_same_
- _When_(return>=0, _Kernel_clear_do_init_(__yes))
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
typedef NTSTATUS
- (NTAPI DRIVER_ADD_DEVICE)(
- _In_ struct _DRIVER_OBJECT *DriverObject,
- _In_ struct _DEVICE_OBJECT *PhysicalDeviceObject);
- typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE;
-
- typedef struct _DRIVER_EXTENSION {
- struct _DRIVER_OBJECT *DriverObject;
- PDRIVER_ADD_DEVICE AddDevice;
- ULONG Count;
- UNICODE_STRING ServiceKeyName;
- } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
-
- #define DRVO_UNLOAD_INVOKED 0x00000001
- #define DRVO_LEGACY_DRIVER 0x00000002
- #define DRVO_BUILTIN_DRIVER 0x00000004
+ (NTAPI *PGPE_CONNECT_VECTOR2)(
+ PVOID Context,
+ ULONG GpeNumber,
+ KINTERRUPT_MODE Mode,
+ BOOLEAN Shareable,
+ PGPE_SERVICE_ROUTINE ServiceRoutine,
+ PVOID ServiceContext,
+ PVOID *ObjectContext);
- _Function_class_(DRIVER_INITIALIZE)
- _IRQL_requires_same_
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
typedef NTSTATUS
- (NTAPI DRIVER_INITIALIZE)(
- _In_ struct _DRIVER_OBJECT *DriverObject,
- _In_ PUNICODE_STRING RegistryPath);
- typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE;
-
- _Function_class_(DRIVER_STARTIO)
- _IRQL_always_function_min_(DISPATCH_LEVEL)
- _IRQL_requires_(DISPATCH_LEVEL)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI DRIVER_STARTIO)(
- _Inout_ struct _DEVICE_OBJECT *DeviceObject,
- _Inout_ struct _IRP *Irp);
- typedef DRIVER_STARTIO *PDRIVER_STARTIO;
-
- _Function_class_(DRIVER_UNLOAD)
- _IRQL_requires_(PASSIVE_LEVEL)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI DRIVER_UNLOAD)(
- _In_ struct _DRIVER_OBJECT *DriverObject);
- typedef DRIVER_UNLOAD *PDRIVER_UNLOAD;
+ (NTAPI *PGPE_DISCONNECT_VECTOR2)(
+ PVOID Context,
+ PVOID ObjectContext);
- _Function_class_(DRIVER_DISPATCH)
- _IRQL_requires_(PASSIVE_LEVEL)
- _IRQL_requires_same_
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
typedef NTSTATUS
- (NTAPI DRIVER_DISPATCH)(
- _In_ struct _DEVICE_OBJECT *DeviceObject,
- _Inout_ struct _IRP *Irp);
- typedef DRIVER_DISPATCH *PDRIVER_DISPATCH;
-
- typedef struct _DRIVER_OBJECT {
- CSHORT Type;
- CSHORT Size;
- PDEVICE_OBJECT DeviceObject;
- ULONG Flags;
- PVOID DriverStart;
- ULONG DriverSize;
- PVOID DriverSection;
- PDRIVER_EXTENSION DriverExtension;
- UNICODE_STRING DriverName;
- PUNICODE_STRING HardwareDatabase;
- struct _FAST_IO_DISPATCH *FastIoDispatch;
- PDRIVER_INITIALIZE DriverInit;
- PDRIVER_STARTIO DriverStartIo;
- PDRIVER_UNLOAD DriverUnload;
- PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
- } DRIVER_OBJECT, *PDRIVER_OBJECT;
-
- typedef struct _DMA_ADAPTER {
- USHORT Version;
- USHORT Size;
- struct _DMA_OPERATIONS* DmaOperations;
- } DMA_ADAPTER, *PDMA_ADAPTER;
+ (NTAPI *PGPE_ENABLE_EVENT2)(
+ PVOID Context,
+ PVOID ObjectContext);
- typedef VOID
- (NTAPI *PPUT_DMA_ADAPTER)(
- PDMA_ADAPTER DmaAdapter);
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PGPE_DISABLE_EVENT2)(
+ PVOID Context,
+ PVOID ObjectContext);
- typedef PVOID
- (NTAPI *PALLOCATE_COMMON_BUFFER)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ ULONG Length,
- _Out_ PPHYSICAL_ADDRESS LogicalAddress,
- _In_ BOOLEAN CacheEnabled);
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI *PGPE_CLEAR_STATUS2)(
+ PVOID Context,
+ PVOID ObjectContext);
+ _IRQL_requires_max_(DISPATCH_LEVEL)
typedef VOID
- (NTAPI *PFREE_COMMON_BUFFER)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ ULONG Length,
- _In_ PHYSICAL_ADDRESS LogicalAddress,
- _In_ PVOID VirtualAddress,
- _In_ BOOLEAN CacheEnabled);
+ (NTAPI *PDEVICE_NOTIFY_CALLBACK2)(
+ PVOID NotificationContext,
+ ULONG NotifyCode);
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Must_inspect_result_
typedef NTSTATUS
- (NTAPI *PALLOCATE_ADAPTER_CHANNEL)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ PDEVICE_OBJECT DeviceObject,
- _In_ ULONG NumberOfMapRegisters,
- _In_ PDRIVER_CONTROL ExecutionRoutine,
- _In_ PVOID Context);
-
- typedef BOOLEAN
- (NTAPI *PFLUSH_ADAPTER_BUFFERS)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ PMDL Mdl,
- _In_ PVOID MapRegisterBase,
- _In_ PVOID CurrentVa,
- _In_ ULONG Length,
- _In_ BOOLEAN WriteToDevice);
-
- typedef VOID
- (NTAPI *PFREE_ADAPTER_CHANNEL)(
- _In_ PDMA_ADAPTER DmaAdapter);
+ (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
+ PVOID Context,
+ PDEVICE_NOTIFY_CALLBACK2 NotificationHandler,
+ PVOID NotificationContext);
+ _IRQL_requires_max_(DISPATCH_LEVEL)
typedef VOID
- (NTAPI *PFREE_MAP_REGISTERS)(
- _In_ PDMA_ADAPTER DmaAdapter,
- PVOID MapRegisterBase,
- ULONG NumberOfMapRegisters);
-
- typedef PHYSICAL_ADDRESS
- (NTAPI *PMAP_TRANSFER)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ PMDL Mdl,
- _In_ PVOID MapRegisterBase,
- _In_ PVOID CurrentVa,
- _Inout_ PULONG Length,
- _In_ BOOLEAN WriteToDevice);
+ (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
+ PVOID Context);
- typedef ULONG
- (NTAPI *PGET_DMA_ALIGNMENT)(
- _In_ PDMA_ADAPTER DmaAdapter);
+ typedef struct _ACPI_INTERFACE_STANDARD2 {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PGPE_CONNECT_VECTOR2 GpeConnectVector;
+ PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector;
+ PGPE_ENABLE_EVENT2 GpeEnableEvent;
+ PGPE_DISABLE_EVENT2 GpeDisableEvent;
+ PGPE_CLEAR_STATUS2 GpeClearStatus;
+ PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications;
+ PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications;
+ } ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2;
- typedef ULONG
- (NTAPI *PREAD_DMA_COUNTER)(
- _In_ PDMA_ADAPTER DmaAdapter);
-
- _Function_class_(DRIVER_LIST_CONTROL)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI DRIVER_LIST_CONTROL)(
- _In_ struct _DEVICE_OBJECT *DeviceObject,
- _In_ struct _IRP *Irp,
- _In_ struct _SCATTER_GATHER_LIST *ScatterGather,
- _In_ PVOID Context);
- typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL;
-
- typedef NTSTATUS
- (NTAPI *PGET_SCATTER_GATHER_LIST)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ PDEVICE_OBJECT DeviceObject,
- _In_ PMDL Mdl,
- _In_ PVOID CurrentVa,
- _In_ ULONG Length,
- _In_ PDRIVER_LIST_CONTROL ExecutionRoutine,
- _In_ PVOID Context,
- _In_ BOOLEAN WriteToDevice);
-
- typedef VOID
- (NTAPI *PPUT_SCATTER_GATHER_LIST)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ PSCATTER_GATHER_LIST ScatterGather,
- _In_ BOOLEAN WriteToDevice);
-
- typedef NTSTATUS
- (NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ PMDL Mdl OPTIONAL,
- _In_ PVOID CurrentVa,
- _In_ ULONG Length,
- _Out_ PULONG ScatterGatherListSize,
- _Out_ OPTIONAL PULONG pNumberOfMapRegisters);
-
- typedef NTSTATUS
- (NTAPI *PBUILD_SCATTER_GATHER_LIST)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ PDEVICE_OBJECT DeviceObject,
- _In_ PMDL Mdl,
- _In_ PVOID CurrentVa,
- _In_ ULONG Length,
- _In_ PDRIVER_LIST_CONTROL ExecutionRoutine,
- _In_ PVOID Context,
- _In_ BOOLEAN WriteToDevice,
- _In_ PVOID ScatterGatherBuffer,
- _In_ ULONG ScatterGatherLength);
-
- typedef NTSTATUS
- (NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
- _In_ PDMA_ADAPTER DmaAdapter,
- _In_ PSCATTER_GATHER_LIST ScatterGather,
- _In_ PMDL OriginalMdl,
- _Out_ PMDL *TargetMdl);
-
- typedef struct _DMA_OPERATIONS {
- ULONG Size;
- PPUT_DMA_ADAPTER PutDmaAdapter;
- PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
- PFREE_COMMON_BUFFER FreeCommonBuffer;
- PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
- PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
- PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
- PFREE_MAP_REGISTERS FreeMapRegisters;
- PMAP_TRANSFER MapTransfer;
- PGET_DMA_ALIGNMENT GetDmaAlignment;
- PREAD_DMA_COUNTER ReadDmaCounter;
- PGET_SCATTER_GATHER_LIST GetScatterGatherList;
- PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
- PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
- PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
- PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
- } DMA_OPERATIONS, *PDMA_OPERATIONS;
-
- typedef struct _IO_RESOURCE_DESCRIPTOR {
- UCHAR Option;
- UCHAR Type;
- UCHAR ShareDisposition;
- UCHAR Spare1;
- USHORT Flags;
- USHORT Spare2;
+ #if !defined(_AMD64_) && !defined(_IA64_)
+ #include <pshpack4.h>
+ #endif
+ typedef struct _IO_STACK_LOCATION {
+ UCHAR MajorFunction;
+ UCHAR MinorFunction;
+ UCHAR Flags;
+ UCHAR Control;
union {
struct {
- ULONG Length;
- ULONG Alignment;
- PHYSICAL_ADDRESS MinimumAddress;
- PHYSICAL_ADDRESS MaximumAddress;
- } Port;
+ PIO_SECURITY_CONTEXT SecurityContext;
+ ULONG Options;
+ USHORT POINTER_ALIGNMENT FileAttributes;
+ USHORT ShareAccess;
+ ULONG POINTER_ALIGNMENT EaLength;
+ } Create;
struct {
ULONG Length;
- ULONG Alignment;
- PHYSICAL_ADDRESS MinimumAddress;
- PHYSICAL_ADDRESS MaximumAddress;
- } Memory;
- struct {
- ULONG MinimumVector;
- ULONG MaximumVector;
- } Interrupt;
- struct {
- ULONG MinimumChannel;
- ULONG MaximumChannel;
- } Dma;
+ ULONG POINTER_ALIGNMENT Key;
+ LARGE_INTEGER ByteOffset;
+ } Read;
struct {
ULONG Length;
- ULONG Alignment;
- PHYSICAL_ADDRESS MinimumAddress;
- PHYSICAL_ADDRESS MaximumAddress;
- } Generic;
- struct {
- ULONG Data[3];
- } DevicePrivate;
+ ULONG POINTER_ALIGNMENT Key;
+ LARGE_INTEGER ByteOffset;
+ } Write;
struct {
ULONG Length;
- ULONG MinBusNumber;
- ULONG MaxBusNumber;
- ULONG Reserved;
- } BusNumber;
+ PUNICODE_STRING FileName;
+ FILE_INFORMATION_CLASS FileInformationClass;
+ ULONG FileIndex;
+ } QueryDirectory;
struct {
- ULONG Priority;
- ULONG Reserved1;
- ULONG Reserved2;
- } ConfigData;
- } u;
- } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
-
- typedef struct _IO_RESOURCE_LIST {
- USHORT Version;
- USHORT Revision;
- ULONG Count;
- IO_RESOURCE_DESCRIPTOR Descriptors[1];
- } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
-
- typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
- ULONG ListSize;
- INTERFACE_TYPE InterfaceType;
- ULONG BusNumber;
- ULONG SlotNumber;
- ULONG Reserved[3];
- ULONG AlternativeLists;
- IO_RESOURCE_LIST List[1];
- } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
-
- _Function_class_(DRIVER_CANCEL)
- _Requires_lock_held_(_Global_cancel_spin_lock_)
- _Releases_lock_(_Global_cancel_spin_lock_)
- _IRQL_requires_min_(DISPATCH_LEVEL)
- _IRQL_requires_(DISPATCH_LEVEL)
- typedef VOID
- (NTAPI DRIVER_CANCEL)(
- _Inout_ struct _DEVICE_OBJECT *DeviceObject,
- _Inout_ _IRQL_uses_cancel_ struct _IRP *Irp);
- typedef DRIVER_CANCEL *PDRIVER_CANCEL;
-
- typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP {
- CSHORT Type;
- USHORT Size;
- struct _MDL *MdlAddress;
- ULONG Flags;
- union {
- struct _IRP *MasterIrp;
- volatile LONG IrpCount;
- PVOID SystemBuffer;
- } AssociatedIrp;
- LIST_ENTRY ThreadListEntry;
- IO_STATUS_BLOCK IoStatus;
- KPROCESSOR_MODE RequestorMode;
- BOOLEAN PendingReturned;
- CHAR StackCount;
- CHAR CurrentLocation;
- BOOLEAN Cancel;
- KIRQL CancelIrql;
- CCHAR ApcEnvironment;
- UCHAR AllocationFlags;
- PIO_STATUS_BLOCK UserIosb;
- PKEVENT UserEvent;
- union {
+ ULONG Length;
+ ULONG CompletionFilter;
+ } NotifyDirectory;
struct {
- _ANONYMOUS_UNION union {
- PIO_APC_ROUTINE UserApcRoutine;
- PVOID IssuingProcess;
- } DUMMYUNIONNAME;
- PVOID UserApcContext;
- } AsynchronousParameters;
- LARGE_INTEGER AllocationSize;
- } Overlay;
- volatile PDRIVER_CANCEL CancelRoutine;
- PVOID UserBuffer;
- union {
+ ULONG Length;
+ FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+ } QueryFile;
struct {
+ ULONG Length;
+ FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+ PFILE_OBJECT FileObject;
_ANONYMOUS_UNION union {
- KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
_ANONYMOUS_STRUCT struct {
- PVOID DriverContext[4];
+ BOOLEAN ReplaceIfExists;
+ BOOLEAN AdvanceOnly;
} DUMMYSTRUCTNAME;
+ ULONG ClusterCount;
+ HANDLE DeleteHandle;
} DUMMYUNIONNAME;
- PETHREAD Thread;
- PCHAR AuxiliaryBuffer;
- _ANONYMOUS_STRUCT struct {
- LIST_ENTRY ListEntry;
- _ANONYMOUS_UNION union {
- struct _IO_STACK_LOCATION *CurrentStackLocation;
- ULONG PacketType;
- } DUMMYUNIONNAME;
- } DUMMYSTRUCTNAME;
- struct _FILE_OBJECT *OriginalFileObject;
- } Overlay;
- KAPC Apc;
- PVOID CompletionKey;
- } Tail;
- } IRP, *PIRP;
-
- typedef enum _IO_PAGING_PRIORITY {
- IoPagingPriorityInvalid,
- IoPagingPriorityNormal,
- IoPagingPriorityHigh,
- IoPagingPriorityReserved1,
- IoPagingPriorityReserved2
- } IO_PAGING_PRIORITY;
-
- _Function_class_(IO_COMPLETION_ROUTINE)
- _IRQL_requires_same_
- typedef NTSTATUS
- (NTAPI IO_COMPLETION_ROUTINE)(
- _In_ struct _DEVICE_OBJECT *DeviceObject,
- _In_ struct _IRP *Irp,
- _In_opt_ PVOID Context);
- typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE;
-
- _Function_class_(IO_DPC_ROUTINE)
- _IRQL_always_function_min_(DISPATCH_LEVEL)
- _IRQL_requires_(DISPATCH_LEVEL)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI IO_DPC_ROUTINE)(
- _In_ struct _KDPC *Dpc,
- _In_ struct _DEVICE_OBJECT *DeviceObject,
- _Inout_ struct _IRP *Irp,
- _In_opt_ PVOID Context);
- typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE;
+ } SetFile;
+ struct {
+ ULONG Length;
+ PVOID EaList;
+ ULONG EaListLength;
+ ULONG EaIndex;
+ } QueryEa;
+ struct {
+ ULONG Length;
+ } SetEa;
+ struct {
+ ULONG Length;
+ FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
+ } QueryVolume;
+ struct {
+ ULONG Length;
+ FS_INFORMATION_CLASS FsInformationClass;
+ } SetVolume;
+ struct {
+ ULONG OutputBufferLength;
+ ULONG InputBufferLength;
+ ULONG FsControlCode;
+ PVOID Type3InputBuffer;
+ } FileSystemControl;
+ struct {
+ PLARGE_INTEGER Length;
+ ULONG Key;
+ LARGE_INTEGER ByteOffset;
+ } LockControl;
+ struct {
+ ULONG OutputBufferLength;
+ ULONG POINTER_ALIGNMENT InputBufferLength;
+ ULONG POINTER_ALIGNMENT IoControlCode;
+ PVOID Type3InputBuffer;
+ } DeviceIoControl;
+ struct {
+ SECURITY_INFORMATION SecurityInformation;
+ ULONG POINTER_ALIGNMENT Length;
+ } QuerySecurity;
+ struct {
+ SECURITY_INFORMATION SecurityInformation;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ } SetSecurity;
+ struct {
+ PVPB Vpb;
+ PDEVICE_OBJECT DeviceObject;
+ } MountVolume;
+ struct {
+ PVPB Vpb;
+ PDEVICE_OBJECT DeviceObject;
+ } VerifyVolume;
+ struct {
+ struct _SCSI_REQUEST_BLOCK *Srb;
+ } Scsi;
+ struct {
+ ULONG Length;
+ PSID StartSid;
+ struct _FILE_GET_QUOTA_INFORMATION *SidList;
+ ULONG SidListLength;
+ } QueryQuota;
+ struct {
+ ULONG Length;
+ } SetQuota;
+ struct {
+ DEVICE_RELATION_TYPE Type;
+ } QueryDeviceRelations;
+ struct {
+ CONST GUID *InterfaceType;
+ USHORT Size;
+ USHORT Version;
+ PINTERFACE Interface;
+ PVOID InterfaceSpecificData;
+ } QueryInterface;
+ struct {
+ PDEVICE_CAPABILITIES Capabilities;
+ } DeviceCapabilities;
+ struct {
+ PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
+ } FilterResourceRequirements;
+ struct {
+ ULONG WhichSpace;
+ PVOID Buffer;
+ ULONG Offset;
+ ULONG POINTER_ALIGNMENT Length;
+ } ReadWriteConfig;
+ struct {
+ BOOLEAN Lock;
+ } SetLock;
+ struct {
+ BUS_QUERY_ID_TYPE IdType;
+ } QueryId;
+ struct {
+ DEVICE_TEXT_TYPE DeviceTextType;
+ LCID POINTER_ALIGNMENT LocaleId;
+ } QueryDeviceText;
+ struct {
+ BOOLEAN InPath;
+ BOOLEAN Reserved[3];
+ DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
+ } UsageNotification;
+ struct {
+ SYSTEM_POWER_STATE PowerState;
+ } WaitWake;
+ struct {
+ PPOWER_SEQUENCE PowerSequence;
+ } PowerSequence;
+ struct {
+ ULONG SystemContext;
+ POWER_STATE_TYPE POINTER_ALIGNMENT Type;
+ POWER_STATE POINTER_ALIGNMENT State;
+ POWER_ACTION POINTER_ALIGNMENT ShutdownType;
+ } Power;
+ struct {
+ PCM_RESOURCE_LIST AllocatedResources;
+ PCM_RESOURCE_LIST AllocatedResourcesTranslated;
+ } StartDevice;
+ struct {
+ ULONG_PTR ProviderId;
+ PVOID DataPath;
+ ULONG BufferSize;
+ PVOID Buffer;
+ } WMI;
+ struct {
+ PVOID Argument1;
+ PVOID Argument2;
+ PVOID Argument3;
+ PVOID Argument4;
+ } Others;
+ } Parameters;
+ PDEVICE_OBJECT DeviceObject;
+ PFILE_OBJECT FileObject;
+ PIO_COMPLETION_ROUTINE CompletionRoutine;
+ PVOID Context;
+ } IO_STACK_LOCATION, *PIO_STACK_LOCATION;
+ #if !defined(_AMD64_) && !defined(_IA64_)
+ #include <poppack.h>
+ #endif
- typedef NTSTATUS
- (NTAPI *PMM_DLL_INITIALIZE)(
- _In_ PUNICODE_STRING RegistryPath);
+ /* IO_STACK_LOCATION.Control */
- typedef NTSTATUS
- (NTAPI *PMM_DLL_UNLOAD)(
- VOID);
+ #define SL_PENDING_RETURNED 0x01
+ #define SL_ERROR_RETURNED 0x02
+ #define SL_INVOKE_ON_CANCEL 0x20
+ #define SL_INVOKE_ON_SUCCESS 0x40
+ #define SL_INVOKE_ON_ERROR 0x80
- _Function_class_(IO_TIMER_ROUTINE)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI IO_TIMER_ROUTINE)(
- _In_ struct _DEVICE_OBJECT *DeviceObject,
- _In_opt_ PVOID Context);
- typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
+ #define METHOD_BUFFERED 0
+ #define METHOD_IN_DIRECT 1
+ #define METHOD_OUT_DIRECT 2
+ #define METHOD_NEITHER 3
- typedef struct _IO_SECURITY_CONTEXT {
- PSECURITY_QUALITY_OF_SERVICE SecurityQos;
- PACCESS_STATE AccessState;
- ACCESS_MASK DesiredAccess;
- ULONG FullCreateOptions;
- } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
+ #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
+ #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
- struct _IO_CSQ;
+ #define FILE_SUPERSEDED 0x00000000
+ #define FILE_OPENED 0x00000001
+ #define FILE_CREATED 0x00000002
+ #define FILE_OVERWRITTEN 0x00000003
+ #define FILE_EXISTS 0x00000004
+ #define FILE_DOES_NOT_EXIST 0x00000005
- typedef struct _IO_CSQ_IRP_CONTEXT {
- ULONG Type;
- struct _IRP *Irp;
- struct _IO_CSQ *Csq;
- } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT;
+ #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
+ #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
- typedef VOID
- (NTAPI *PIO_CSQ_INSERT_IRP)(
- _In_ struct _IO_CSQ *Csq,
- _In_ PIRP Irp);
+ /* also in winnt.h */
+ #define FILE_LIST_DIRECTORY 0x00000001
+ #define FILE_READ_DATA 0x00000001
+ #define FILE_ADD_FILE 0x00000002
+ #define FILE_WRITE_DATA 0x00000002
+ #define FILE_ADD_SUBDIRECTORY 0x00000004
+ #define FILE_APPEND_DATA 0x00000004
+ #define FILE_CREATE_PIPE_INSTANCE 0x00000004
+ #define FILE_READ_EA 0x00000008
+ #define FILE_WRITE_EA 0x00000010
+ #define FILE_EXECUTE 0x00000020
+ #define FILE_TRAVERSE 0x00000020
+ #define FILE_DELETE_CHILD 0x00000040
+ #define FILE_READ_ATTRIBUTES 0x00000080
+ #define FILE_WRITE_ATTRIBUTES 0x00000100
- typedef NTSTATUS
- (NTAPI IO_CSQ_INSERT_IRP_EX)(
- _In_ struct _IO_CSQ *Csq,
- _In_ PIRP Irp,
- _In_ PVOID InsertContext);
- typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX;
+ #define FILE_SHARE_READ 0x00000001
+ #define FILE_SHARE_WRITE 0x00000002
+ #define FILE_SHARE_DELETE 0x00000004
+ #define FILE_SHARE_VALID_FLAGS 0x00000007
- typedef VOID
- (NTAPI *PIO_CSQ_REMOVE_IRP)(
- _In_ struct _IO_CSQ *Csq,
- _In_ PIRP Irp);
+ #define FILE_ATTRIBUTE_READONLY 0x00000001
+ #define FILE_ATTRIBUTE_HIDDEN 0x00000002
+ #define FILE_ATTRIBUTE_SYSTEM 0x00000004
+ #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
+ #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
+ #define FILE_ATTRIBUTE_DEVICE 0x00000040
+ #define FILE_ATTRIBUTE_NORMAL 0x00000080
+ #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
+ #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
+ #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
+ #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
+ #define FILE_ATTRIBUTE_OFFLINE 0x00001000
+ #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
+ #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
+ #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
- typedef PIRP
- (NTAPI *PIO_CSQ_PEEK_NEXT_IRP)(
- _In_ struct _IO_CSQ *Csq,
- _In_ PIRP Irp,
- _In_ PVOID PeekContext);
+ #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
+ #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
- typedef VOID
- (NTAPI *PIO_CSQ_ACQUIRE_LOCK)(
- _In_ struct _IO_CSQ *Csq,
- _Out_ PKIRQL Irql);
+ #define FILE_VALID_OPTION_FLAGS 0x00ffffff
+ #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
+ #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
+ #define FILE_VALID_SET_FLAGS 0x00000036
- typedef VOID
- (NTAPI *PIO_CSQ_RELEASE_LOCK)(
- _In_ struct _IO_CSQ *Csq,
- _In_ KIRQL Irql);
-
- typedef VOID
- (NTAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)(
- _In_ struct _IO_CSQ *Csq,
- _In_ PIRP Irp);
+ #define FILE_SUPERSEDE 0x00000000
+ #define FILE_OPEN 0x00000001
+ #define FILE_CREATE 0x00000002
+ #define FILE_OPEN_IF 0x00000003
+ #define FILE_OVERWRITE 0x00000004
+ #define FILE_OVERWRITE_IF 0x00000005
+ #define FILE_MAXIMUM_DISPOSITION 0x00000005
- typedef struct _IO_CSQ {
- ULONG Type;
- PIO_CSQ_INSERT_IRP CsqInsertIrp;
- PIO_CSQ_REMOVE_IRP CsqRemoveIrp;
- PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp;
- PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock;
- PIO_CSQ_RELEASE_LOCK CsqReleaseLock;
- PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp;
- PVOID ReservePointer;
- } IO_CSQ, *PIO_CSQ;
+ #define FILE_DIRECTORY_FILE 0x00000001
+ #define FILE_WRITE_THROUGH 0x00000002
+ #define FILE_SEQUENTIAL_ONLY 0x00000004
+ #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
+ #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
+ #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
+ #define FILE_NON_DIRECTORY_FILE 0x00000040
+ #define FILE_CREATE_TREE_CONNECTION 0x00000080
+ #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
+ #define FILE_NO_EA_KNOWLEDGE 0x00000200
+ #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
+ #define FILE_RANDOM_ACCESS 0x00000800
+ #define FILE_DELETE_ON_CLOSE 0x00001000
+ #define FILE_OPEN_BY_FILE_ID 0x00002000
+ #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
+ #define FILE_NO_COMPRESSION 0x00008000
+ #if (NTDDI_VERSION >= NTDDI_WIN7)
+ #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
+ #define FILE_DISALLOW_EXCLUSIVE 0x00020000
+ #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+ #define FILE_RESERVE_OPFILTER 0x00100000
+ #define FILE_OPEN_REPARSE_POINT 0x00200000
+ #define FILE_OPEN_NO_RECALL 0x00400000
+ #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
- typedef enum _BUS_QUERY_ID_TYPE {
- BusQueryDeviceID,
- BusQueryHardwareIDs,
- BusQueryCompatibleIDs,
- BusQueryInstanceID,
- BusQueryDeviceSerialNumber
- } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
+ #define FILE_ANY_ACCESS 0x00000000
+ #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
+ #define FILE_READ_ACCESS 0x00000001
+ #define FILE_WRITE_ACCESS 0x00000002
- typedef enum _DEVICE_TEXT_TYPE {
- DeviceTextDescription,
- DeviceTextLocationInformation
- } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
+ #define FILE_ALL_ACCESS \
+ (STANDARD_RIGHTS_REQUIRED | \
+ SYNCHRONIZE | \
+ 0x1FF)
- typedef BOOLEAN
- (NTAPI *PGPE_SERVICE_ROUTINE)(
- PVOID,
- PVOID);
+ #define FILE_GENERIC_EXECUTE \
+ (STANDARD_RIGHTS_EXECUTE | \
+ FILE_READ_ATTRIBUTES | \
+ FILE_EXECUTE | \
+ SYNCHRONIZE)
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_CONNECT_VECTOR)(
- PDEVICE_OBJECT,
- ULONG,
- KINTERRUPT_MODE,
- BOOLEAN,
- PGPE_SERVICE_ROUTINE,
- PVOID,
- PVOID);
+ #define FILE_GENERIC_READ \
+ (STANDARD_RIGHTS_READ | \
+ FILE_READ_DATA | \
+ FILE_READ_ATTRIBUTES | \
+ FILE_READ_EA | \
+ SYNCHRONIZE)
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_DISCONNECT_VECTOR)(
- PVOID);
+ #define FILE_GENERIC_WRITE \
+ (STANDARD_RIGHTS_WRITE | \
+ FILE_WRITE_DATA | \
+ FILE_WRITE_ATTRIBUTES | \
+ FILE_WRITE_EA | \
+ FILE_APPEND_DATA | \
+ SYNCHRONIZE)
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_ENABLE_EVENT)(
- PDEVICE_OBJECT,
- PVOID);
+ /* end winnt.h */
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_DISABLE_EVENT)(
- PDEVICE_OBJECT,
- PVOID);
+ #define WMIREG_ACTION_REGISTER 1
+ #define WMIREG_ACTION_DEREGISTER 2
+ #define WMIREG_ACTION_REREGISTER 3
+ #define WMIREG_ACTION_UPDATE_GUIDS 4
+ #define WMIREG_ACTION_BLOCK_IRPS 5
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_CLEAR_STATUS)(
- PDEVICE_OBJECT,
- PVOID);
+ #define WMIREGISTER 0
+ #define WMIUPDATE 1
+ _Function_class_(WMI_NOTIFICATION_CALLBACK)
+ _IRQL_requires_same_
typedef VOID
- (NTAPI *PDEVICE_NOTIFY_CALLBACK)(
- PVOID,
- ULONG);
+ (NTAPI FWMI_NOTIFICATION_CALLBACK)(
+ PVOID Wnode,
+ PVOID Context);
+ typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK;
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)(
- PDEVICE_OBJECT,
- PDEVICE_NOTIFY_CALLBACK,
- PVOID);
+ #ifndef _PCI_X_
+ #define _PCI_X_
- _IRQL_requires_max_(DISPATCH_LEVEL)
- typedef VOID
- (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)(
- PDEVICE_OBJECT,
- PDEVICE_NOTIFY_CALLBACK);
+ typedef struct _PCI_SLOT_NUMBER {
+ union {
+ struct {
+ ULONG DeviceNumber:5;
+ ULONG FunctionNumber:3;
+ ULONG Reserved:24;
+ } bits;
+ ULONG AsULONG;
+ } u;
+ } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
- typedef struct _ACPI_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PGPE_CONNECT_VECTOR GpeConnectVector;
- PGPE_DISCONNECT_VECTOR GpeDisconnectVector;
- PGPE_ENABLE_EVENT GpeEnableEvent;
- PGPE_DISABLE_EVENT GpeDisableEvent;
- PGPE_CLEAR_STATUS GpeClearStatus;
- PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications;
- PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications;
- } ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD;
+ #define PCI_TYPE0_ADDRESSES 6
+ #define PCI_TYPE1_ADDRESSES 2
+ #define PCI_TYPE2_ADDRESSES 5
- typedef BOOLEAN
- (NTAPI *PGPE_SERVICE_ROUTINE2)(
- PVOID ObjectContext,
- PVOID ServiceContext);
+ typedef struct _PCI_COMMON_HEADER {
+ PCI_COMMON_HEADER_LAYOUT
+ } PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_CONNECT_VECTOR2)(
- PVOID Context,
- ULONG GpeNumber,
- KINTERRUPT_MODE Mode,
- BOOLEAN Shareable,
- PGPE_SERVICE_ROUTINE ServiceRoutine,
- PVOID ServiceContext,
- PVOID *ObjectContext);
+ #ifdef __cplusplus
+ typedef struct _PCI_COMMON_CONFIG {
+ PCI_COMMON_HEADER_LAYOUT
+ UCHAR DeviceSpecific[192];
+ } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+ #else
+ typedef struct _PCI_COMMON_CONFIG {
+ PCI_COMMON_HEADER DUMMYSTRUCTNAME;
+ UCHAR DeviceSpecific[192];
+ } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
+ #endif
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_DISCONNECT_VECTOR2)(
- PVOID Context,
- PVOID ObjectContext);
+ #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_ENABLE_EVENT2)(
- PVOID Context,
- PVOID ObjectContext);
+ #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_DISABLE_EVENT2)(
- PVOID Context,
- PVOID ObjectContext);
+ #define PCI_MAX_DEVICES 32
+ #define PCI_MAX_FUNCTION 8
+ #define PCI_MAX_BRIDGE_NUMBER 0xFF
+ #define PCI_INVALID_VENDORID 0xFFFF
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PGPE_CLEAR_STATUS2)(
- PVOID Context,
- PVOID ObjectContext);
+ /* PCI_COMMON_CONFIG.HeaderType */
+ #define PCI_MULTIFUNCTION 0x80
+ #define PCI_DEVICE_TYPE 0x00
+ #define PCI_BRIDGE_TYPE 0x01
+ #define PCI_CARDBUS_BRIDGE_TYPE 0x02
- _IRQL_requires_max_(DISPATCH_LEVEL)
- typedef VOID
- (NTAPI *PDEVICE_NOTIFY_CALLBACK2)(
- PVOID NotificationContext,
- ULONG NotifyCode);
+ #define PCI_CONFIGURATION_TYPE(PciData) \
+ (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
- PVOID Context,
- PDEVICE_NOTIFY_CALLBACK2 NotificationHandler,
- PVOID NotificationContext);
+ #define PCI_MULTIFUNCTION_DEVICE(PciData) \
+ ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
- _IRQL_requires_max_(DISPATCH_LEVEL)
- typedef VOID
- (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
- PVOID Context);
+ /* PCI_COMMON_CONFIG.Command */
+ #define PCI_ENABLE_IO_SPACE 0x0001
+ #define PCI_ENABLE_MEMORY_SPACE 0x0002
+ #define PCI_ENABLE_BUS_MASTER 0x0004
+ #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
+ #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
+ #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
+ #define PCI_ENABLE_PARITY 0x0040
+ #define PCI_ENABLE_WAIT_CYCLE 0x0080
+ #define PCI_ENABLE_SERR 0x0100
+ #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
+ #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
- typedef struct _ACPI_INTERFACE_STANDARD2 {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PGPE_CONNECT_VECTOR2 GpeConnectVector;
- PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector;
- PGPE_ENABLE_EVENT2 GpeEnableEvent;
- PGPE_DISABLE_EVENT2 GpeDisableEvent;
- PGPE_CLEAR_STATUS2 GpeClearStatus;
- PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications;
- PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications;
- } ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2;
+ /* PCI_COMMON_CONFIG.Status */
+ #define PCI_STATUS_INTERRUPT_PENDING 0x0008
+ #define PCI_STATUS_CAPABILITIES_LIST 0x0010
+ #define PCI_STATUS_66MHZ_CAPABLE 0x0020
+ #define PCI_STATUS_UDF_SUPPORTED 0x0040
+ #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
+ #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
+ #define PCI_STATUS_DEVSEL 0x0600
+ #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
+ #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
+ #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
+ #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
+ #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
- #if !defined(_AMD64_) && !defined(_IA64_)
- #include <pshpack4.h>
- #endif
- typedef struct _IO_STACK_LOCATION {
- UCHAR MajorFunction;
- UCHAR MinorFunction;
- UCHAR Flags;
- UCHAR Control;
+ /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
+
+ #define PCI_WHICHSPACE_CONFIG 0x0
+ #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
+
+ #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
+ #define PCI_CAPABILITY_ID_AGP 0x02
+ #define PCI_CAPABILITY_ID_VPD 0x03
+ #define PCI_CAPABILITY_ID_SLOT_ID 0x04
+ #define PCI_CAPABILITY_ID_MSI 0x05
+ #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
+ #define PCI_CAPABILITY_ID_PCIX 0x07
+ #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
+ #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
+ #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
+ #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
+ #define PCI_CAPABILITY_ID_SHPC 0x0C
+ #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
+ #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
+ #define PCI_CAPABILITY_ID_SECURE 0x0F
+ #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
+ #define PCI_CAPABILITY_ID_MSIX 0x11
+
+ typedef struct _PCI_CAPABILITIES_HEADER {
+ UCHAR CapabilityID;
+ UCHAR Next;
+ } PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER;
+
+ typedef struct _PCI_PMC {
+ UCHAR Version:3;
+ UCHAR PMEClock:1;
+ UCHAR Rsvd1:1;
+ UCHAR DeviceSpecificInitialization:1;
+ UCHAR Rsvd2:2;
+ struct _PM_SUPPORT {
+ UCHAR Rsvd2:1;
+ UCHAR D1:1;
+ UCHAR D2:1;
+ UCHAR PMED0:1;
+ UCHAR PMED1:1;
+ UCHAR PMED2:1;
+ UCHAR PMED3Hot:1;
+ UCHAR PMED3Cold:1;
+ } Support;
+ } PCI_PMC, *PPCI_PMC;
+
+ typedef struct _PCI_PMCSR {
+ USHORT PowerState:2;
+ USHORT Rsvd1:6;
+ USHORT PMEEnable:1;
+ USHORT DataSelect:4;
+ USHORT DataScale:2;
+ USHORT PMEStatus:1;
+ } PCI_PMCSR, *PPCI_PMCSR;
+
+ typedef struct _PCI_PMCSR_BSE {
+ UCHAR Rsvd1:6;
+ UCHAR D3HotSupportsStopClock:1;
+ UCHAR BusPowerClockControlEnabled:1;
+ } PCI_PMCSR_BSE, *PPCI_PMCSR_BSE;
+
+ typedef struct _PCI_PM_CAPABILITY {
+ PCI_CAPABILITIES_HEADER Header;
+ union {
+ PCI_PMC Capabilities;
+ USHORT AsUSHORT;
+ } PMC;
+ union {
+ PCI_PMCSR ControlStatus;
+ USHORT AsUSHORT;
+ } PMCSR;
+ union {
+ PCI_PMCSR_BSE BridgeSupport;
+ UCHAR AsUCHAR;
+ } PMCSR_BSE;
+ UCHAR Data;
+ } PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY;
+
+ typedef struct {
+ PCI_CAPABILITIES_HEADER Header;
union {
struct {
- PIO_SECURITY_CONTEXT SecurityContext;
- ULONG Options;
- USHORT POINTER_ALIGNMENT FileAttributes;
- USHORT ShareAccess;
- ULONG POINTER_ALIGNMENT EaLength;
- } Create;
- struct {
- ULONG Length;
- ULONG POINTER_ALIGNMENT Key;
- LARGE_INTEGER ByteOffset;
- } Read;
- struct {
- ULONG Length;
- ULONG POINTER_ALIGNMENT Key;
- LARGE_INTEGER ByteOffset;
- } Write;
- struct {
- ULONG Length;
- PUNICODE_STRING FileName;
- FILE_INFORMATION_CLASS FileInformationClass;
- ULONG FileIndex;
- } QueryDirectory;
- struct {
- ULONG Length;
- ULONG CompletionFilter;
- } NotifyDirectory;
- struct {
- ULONG Length;
- FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
- } QueryFile;
- struct {
- ULONG Length;
- FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
- PFILE_OBJECT FileObject;
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- BOOLEAN ReplaceIfExists;
- BOOLEAN AdvanceOnly;
- } DUMMYSTRUCTNAME;
- ULONG ClusterCount;
- HANDLE DeleteHandle;
- } DUMMYUNIONNAME;
- } SetFile;
- struct {
- ULONG Length;
- PVOID EaList;
- ULONG EaListLength;
- ULONG EaIndex;
- } QueryEa;
- struct {
- ULONG Length;
- } SetEa;
- struct {
- ULONG Length;
- FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
- } QueryVolume;
- struct {
- ULONG Length;
- FS_INFORMATION_CLASS FsInformationClass;
- } SetVolume;
- struct {
- ULONG OutputBufferLength;
- ULONG InputBufferLength;
- ULONG FsControlCode;
- PVOID Type3InputBuffer;
- } FileSystemControl;
- struct {
- PLARGE_INTEGER Length;
- ULONG Key;
- LARGE_INTEGER ByteOffset;
- } LockControl;
- struct {
- ULONG OutputBufferLength;
- ULONG POINTER_ALIGNMENT InputBufferLength;
- ULONG POINTER_ALIGNMENT IoControlCode;
- PVOID Type3InputBuffer;
- } DeviceIoControl;
- struct {
- SECURITY_INFORMATION SecurityInformation;
- ULONG POINTER_ALIGNMENT Length;
- } QuerySecurity;
- struct {
- SECURITY_INFORMATION SecurityInformation;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- } SetSecurity;
- struct {
- PVPB Vpb;
- PDEVICE_OBJECT DeviceObject;
- } MountVolume;
- struct {
- PVPB Vpb;
- PDEVICE_OBJECT DeviceObject;
- } VerifyVolume;
- struct {
- struct _SCSI_REQUEST_BLOCK *Srb;
- } Scsi;
- struct {
- ULONG Length;
- PSID StartSid;
- struct _FILE_GET_QUOTA_INFORMATION *SidList;
- ULONG SidListLength;
- } QueryQuota;
- struct {
- ULONG Length;
- } SetQuota;
- struct {
- DEVICE_RELATION_TYPE Type;
- } QueryDeviceRelations;
+ USHORT DataParityErrorRecoveryEnable:1;
+ USHORT EnableRelaxedOrdering:1;
+ USHORT MaxMemoryReadByteCount:2;
+ USHORT MaxOutstandingSplitTransactions:3;
+ USHORT Reserved:9;
+ } bits;
+ USHORT AsUSHORT;
+ } Command;
+ union {
struct {
- CONST GUID *InterfaceType;
- USHORT Size;
- USHORT Version;
- PINTERFACE Interface;
- PVOID InterfaceSpecificData;
- } QueryInterface;
- struct {
- PDEVICE_CAPABILITIES Capabilities;
- } DeviceCapabilities;
- struct {
- PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
- } FilterResourceRequirements;
- struct {
- ULONG WhichSpace;
- PVOID Buffer;
- ULONG Offset;
- ULONG POINTER_ALIGNMENT Length;
- } ReadWriteConfig;
- struct {
- BOOLEAN Lock;
- } SetLock;
- struct {
- BUS_QUERY_ID_TYPE IdType;
- } QueryId;
- struct {
- DEVICE_TEXT_TYPE DeviceTextType;
- LCID POINTER_ALIGNMENT LocaleId;
- } QueryDeviceText;
- struct {
- BOOLEAN InPath;
- BOOLEAN Reserved[3];
- DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
- } UsageNotification;
- struct {
- SYSTEM_POWER_STATE PowerState;
- } WaitWake;
- struct {
- PPOWER_SEQUENCE PowerSequence;
- } PowerSequence;
- struct {
- ULONG SystemContext;
- POWER_STATE_TYPE POINTER_ALIGNMENT Type;
- POWER_STATE POINTER_ALIGNMENT State;
- POWER_ACTION POINTER_ALIGNMENT ShutdownType;
- } Power;
- struct {
- PCM_RESOURCE_LIST AllocatedResources;
- PCM_RESOURCE_LIST AllocatedResourcesTranslated;
- } StartDevice;
- struct {
- ULONG_PTR ProviderId;
- PVOID DataPath;
- ULONG BufferSize;
- PVOID Buffer;
- } WMI;
- struct {
- PVOID Argument1;
- PVOID Argument2;
- PVOID Argument3;
- PVOID Argument4;
- } Others;
- } Parameters;
- PDEVICE_OBJECT DeviceObject;
- PFILE_OBJECT FileObject;
- PIO_COMPLETION_ROUTINE CompletionRoutine;
- PVOID Context;
- } IO_STACK_LOCATION, *PIO_STACK_LOCATION;
- #if !defined(_AMD64_) && !defined(_IA64_)
- #include <poppack.h>
- #endif
+ ULONG FunctionNumber:3;
+ ULONG DeviceNumber:5;
+ ULONG BusNumber:8;
+ ULONG Device64Bit:1;
+ ULONG Capable133MHz:1;
+ ULONG SplitCompletionDiscarded:1;
+ ULONG UnexpectedSplitCompletion:1;
+ ULONG DeviceComplexity:1;
+ ULONG DesignedMaxMemoryReadByteCount:2;
+ ULONG DesignedMaxOutstandingSplitTransactions:3;
+ ULONG DesignedMaxCumulativeReadSize:3;
+ ULONG ReceivedSplitCompletionErrorMessage:1;
+ ULONG CapablePCIX266:1;
+ ULONG CapablePCIX533:1;
+ } bits;
+ ULONG AsULONG;
+ } Status;
+ } PCI_X_CAPABILITY, *PPCI_X_CAPABILITY;
- /* IO_STACK_LOCATION.Control */
+ #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
+ #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
+ #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
+ #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
+ #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
+ #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
+ #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
+ #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
+ #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
+ #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
+ #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
- #define SL_PENDING_RETURNED 0x01
- #define SL_ERROR_RETURNED 0x02
- #define SL_INVOKE_ON_CANCEL 0x20
- #define SL_INVOKE_ON_SUCCESS 0x40
- #define SL_INVOKE_ON_ERROR 0x80
+ typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER {
+ USHORT CapabilityID;
+ USHORT Version:4;
+ USHORT Next:12;
+ } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER;
- #define METHOD_BUFFERED 0
- #define METHOD_IN_DIRECT 1
- #define METHOD_OUT_DIRECT 2
- #define METHOD_NEITHER 3
+ typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY {
+ PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+ ULONG LowSerialNumber;
+ ULONG HighSerialNumber;
+ } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY;
- #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
- #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
+ typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS {
+ _ANONYMOUS_STRUCT struct {
+ ULONG Undefined:1;
+ ULONG Reserved1:3;
+ ULONG DataLinkProtocolError:1;
+ ULONG SurpriseDownError:1;
+ ULONG Reserved2:6;
+ ULONG PoisonedTLP:1;
+ ULONG FlowControlProtocolError:1;
+ ULONG CompletionTimeout:1;
+ ULONG CompleterAbort:1;
+ ULONG UnexpectedCompletion:1;
+ ULONG ReceiverOverflow:1;
+ ULONG MalformedTLP:1;
+ ULONG ECRCError:1;
+ ULONG UnsupportedRequestError:1;
+ ULONG Reserved3:11;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS;
- #define FILE_SUPERSEDED 0x00000000
- #define FILE_OPENED 0x00000001
- #define FILE_CREATED 0x00000002
- #define FILE_OVERWRITTEN 0x00000003
- #define FILE_EXISTS 0x00000004
- #define FILE_DOES_NOT_EXIST 0x00000005
+ typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK {
+ _ANONYMOUS_STRUCT struct {
+ ULONG Undefined:1;
+ ULONG Reserved1:3;
+ ULONG DataLinkProtocolError:1;
+ ULONG SurpriseDownError:1;
+ ULONG Reserved2:6;
+ ULONG PoisonedTLP:1;
+ ULONG FlowControlProtocolError:1;
+ ULONG CompletionTimeout:1;
+ ULONG CompleterAbort:1;
+ ULONG UnexpectedCompletion:1;
+ ULONG ReceiverOverflow:1;
+ ULONG MalformedTLP:1;
+ ULONG ECRCError:1;
+ ULONG UnsupportedRequestError:1;
+ ULONG Reserved3:11;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK;
+
+ typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY {
+ _ANONYMOUS_STRUCT struct {
+ ULONG Undefined:1;
+ ULONG Reserved1:3;
+ ULONG DataLinkProtocolError:1;
+ ULONG SurpriseDownError:1;
+ ULONG Reserved2:6;
+ ULONG PoisonedTLP:1;
+ ULONG FlowControlProtocolError:1;
+ ULONG CompletionTimeout:1;
+ ULONG CompleterAbort:1;
+ ULONG UnexpectedCompletion:1;
+ ULONG ReceiverOverflow:1;
+ ULONG MalformedTLP:1;
+ ULONG ECRCError:1;
+ ULONG UnsupportedRequestError:1;
+ ULONG Reserved3:11;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY;
+
+ typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS {
+ _ANONYMOUS_STRUCT struct {
+ ULONG ReceiverError:1;
+ ULONG Reserved1:5;
+ ULONG BadTLP:1;
+ ULONG BadDLLP:1;
+ ULONG ReplayNumRollover:1;
+ ULONG Reserved2:3;
+ ULONG ReplayTimerTimeout:1;
+ ULONG AdvisoryNonFatalError:1;
+ ULONG Reserved3:18;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS;
+
+ typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK {
+ _ANONYMOUS_STRUCT struct {
+ ULONG ReceiverError:1;
+ ULONG Reserved1:5;
+ ULONG BadTLP:1;
+ ULONG BadDLLP:1;
+ ULONG ReplayNumRollover:1;
+ ULONG Reserved2:3;
+ ULONG ReplayTimerTimeout:1;
+ ULONG AdvisoryNonFatalError:1;
+ ULONG Reserved3:18;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK;
+
+ typedef union _PCI_EXPRESS_AER_CAPABILITIES {
+ _ANONYMOUS_STRUCT struct {
+ ULONG FirstErrorPointer:5;
+ ULONG ECRCGenerationCapable:1;
+ ULONG ECRCGenerationEnable:1;
+ ULONG ECRCCheckCapable:1;
+ ULONG ECRCCheckEnable:1;
+ ULONG Reserved:23;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES;
+
+ typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND {
+ _ANONYMOUS_STRUCT struct {
+ ULONG CorrectableErrorReportingEnable:1;
+ ULONG NonFatalErrorReportingEnable:1;
+ ULONG FatalErrorReportingEnable:1;
+ ULONG Reserved:29;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND;
+
+ typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS {
+ _ANONYMOUS_STRUCT struct {
+ ULONG CorrectableErrorReceived:1;
+ ULONG MultipleCorrectableErrorsReceived:1;
+ ULONG UncorrectableErrorReceived:1;
+ ULONG MultipleUncorrectableErrorsReceived:1;
+ ULONG FirstUncorrectableFatal:1;
+ ULONG NonFatalErrorMessagesReceived:1;
+ ULONG FatalErrorMessagesReceived:1;
+ ULONG Reserved:20;
+ ULONG AdvancedErrorInterruptMessageNumber:5;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS;
+
+ typedef union _PCI_EXPRESS_ERROR_SOURCE_ID {
+ _ANONYMOUS_STRUCT struct {
+ USHORT CorrectableSourceIdFun:3;
+ USHORT CorrectableSourceIdDev:5;
+ USHORT CorrectableSourceIdBus:8;
+ USHORT UncorrectableSourceIdFun:3;
+ USHORT UncorrectableSourceIdDev:5;
+ USHORT UncorrectableSourceIdBus:8;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID;
+
+ typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS {
+ _ANONYMOUS_STRUCT struct {
+ ULONG TargetAbortOnSplitCompletion:1;
+ ULONG MasterAbortOnSplitCompletion:1;
+ ULONG ReceivedTargetAbort:1;
+ ULONG ReceivedMasterAbort:1;
+ ULONG RsvdZ:1;
+ ULONG UnexpectedSplitCompletionError:1;
+ ULONG UncorrectableSplitCompletion:1;
+ ULONG UncorrectableDataError:1;
+ ULONG UncorrectableAttributeError:1;
+ ULONG UncorrectableAddressError:1;
+ ULONG DelayedTransactionDiscardTimerExpired:1;
+ ULONG PERRAsserted:1;
+ ULONG SERRAsserted:1;
+ ULONG InternalBridgeError:1;
+ ULONG Reserved:18;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS;
+
+ typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK {
+ _ANONYMOUS_STRUCT struct {
+ ULONG TargetAbortOnSplitCompletion:1;
+ ULONG MasterAbortOnSplitCompletion:1;
+ ULONG ReceivedTargetAbort:1;
+ ULONG ReceivedMasterAbort:1;
+ ULONG RsvdZ:1;
+ ULONG UnexpectedSplitCompletionError:1;
+ ULONG UncorrectableSplitCompletion:1;
+ ULONG UncorrectableDataError:1;
+ ULONG UncorrectableAttributeError:1;
+ ULONG UncorrectableAddressError:1;
+ ULONG DelayedTransactionDiscardTimerExpired:1;
+ ULONG PERRAsserted:1;
+ ULONG SERRAsserted:1;
+ ULONG InternalBridgeError:1;
+ ULONG Reserved:18;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK;
+
+ typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY {
+ _ANONYMOUS_STRUCT struct {
+ ULONG TargetAbortOnSplitCompletion:1;
+ ULONG MasterAbortOnSplitCompletion:1;
+ ULONG ReceivedTargetAbort:1;
+ ULONG ReceivedMasterAbort:1;
+ ULONG RsvdZ:1;
+ ULONG UnexpectedSplitCompletionError:1;
+ ULONG UncorrectableSplitCompletion:1;
+ ULONG UncorrectableDataError:1;
+ ULONG UncorrectableAttributeError:1;
+ ULONG UncorrectableAddressError:1;
+ ULONG DelayedTransactionDiscardTimerExpired:1;
+ ULONG PERRAsserted:1;
+ ULONG SERRAsserted:1;
+ ULONG InternalBridgeError:1;
+ ULONG Reserved:18;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY;
+
+ typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES {
+ _ANONYMOUS_STRUCT struct {
+ ULONG SecondaryUncorrectableFirstErrorPtr:5;
+ ULONG Reserved:27;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES;
+
+ #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
+ #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
+ #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
- #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
- #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
+ #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
+ (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
+ ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
+ ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
- /* also in winnt.h */
- #define FILE_LIST_DIRECTORY 0x00000001
- #define FILE_READ_DATA 0x00000001
- #define FILE_ADD_FILE 0x00000002
- #define FILE_WRITE_DATA 0x00000002
- #define FILE_ADD_SUBDIRECTORY 0x00000004
- #define FILE_APPEND_DATA 0x00000004
- #define FILE_CREATE_PIPE_INSTANCE 0x00000004
- #define FILE_READ_EA 0x00000008
- #define FILE_WRITE_EA 0x00000010
- #define FILE_EXECUTE 0x00000020
- #define FILE_TRAVERSE 0x00000020
- #define FILE_DELETE_CHILD 0x00000040
- #define FILE_READ_ATTRIBUTES 0x00000080
- #define FILE_WRITE_ATTRIBUTES 0x00000100
+ typedef struct _PCI_EXPRESS_AER_CAPABILITY {
+ PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+ PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
+ PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
+ PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
+ PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
+ PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
+ PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
+ ULONG HeaderLog[4];
+ PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
+ PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
+ PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
+ PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
+ ULONG SecHeaderLog[4];
+ } PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY;
- #define FILE_SHARE_READ 0x00000001
- #define FILE_SHARE_WRITE 0x00000002
- #define FILE_SHARE_DELETE 0x00000004
- #define FILE_SHARE_VALID_FLAGS 0x00000007
+ typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY {
+ PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+ PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
+ PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
+ PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
+ PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
+ PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
+ PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
+ ULONG HeaderLog[4];
+ PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand;
+ PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus;
+ PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId;
+ } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY;
- #define FILE_ATTRIBUTE_READONLY 0x00000001
- #define FILE_ATTRIBUTE_HIDDEN 0x00000002
- #define FILE_ATTRIBUTE_SYSTEM 0x00000004
- #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
- #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
- #define FILE_ATTRIBUTE_DEVICE 0x00000040
- #define FILE_ATTRIBUTE_NORMAL 0x00000080
- #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
- #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
- #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
- #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
- #define FILE_ATTRIBUTE_OFFLINE 0x00001000
- #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
- #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
- #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
+ typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY {
+ PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+ PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
+ PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
+ PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
+ PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
+ PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
+ PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
+ ULONG HeaderLog[4];
+ PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
+ PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
+ PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
+ PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
+ ULONG SecHeaderLog[4];
+ } PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY;
- #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
- #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
+ typedef union _PCI_EXPRESS_SRIOV_CAPS {
+ _ANONYMOUS_STRUCT struct {
+ ULONG VFMigrationCapable:1;
+ ULONG Reserved1:20;
+ ULONG VFMigrationInterruptNumber:11;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS;
- #define FILE_VALID_OPTION_FLAGS 0x00ffffff
- #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
- #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
- #define FILE_VALID_SET_FLAGS 0x00000036
+ typedef union _PCI_EXPRESS_SRIOV_CONTROL {
+ _ANONYMOUS_STRUCT struct {
+ USHORT VFEnable:1;
+ USHORT VFMigrationEnable:1;
+ USHORT VFMigrationInterruptEnable:1;
+ USHORT VFMemorySpaceEnable:1;
+ USHORT ARICapableHierarchy:1;
+ USHORT Reserved1:11;
+ } DUMMYSTRUCTNAME;
+ USHORT AsUSHORT;
+ } PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL;
- #define FILE_SUPERSEDE 0x00000000
- #define FILE_OPEN 0x00000001
- #define FILE_CREATE 0x00000002
- #define FILE_OPEN_IF 0x00000003
- #define FILE_OVERWRITE 0x00000004
- #define FILE_OVERWRITE_IF 0x00000005
- #define FILE_MAXIMUM_DISPOSITION 0x00000005
+ typedef union _PCI_EXPRESS_SRIOV_STATUS {
+ _ANONYMOUS_STRUCT struct {
+ USHORT VFMigrationStatus:1;
+ USHORT Reserved1:15;
+ } DUMMYSTRUCTNAME;
+ USHORT AsUSHORT;
+ } PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS;
- #define FILE_DIRECTORY_FILE 0x00000001
- #define FILE_WRITE_THROUGH 0x00000002
- #define FILE_SEQUENTIAL_ONLY 0x00000004
- #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
- #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
- #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
- #define FILE_NON_DIRECTORY_FILE 0x00000040
- #define FILE_CREATE_TREE_CONNECTION 0x00000080
- #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
- #define FILE_NO_EA_KNOWLEDGE 0x00000200
- #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
- #define FILE_RANDOM_ACCESS 0x00000800
- #define FILE_DELETE_ON_CLOSE 0x00001000
- #define FILE_OPEN_BY_FILE_ID 0x00002000
- #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
- #define FILE_NO_COMPRESSION 0x00008000
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
- #define FILE_DISALLOW_EXCLUSIVE 0x00020000
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- #define FILE_RESERVE_OPFILTER 0x00100000
- #define FILE_OPEN_REPARSE_POINT 0x00200000
- #define FILE_OPEN_NO_RECALL 0x00400000
- #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
+ typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY {
+ _ANONYMOUS_STRUCT struct {
+ ULONG VFMigrationStateBIR:3;
+ ULONG VFMigrationStateOffset:29;
+ } DUMMYSTRUCTNAME;
+ ULONG AsULONG;
+ } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY;
- #define FILE_ANY_ACCESS 0x00000000
- #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
- #define FILE_READ_ACCESS 0x00000001
- #define FILE_WRITE_ACCESS 0x00000002
+ typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY {
+ PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
+ PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities;
+ PCI_EXPRESS_SRIOV_CONTROL SRIOVControl;
+ PCI_EXPRESS_SRIOV_STATUS SRIOVStatus;
+ USHORT InitialVFs;
+ USHORT TotalVFs;
+ USHORT NumVFs;
+ UCHAR FunctionDependencyLink;
+ UCHAR RsvdP1;
+ USHORT FirstVFOffset;
+ USHORT VFStride;
+ USHORT RsvdP2;
+ USHORT VFDeviceId;
+ ULONG SupportedPageSizes;
+ ULONG SystemPageSize;
+ ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
+ PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset;
+ } PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY;
- #define FILE_ALL_ACCESS \
- (STANDARD_RIGHTS_REQUIRED | \
- SYNCHRONIZE | \
- 0x1FF)
+ /* PCI device classes */
+ #define PCI_CLASS_PRE_20 0x00
+ #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
+ #define PCI_CLASS_NETWORK_CTLR 0x02
+ #define PCI_CLASS_DISPLAY_CTLR 0x03
+ #define PCI_CLASS_MULTIMEDIA_DEV 0x04
+ #define PCI_CLASS_MEMORY_CTLR 0x05
+ #define PCI_CLASS_BRIDGE_DEV 0x06
+ #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
+ #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
+ #define PCI_CLASS_INPUT_DEV 0x09
+ #define PCI_CLASS_DOCKING_STATION 0x0a
+ #define PCI_CLASS_PROCESSOR 0x0b
+ #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
+ #define PCI_CLASS_WIRELESS_CTLR 0x0d
+ #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
+ #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
+ #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
+ #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
+ #define PCI_CLASS_NOT_DEFINED 0xff
- #define FILE_GENERIC_EXECUTE \
- (STANDARD_RIGHTS_EXECUTE | \
- FILE_READ_ATTRIBUTES | \
- FILE_EXECUTE | \
- SYNCHRONIZE)
+ /* PCI device subclasses for class 0 */
+ #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
+ #define PCI_SUBCLASS_PRE_20_VGA 0x01
- #define FILE_GENERIC_READ \
- (STANDARD_RIGHTS_READ | \
- FILE_READ_DATA | \
- FILE_READ_ATTRIBUTES | \
- FILE_READ_EA | \
- SYNCHRONIZE)
+ /* PCI device subclasses for class 1 (mass storage controllers)*/
+ #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
+ #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
+ #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
+ #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
+ #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
+ #define PCI_SUBCLASS_MSC_OTHER 0x80
- #define FILE_GENERIC_WRITE \
- (STANDARD_RIGHTS_WRITE | \
- FILE_WRITE_DATA | \
- FILE_WRITE_ATTRIBUTES | \
- FILE_WRITE_EA | \
- FILE_APPEND_DATA | \
- SYNCHRONIZE)
+ /* PCI device subclasses for class 2 (network controllers)*/
+ #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
+ #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
+ #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
+ #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
+ #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
+ #define PCI_SUBCLASS_NET_OTHER 0x80
- /* end winnt.h */
+ /* PCI device subclasses for class 3 (display controllers)*/
+ #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
+ #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
+ #define PCI_SUBCLASS_VID_3D_CTLR 0x02
+ #define PCI_SUBCLASS_VID_OTHER 0x80
- #define WMIREG_ACTION_REGISTER 1
- #define WMIREG_ACTION_DEREGISTER 2
- #define WMIREG_ACTION_REREGISTER 3
- #define WMIREG_ACTION_UPDATE_GUIDS 4
- #define WMIREG_ACTION_BLOCK_IRPS 5
+ /* PCI device subclasses for class 4 (multimedia device)*/
+ #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
+ #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
+ #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
+ #define PCI_SUBCLASS_MM_OTHER 0x80
+
+ /* PCI device subclasses for class 5 (memory controller)*/
+ #define PCI_SUBCLASS_MEM_RAM 0x00
+ #define PCI_SUBCLASS_MEM_FLASH 0x01
+ #define PCI_SUBCLASS_MEM_OTHER 0x80
- #define WMIREGISTER 0
- #define WMIUPDATE 1
+ /* PCI device subclasses for class 6 (bridge device)*/
+ #define PCI_SUBCLASS_BR_HOST 0x00
+ #define PCI_SUBCLASS_BR_ISA 0x01
+ #define PCI_SUBCLASS_BR_EISA 0x02
+ #define PCI_SUBCLASS_BR_MCA 0x03
+ #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
+ #define PCI_SUBCLASS_BR_PCMCIA 0x05
+ #define PCI_SUBCLASS_BR_NUBUS 0x06
+ #define PCI_SUBCLASS_BR_CARDBUS 0x07
+ #define PCI_SUBCLASS_BR_RACEWAY 0x08
+ #define PCI_SUBCLASS_BR_OTHER 0x80
- _Function_class_(WMI_NOTIFICATION_CALLBACK)
- _IRQL_requires_same_
- typedef VOID
- (NTAPI FWMI_NOTIFICATION_CALLBACK)(
- PVOID Wnode,
- PVOID Context);
- typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK;
+ #define PCI_SUBCLASS_COM_SERIAL 0x00
+ #define PCI_SUBCLASS_COM_PARALLEL 0x01
+ #define PCI_SUBCLASS_COM_MULTIPORT 0x02
+ #define PCI_SUBCLASS_COM_MODEM 0x03
+ #define PCI_SUBCLASS_COM_OTHER 0x80
- #ifndef _PCI_X_
- #define _PCI_X_
+ #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
+ #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
+ #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
+ #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
+ #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
+ #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
+ #define PCI_SUBCLASS_SYS_OTHER 0x80
- typedef struct _PCI_SLOT_NUMBER {
- union {
- struct {
- ULONG DeviceNumber:5;
- ULONG FunctionNumber:3;
- ULONG Reserved:24;
- } bits;
- ULONG AsULONG;
- } u;
- } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
+ #define PCI_SUBCLASS_INP_KEYBOARD 0x00
+ #define PCI_SUBCLASS_INP_DIGITIZER 0x01
+ #define PCI_SUBCLASS_INP_MOUSE 0x02
+ #define PCI_SUBCLASS_INP_SCANNER 0x03
+ #define PCI_SUBCLASS_INP_GAMEPORT 0x04
+ #define PCI_SUBCLASS_INP_OTHER 0x80
- #define PCI_TYPE0_ADDRESSES 6
- #define PCI_TYPE1_ADDRESSES 2
- #define PCI_TYPE2_ADDRESSES 5
+ #define PCI_SUBCLASS_DOC_GENERIC 0x00
+ #define PCI_SUBCLASS_DOC_OTHER 0x80
- typedef struct _PCI_COMMON_HEADER {
- PCI_COMMON_HEADER_LAYOUT
- } PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
+ #define PCI_SUBCLASS_PROC_386 0x00
+ #define PCI_SUBCLASS_PROC_486 0x01
+ #define PCI_SUBCLASS_PROC_PENTIUM 0x02
+ #define PCI_SUBCLASS_PROC_ALPHA 0x10
+ #define PCI_SUBCLASS_PROC_POWERPC 0x20
+ #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
- #ifdef __cplusplus
- typedef struct _PCI_COMMON_CONFIG {
- PCI_COMMON_HEADER_LAYOUT
- UCHAR DeviceSpecific[192];
- } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
- #else
- typedef struct _PCI_COMMON_CONFIG {
- PCI_COMMON_HEADER DUMMYSTRUCTNAME;
- UCHAR DeviceSpecific[192];
- } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
- #endif
+ /* PCI device subclasses for class C (serial bus controller)*/
+ #define PCI_SUBCLASS_SB_IEEE1394 0x00
+ #define PCI_SUBCLASS_SB_ACCESS 0x01
+ #define PCI_SUBCLASS_SB_SSA 0x02
+ #define PCI_SUBCLASS_SB_USB 0x03
+ #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
+ #define PCI_SUBCLASS_SB_SMBUS 0x05
- #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
+ #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
+ #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
+ #define PCI_SUBCLASS_WIRELESS_RF 0x10
+ #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
- #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
+ #define PCI_SUBCLASS_INTIO_I2O 0x00
- #define PCI_MAX_DEVICES 32
- #define PCI_MAX_FUNCTION 8
- #define PCI_MAX_BRIDGE_NUMBER 0xFF
- #define PCI_INVALID_VENDORID 0xFFFF
+ #define PCI_SUBCLASS_SAT_TV 0x01
+ #define PCI_SUBCLASS_SAT_AUDIO 0x02
+ #define PCI_SUBCLASS_SAT_VOICE 0x03
+ #define PCI_SUBCLASS_SAT_DATA 0x04
- /* PCI_COMMON_CONFIG.HeaderType */
- #define PCI_MULTIFUNCTION 0x80
- #define PCI_DEVICE_TYPE 0x00
- #define PCI_BRIDGE_TYPE 0x01
- #define PCI_CARDBUS_BRIDGE_TYPE 0x02
+ #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
+ #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
+ #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
- #define PCI_CONFIGURATION_TYPE(PciData) \
- (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
+ #define PCI_SUBCLASS_DASP_DPIO 0x00
+ #define PCI_SUBCLASS_DASP_OTHER 0x80
- #define PCI_MULTIFUNCTION_DEVICE(PciData) \
- ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
+ #define PCI_ADDRESS_IO_SPACE 0x00000001
+ #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
+ #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
+ #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
+ #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
+ #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
- /* PCI_COMMON_CONFIG.Command */
- #define PCI_ENABLE_IO_SPACE 0x0001
- #define PCI_ENABLE_MEMORY_SPACE 0x0002
- #define PCI_ENABLE_BUS_MASTER 0x0004
- #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
- #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
- #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
- #define PCI_ENABLE_PARITY 0x0040
- #define PCI_ENABLE_WAIT_CYCLE 0x0080
- #define PCI_ENABLE_SERR 0x0100
- #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
- #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
+ #define PCI_TYPE_32BIT 0
+ #define PCI_TYPE_20BIT 2
+ #define PCI_TYPE_64BIT 4
- /* PCI_COMMON_CONFIG.Status */
- #define PCI_STATUS_INTERRUPT_PENDING 0x0008
- #define PCI_STATUS_CAPABILITIES_LIST 0x0010
- #define PCI_STATUS_66MHZ_CAPABLE 0x0020
- #define PCI_STATUS_UDF_SUPPORTED 0x0040
- #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
- #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
- #define PCI_STATUS_DEVSEL 0x0600
- #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
- #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
- #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
- #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
- #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
+ #define PCI_ROMADDRESS_ENABLED 0x00000001
- /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
+ #endif /* _PCI_X_ */
- #define PCI_WHICHSPACE_CONFIG 0x0
- #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
+ #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
- #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
- #define PCI_CAPABILITY_ID_AGP 0x02
- #define PCI_CAPABILITY_ID_VPD 0x03
- #define PCI_CAPABILITY_ID_SLOT_ID 0x04
- #define PCI_CAPABILITY_ID_MSI 0x05
- #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
- #define PCI_CAPABILITY_ID_PCIX 0x07
- #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
- #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
- #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
- #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
- #define PCI_CAPABILITY_ID_SHPC 0x0C
- #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
- #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
- #define PCI_CAPABILITY_ID_SECURE 0x0F
- #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
- #define PCI_CAPABILITY_ID_MSIX 0x11
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)(
+ _Inout_ PVOID Context);
+ typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE;
- typedef struct _PCI_CAPABILITIES_HEADER {
- UCHAR CapabilityID;
- UCHAR Next;
- } PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER;
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)(
+ _Inout_ PVOID Context);
+ typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE;
- typedef struct _PCI_PMC {
- UCHAR Version:3;
- UCHAR PMEClock:1;
- UCHAR Rsvd1:1;
- UCHAR DeviceSpecificInitialization:1;
- UCHAR Rsvd2:2;
- struct _PM_SUPPORT {
- UCHAR Rsvd2:1;
- UCHAR D1:1;
- UCHAR D2:1;
- UCHAR PMED0:1;
- UCHAR PMED1:1;
- UCHAR PMED2:1;
- UCHAR PMED3Hot:1;
- UCHAR PMED3Cold:1;
- } Support;
- } PCI_PMC, *PPCI_PMC;
+ typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode;
+ PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode;
+ } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE;
- typedef struct _PCI_PMCSR {
- USHORT PowerState:2;
- USHORT Rsvd1:6;
- USHORT PMEEnable:1;
- USHORT DataSelect:4;
- USHORT DataScale:2;
- USHORT PMEStatus:1;
- } PCI_PMCSR, *PPCI_PMCSR;
+ #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
- typedef struct _PCI_PMCSR_BSE {
- UCHAR Rsvd1:6;
- UCHAR D3HotSupportsStopClock:1;
- UCHAR BusPowerClockControlEnabled:1;
- } PCI_PMCSR_BSE, *PPCI_PMCSR_BSE;
+ typedef ULONG
+ (NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)(
+ _In_ PVOID Context,
+ _Out_writes_bytes_(Length) PVOID Buffer,
+ _In_ ULONG Offset,
+ _In_ ULONG Length);
- typedef struct _PCI_PM_CAPABILITY {
- PCI_CAPABILITIES_HEADER Header;
- union {
- PCI_PMC Capabilities;
- USHORT AsUSHORT;
- } PMC;
- union {
- PCI_PMCSR ControlStatus;
- USHORT AsUSHORT;
- } PMCSR;
- union {
- PCI_PMCSR_BSE BridgeSupport;
- UCHAR AsUCHAR;
- } PMCSR_BSE;
- UCHAR Data;
- } PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY;
+ typedef ULONG
+ (NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)(
+ _In_ PVOID Context,
+ _In_reads_bytes_(Length) PVOID Buffer,
+ _In_ ULONG Offset,
+ _In_ ULONG Length);
+
+ typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace;
+ PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace;
+ } PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE;
- typedef struct {
- PCI_CAPABILITIES_HEADER Header;
- union {
- struct {
- USHORT DataParityErrorRecoveryEnable:1;
- USHORT EnableRelaxedOrdering:1;
- USHORT MaxMemoryReadByteCount:2;
- USHORT MaxOutstandingSplitTransactions:3;
- USHORT Reserved:9;
- } bits;
- USHORT AsUSHORT;
- } Command;
- union {
- struct {
- ULONG FunctionNumber:3;
- ULONG DeviceNumber:5;
- ULONG BusNumber:8;
- ULONG Device64Bit:1;
- ULONG Capable133MHz:1;
- ULONG SplitCompletionDiscarded:1;
- ULONG UnexpectedSplitCompletion:1;
- ULONG DeviceComplexity:1;
- ULONG DesignedMaxMemoryReadByteCount:2;
- ULONG DesignedMaxOutstandingSplitTransactions:3;
- ULONG DesignedMaxCumulativeReadSize:3;
- ULONG ReceivedSplitCompletionErrorMessage:1;
- ULONG CapablePCIX266:1;
- ULONG CapablePCIX533:1;
- } bits;
- ULONG AsULONG;
- } Status;
- } PCI_X_CAPABILITY, *PPCI_X_CAPABILITY;
+ #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
- #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
- #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
- #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
- #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
- #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
- #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
- #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
- #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
- #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
- #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
- #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI PCI_MSIX_SET_ENTRY)(
+ _In_ PVOID Context,
+ _In_ ULONG TableEntry,
+ _In_ ULONG MessageNumber);
+ typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY;
- typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER {
- USHORT CapabilityID;
- USHORT Version:4;
- USHORT Next:12;
- } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER;
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI PCI_MSIX_MASKUNMASK_ENTRY)(
+ _In_ PVOID Context,
+ _In_ ULONG TableEntry);
+ typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY;
- typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- ULONG LowSerialNumber;
- ULONG HighSerialNumber;
- } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY;
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI PCI_MSIX_GET_ENTRY)(
+ _In_ PVOID Context,
+ _In_ ULONG TableEntry,
+ _Out_ PULONG MessageNumber,
+ _Out_ PBOOLEAN Masked);
+ typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY;
- typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS {
- _ANONYMOUS_STRUCT struct {
- ULONG Undefined:1;
- ULONG Reserved1:3;
- ULONG DataLinkProtocolError:1;
- ULONG SurpriseDownError:1;
- ULONG Reserved2:6;
- ULONG PoisonedTLP:1;
- ULONG FlowControlProtocolError:1;
- ULONG CompletionTimeout:1;
- ULONG CompleterAbort:1;
- ULONG UnexpectedCompletion:1;
- ULONG ReceiverOverflow:1;
- ULONG MalformedTLP:1;
- ULONG ECRCError:1;
- ULONG UnsupportedRequestError:1;
- ULONG Reserved3:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS;
+ _Must_inspect_result_
+ typedef NTSTATUS
+ (NTAPI PCI_MSIX_GET_TABLE_SIZE)(
+ _In_ PVOID Context,
+ _Out_ PULONG TableSize);
+ typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE;
- typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK {
- _ANONYMOUS_STRUCT struct {
- ULONG Undefined:1;
- ULONG Reserved1:3;
- ULONG DataLinkProtocolError:1;
- ULONG SurpriseDownError:1;
- ULONG Reserved2:6;
- ULONG PoisonedTLP:1;
- ULONG FlowControlProtocolError:1;
- ULONG CompletionTimeout:1;
- ULONG CompleterAbort:1;
- ULONG UnexpectedCompletion:1;
- ULONG ReceiverOverflow:1;
- ULONG MalformedTLP:1;
- ULONG ECRCError:1;
- ULONG UnsupportedRequestError:1;
- ULONG Reserved3:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK;
+ typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+ PPCI_MSIX_SET_ENTRY SetTableEntry;
+ PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry;
+ PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry;
+ PPCI_MSIX_GET_ENTRY GetTableEntry;
+ PPCI_MSIX_GET_TABLE_SIZE GetTableSize;
+ } PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE;
- typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY {
- _ANONYMOUS_STRUCT struct {
- ULONG Undefined:1;
- ULONG Reserved1:3;
- ULONG DataLinkProtocolError:1;
- ULONG SurpriseDownError:1;
- ULONG Reserved2:6;
- ULONG PoisonedTLP:1;
- ULONG FlowControlProtocolError:1;
- ULONG CompletionTimeout:1;
- ULONG CompleterAbort:1;
- ULONG UnexpectedCompletion:1;
- ULONG ReceiverOverflow:1;
- ULONG MalformedTLP:1;
- ULONG ECRCError:1;
- ULONG UnsupportedRequestError:1;
- ULONG Reserved3:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY;
+ #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
+ RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
- typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS {
- _ANONYMOUS_STRUCT struct {
- ULONG ReceiverError:1;
- ULONG Reserved1:5;
- ULONG BadTLP:1;
- ULONG BadDLLP:1;
- ULONG ReplayNumRollover:1;
- ULONG Reserved2:3;
- ULONG ReplayTimerTimeout:1;
- ULONG AdvisoryNonFatalError:1;
- ULONG Reserved3:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS;
+ /******************************************************************************
+ * Object Manager Types *
+ ******************************************************************************/
- typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK {
- _ANONYMOUS_STRUCT struct {
- ULONG ReceiverError:1;
- ULONG Reserved1:5;
- ULONG BadTLP:1;
- ULONG BadDLLP:1;
- ULONG ReplayNumRollover:1;
- ULONG Reserved2:3;
- ULONG ReplayTimerTimeout:1;
- ULONG AdvisoryNonFatalError:1;
- ULONG Reserved3:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK;
+ #define MAXIMUM_FILENAME_LENGTH 256
+ #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
- typedef union _PCI_EXPRESS_AER_CAPABILITIES {
- _ANONYMOUS_STRUCT struct {
- ULONG FirstErrorPointer:5;
- ULONG ECRCGenerationCapable:1;
- ULONG ECRCGenerationEnable:1;
- ULONG ECRCCheckCapable:1;
- ULONG ECRCCheckEnable:1;
- ULONG Reserved:23;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES;
+ #define OBJECT_TYPE_CREATE 0x0001
+ #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
- typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND {
- _ANONYMOUS_STRUCT struct {
- ULONG CorrectableErrorReportingEnable:1;
- ULONG NonFatalErrorReportingEnable:1;
- ULONG FatalErrorReportingEnable:1;
- ULONG Reserved:29;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND;
+ #define DIRECTORY_QUERY 0x0001
+ #define DIRECTORY_TRAVERSE 0x0002
+ #define DIRECTORY_CREATE_OBJECT 0x0004
+ #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
+ #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
- typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS {
- _ANONYMOUS_STRUCT struct {
- ULONG CorrectableErrorReceived:1;
- ULONG MultipleCorrectableErrorsReceived:1;
- ULONG UncorrectableErrorReceived:1;
- ULONG MultipleUncorrectableErrorsReceived:1;
- ULONG FirstUncorrectableFatal:1;
- ULONG NonFatalErrorMessagesReceived:1;
- ULONG FatalErrorMessagesReceived:1;
- ULONG Reserved:20;
- ULONG AdvancedErrorInterruptMessageNumber:5;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS;
+ #define SYMBOLIC_LINK_QUERY 0x0001
+ #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
- typedef union _PCI_EXPRESS_ERROR_SOURCE_ID {
- _ANONYMOUS_STRUCT struct {
- USHORT CorrectableSourceIdFun:3;
- USHORT CorrectableSourceIdDev:5;
- USHORT CorrectableSourceIdBus:8;
- USHORT UncorrectableSourceIdFun:3;
- USHORT UncorrectableSourceIdDev:5;
- USHORT UncorrectableSourceIdBus:8;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID;
+ #define DUPLICATE_CLOSE_SOURCE 0x00000001
+ #define DUPLICATE_SAME_ACCESS 0x00000002
+ #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
+
+ #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
+ #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
- typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS {
- _ANONYMOUS_STRUCT struct {
- ULONG TargetAbortOnSplitCompletion:1;
- ULONG MasterAbortOnSplitCompletion:1;
- ULONG ReceivedTargetAbort:1;
- ULONG ReceivedMasterAbort:1;
- ULONG RsvdZ:1;
- ULONG UnexpectedSplitCompletionError:1;
- ULONG UncorrectableSplitCompletion:1;
- ULONG UncorrectableDataError:1;
- ULONG UncorrectableAttributeError:1;
- ULONG UncorrectableAddressError:1;
- ULONG DelayedTransactionDiscardTimerExpired:1;
- ULONG PERRAsserted:1;
- ULONG SERRAsserted:1;
- ULONG InternalBridgeError:1;
- ULONG Reserved:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS;
+ typedef ULONG OB_OPERATION;
- typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK {
- _ANONYMOUS_STRUCT struct {
- ULONG TargetAbortOnSplitCompletion:1;
- ULONG MasterAbortOnSplitCompletion:1;
- ULONG ReceivedTargetAbort:1;
- ULONG ReceivedMasterAbort:1;
- ULONG RsvdZ:1;
- ULONG UnexpectedSplitCompletionError:1;
- ULONG UncorrectableSplitCompletion:1;
- ULONG UncorrectableDataError:1;
- ULONG UncorrectableAttributeError:1;
- ULONG UncorrectableAddressError:1;
- ULONG DelayedTransactionDiscardTimerExpired:1;
- ULONG PERRAsserted:1;
- ULONG SERRAsserted:1;
- ULONG InternalBridgeError:1;
- ULONG Reserved:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK;
+ #define OB_OPERATION_HANDLE_CREATE 0x00000001
+ #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
- typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY {
- _ANONYMOUS_STRUCT struct {
- ULONG TargetAbortOnSplitCompletion:1;
- ULONG MasterAbortOnSplitCompletion:1;
- ULONG ReceivedTargetAbort:1;
- ULONG ReceivedMasterAbort:1;
- ULONG RsvdZ:1;
- ULONG UnexpectedSplitCompletionError:1;
- ULONG UncorrectableSplitCompletion:1;
- ULONG UncorrectableDataError:1;
- ULONG UncorrectableAttributeError:1;
- ULONG UncorrectableAddressError:1;
- ULONG DelayedTransactionDiscardTimerExpired:1;
- ULONG PERRAsserted:1;
- ULONG SERRAsserted:1;
- ULONG InternalBridgeError:1;
- ULONG Reserved:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY;
+ typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION {
+ _Inout_ ACCESS_MASK DesiredAccess;
+ _In_ ACCESS_MASK OriginalDesiredAccess;
+ } OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION;
- typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES {
- _ANONYMOUS_STRUCT struct {
- ULONG SecondaryUncorrectableFirstErrorPtr:5;
- ULONG Reserved:27;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES;
+ typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION {
+ _Inout_ ACCESS_MASK DesiredAccess;
+ _In_ ACCESS_MASK OriginalDesiredAccess;
+ _In_ PVOID SourceProcess;
+ _In_ PVOID TargetProcess;
+ } OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION;
- #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
- #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
- #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
+ typedef union _OB_PRE_OPERATION_PARAMETERS {
+ _Inout_ OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation;
+ _Inout_ OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
+ } OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS;
- #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
- (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
- ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
- ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
+ typedef struct _OB_PRE_OPERATION_INFORMATION {
+ _In_ OB_OPERATION Operation;
+ _ANONYMOUS_UNION union {
+ _In_ ULONG Flags;
+ _ANONYMOUS_STRUCT struct {
+ _In_ ULONG KernelHandle:1;
+ _In_ ULONG Reserved:31;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ _In_ PVOID Object;
+ _In_ POBJECT_TYPE ObjectType;
+ _Out_ PVOID CallContext;
+ _In_ POB_PRE_OPERATION_PARAMETERS Parameters;
+ } OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION;
- typedef struct _PCI_EXPRESS_AER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
- PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
- PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
- PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
- ULONG HeaderLog[4];
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
- PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
- ULONG SecHeaderLog[4];
- } PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY;
+ typedef struct _OB_POST_CREATE_HANDLE_INFORMATION {
+ _In_ ACCESS_MASK GrantedAccess;
+ } OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION;
- typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
- PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
- PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
- PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
- ULONG HeaderLog[4];
- PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand;
- PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus;
- PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId;
- } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY;
+ typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION {
+ _In_ ACCESS_MASK GrantedAccess;
+ } OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION;
- typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
- PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
- PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
- PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
- ULONG HeaderLog[4];
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
- PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
- ULONG SecHeaderLog[4];
- } PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY;
+ typedef union _OB_POST_OPERATION_PARAMETERS {
+ _In_ OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation;
+ _In_ OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
+ } OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS;
- typedef union _PCI_EXPRESS_SRIOV_CAPS {
- _ANONYMOUS_STRUCT struct {
- ULONG VFMigrationCapable:1;
- ULONG Reserved1:20;
- ULONG VFMigrationInterruptNumber:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS;
+ typedef struct _OB_POST_OPERATION_INFORMATION {
+ _In_ OB_OPERATION Operation;
+ _ANONYMOUS_UNION union {
+ _In_ ULONG Flags;
+ _ANONYMOUS_STRUCT struct {
+ _In_ ULONG KernelHandle:1;
+ _In_ ULONG Reserved:31;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ _In_ PVOID Object;
+ _In_ POBJECT_TYPE ObjectType;
+ _In_ PVOID CallContext;
+ _In_ NTSTATUS ReturnStatus;
+ _In_ POB_POST_OPERATION_PARAMETERS Parameters;
+ } OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION;
- typedef union _PCI_EXPRESS_SRIOV_CONTROL {
- _ANONYMOUS_STRUCT struct {
- USHORT VFEnable:1;
- USHORT VFMigrationEnable:1;
- USHORT VFMigrationInterruptEnable:1;
- USHORT VFMemorySpaceEnable:1;
- USHORT ARICapableHierarchy:1;
- USHORT Reserved1:11;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
- } PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL;
+ typedef enum _OB_PREOP_CALLBACK_STATUS {
+ OB_PREOP_SUCCESS
+ } OB_PREOP_CALLBACK_STATUS, *POB_PREOP_CALLBACK_STATUS;
- typedef union _PCI_EXPRESS_SRIOV_STATUS {
- _ANONYMOUS_STRUCT struct {
- USHORT VFMigrationStatus:1;
- USHORT Reserved1:15;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
- } PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS;
+ typedef OB_PREOP_CALLBACK_STATUS
+ (NTAPI *POB_PRE_OPERATION_CALLBACK)(
+ _In_ PVOID RegistrationContext,
+ _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation);
- typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY {
- _ANONYMOUS_STRUCT struct {
- ULONG VFMigrationStateBIR:3;
- ULONG VFMigrationStateOffset:29;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY;
+ typedef VOID
+ (NTAPI *POB_POST_OPERATION_CALLBACK)(
+ _In_ PVOID RegistrationContext,
+ _In_ POB_POST_OPERATION_INFORMATION OperationInformation);
- typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities;
- PCI_EXPRESS_SRIOV_CONTROL SRIOVControl;
- PCI_EXPRESS_SRIOV_STATUS SRIOVStatus;
- USHORT InitialVFs;
- USHORT TotalVFs;
- USHORT NumVFs;
- UCHAR FunctionDependencyLink;
- UCHAR RsvdP1;
- USHORT FirstVFOffset;
- USHORT VFStride;
- USHORT RsvdP2;
- USHORT VFDeviceId;
- ULONG SupportedPageSizes;
- ULONG SystemPageSize;
- ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
- PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset;
- } PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY;
+ typedef struct _OB_OPERATION_REGISTRATION {
+ _In_ POBJECT_TYPE *ObjectType;
+ _In_ OB_OPERATION Operations;
+ _In_ POB_PRE_OPERATION_CALLBACK PreOperation;
+ _In_ POB_POST_OPERATION_CALLBACK PostOperation;
+ } OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION;
+
+ typedef struct _OB_CALLBACK_REGISTRATION {
+ _In_ USHORT Version;
+ _In_ USHORT OperationRegistrationCount;
+ _In_ UNICODE_STRING Altitude;
+ _In_ PVOID RegistrationContext;
+ _In_ OB_OPERATION_REGISTRATION *OperationRegistration;
+ } OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION;
+
+ typedef struct _OBJECT_NAME_INFORMATION {
+ UNICODE_STRING Name;
+ } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+
+ /* Exported object types */
+ extern POBJECT_TYPE NTSYSAPI CmKeyObjectType;
+ extern POBJECT_TYPE NTSYSAPI ExEventObjectType;
+ extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType;
+ extern POBJECT_TYPE NTSYSAPI IoFileObjectType;
+ extern POBJECT_TYPE NTSYSAPI PsThreadType;
+ extern POBJECT_TYPE NTSYSAPI SeTokenObjectType;
+ extern POBJECT_TYPE NTSYSAPI PsProcessType;
- /* PCI device classes */
- #define PCI_CLASS_PRE_20 0x00
- #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
- #define PCI_CLASS_NETWORK_CTLR 0x02
- #define PCI_CLASS_DISPLAY_CTLR 0x03
- #define PCI_CLASS_MULTIMEDIA_DEV 0x04
- #define PCI_CLASS_MEMORY_CTLR 0x05
- #define PCI_CLASS_BRIDGE_DEV 0x06
- #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
- #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
- #define PCI_CLASS_INPUT_DEV 0x09
- #define PCI_CLASS_DOCKING_STATION 0x0a
- #define PCI_CLASS_PROCESSOR 0x0b
- #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
- #define PCI_CLASS_WIRELESS_CTLR 0x0d
- #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
- #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
- #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
- #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
- #define PCI_CLASS_NOT_DEFINED 0xff
- /* PCI device subclasses for class 0 */
- #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
- #define PCI_SUBCLASS_PRE_20_VGA 0x01
+ /******************************************************************************
+ * Process Manager Types *
+ ******************************************************************************/
- /* PCI device subclasses for class 1 (mass storage controllers)*/
- #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
- #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
- #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
- #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
- #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
- #define PCI_SUBCLASS_MSC_OTHER 0x80
+ #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
+ #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
+ #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
+ #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
+ #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
- /* PCI device subclasses for class 2 (network controllers)*/
- #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
- #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
- #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
- #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
- #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
- #define PCI_SUBCLASS_NET_OTHER 0x80
+ /* Thread Access Rights */
+ #define THREAD_TERMINATE 0x0001
+ #define THREAD_SUSPEND_RESUME 0x0002
+ #define THREAD_ALERT 0x0004
+ #define THREAD_GET_CONTEXT 0x0008
+ #define THREAD_SET_CONTEXT 0x0010
+ #define THREAD_SET_INFORMATION 0x0020
+ #define THREAD_SET_LIMITED_INFORMATION 0x0400
+ #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
- /* PCI device subclasses for class 3 (display controllers)*/
- #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
- #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
- #define PCI_SUBCLASS_VID_3D_CTLR 0x02
- #define PCI_SUBCLASS_VID_OTHER 0x80
+ #define PROCESS_DUP_HANDLE (0x0040)
- /* PCI device subclasses for class 4 (multimedia device)*/
- #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
- #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
- #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
- #define PCI_SUBCLASS_MM_OTHER 0x80
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
+ #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
+ #else
+ #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
+ #endif
- /* PCI device subclasses for class 5 (memory controller)*/
- #define PCI_SUBCLASS_MEM_RAM 0x00
- #define PCI_SUBCLASS_MEM_FLASH 0x01
- #define PCI_SUBCLASS_MEM_OTHER 0x80
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
+ #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
+ #else
+ #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
+ #endif
- /* PCI device subclasses for class 6 (bridge device)*/
- #define PCI_SUBCLASS_BR_HOST 0x00
- #define PCI_SUBCLASS_BR_ISA 0x01
- #define PCI_SUBCLASS_BR_EISA 0x02
- #define PCI_SUBCLASS_BR_MCA 0x03
- #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
- #define PCI_SUBCLASS_BR_PCMCIA 0x05
- #define PCI_SUBCLASS_BR_NUBUS 0x06
- #define PCI_SUBCLASS_BR_CARDBUS 0x07
- #define PCI_SUBCLASS_BR_RACEWAY 0x08
- #define PCI_SUBCLASS_BR_OTHER 0x80
+ #define LOW_PRIORITY 0
+ #define LOW_REALTIME_PRIORITY 16
+ #define HIGH_PRIORITY 31
+ #define MAXIMUM_PRIORITY 32
- #define PCI_SUBCLASS_COM_SERIAL 0x00
- #define PCI_SUBCLASS_COM_PARALLEL 0x01
- #define PCI_SUBCLASS_COM_MULTIPORT 0x02
- #define PCI_SUBCLASS_COM_MODEM 0x03
- #define PCI_SUBCLASS_COM_OTHER 0x80
- #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
- #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
- #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
- #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
- #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
- #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
- #define PCI_SUBCLASS_SYS_OTHER 0x80
+ /******************************************************************************
+ * WMI Library Support Types *
+ ******************************************************************************/
- #define PCI_SUBCLASS_INP_KEYBOARD 0x00
- #define PCI_SUBCLASS_INP_DIGITIZER 0x01
- #define PCI_SUBCLASS_INP_MOUSE 0x02
- #define PCI_SUBCLASS_INP_SCANNER 0x03
- #define PCI_SUBCLASS_INP_GAMEPORT 0x04
- #define PCI_SUBCLASS_INP_OTHER 0x80
+ #ifdef RUN_WPP
+ #include <evntrace.h>
+ #include <stdarg.h>
+ #endif
- #define PCI_SUBCLASS_DOC_GENERIC 0x00
- #define PCI_SUBCLASS_DOC_OTHER 0x80
+ #ifndef _TRACEHANDLE_DEFINED
+ #define _TRACEHANDLE_DEFINED
+ typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
+ #endif
- #define PCI_SUBCLASS_PROC_386 0x00
- #define PCI_SUBCLASS_PROC_486 0x01
- #define PCI_SUBCLASS_PROC_PENTIUM 0x02
- #define PCI_SUBCLASS_PROC_ALPHA 0x10
- #define PCI_SUBCLASS_PROC_POWERPC 0x20
- #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
+ #ifndef TRACE_INFORMATION_CLASS_DEFINE
- /* PCI device subclasses for class C (serial bus controller)*/
- #define PCI_SUBCLASS_SB_IEEE1394 0x00
- #define PCI_SUBCLASS_SB_ACCESS 0x01
- #define PCI_SUBCLASS_SB_SSA 0x02
- #define PCI_SUBCLASS_SB_USB 0x03
- #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
- #define PCI_SUBCLASS_SB_SMBUS 0x05
+ typedef struct _ETW_TRACE_SESSION_SETTINGS {
+ ULONG Version;
+ ULONG BufferSize;
+ ULONG MinimumBuffers;
+ ULONG MaximumBuffers;
+ ULONG LoggerMode;
+ ULONG FlushTimer;
+ ULONG FlushThreshold;
+ ULONG ClockType;
+ } ETW_TRACE_SESSION_SETTINGS, *PETW_TRACE_SESSION_SETTINGS;
- #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
- #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
- #define PCI_SUBCLASS_WIRELESS_RF 0x10
- #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
+ typedef enum _TRACE_INFORMATION_CLASS {
+ TraceIdClass,
+ TraceHandleClass,
+ TraceEnableFlagsClass,
+ TraceEnableLevelClass,
+ GlobalLoggerHandleClass,
+ EventLoggerHandleClass,
+ AllLoggerHandlesClass,
+ TraceHandleByNameClass,
+ LoggerEventsLostClass,
+ TraceSessionSettingsClass,
+ LoggerEventsLoggedClass,
+ MaxTraceInformationClass
+ } TRACE_INFORMATION_CLASS;
- #define PCI_SUBCLASS_INTIO_I2O 0x00
+ #endif /* TRACE_INFORMATION_CLASS_DEFINE */
- #define PCI_SUBCLASS_SAT_TV 0x01
- #define PCI_SUBCLASS_SAT_AUDIO 0x02
- #define PCI_SUBCLASS_SAT_VOICE 0x03
- #define PCI_SUBCLASS_SAT_DATA 0x04
+ #ifndef _ETW_KM_
+ #define _ETW_KM_
+ #endif
- #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
- #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
- #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
+ #include <evntprov.h>
- #define PCI_SUBCLASS_DASP_DPIO 0x00
- #define PCI_SUBCLASS_DASP_OTHER 0x80
+ _IRQL_requires_same_
+ typedef VOID
+ (NTAPI *PETWENABLECALLBACK)(
+ _In_ LPCGUID SourceId,
+ _In_ ULONG ControlCode,
+ _In_ UCHAR Level,
+ _In_ ULONGLONG MatchAnyKeyword,
+ _In_ ULONGLONG MatchAllKeyword,
+ _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData,
+ _Inout_opt_ PVOID CallbackContext);
- #define PCI_ADDRESS_IO_SPACE 0x00000001
- #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
- #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
- #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
- #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
- #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
+ #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
- #define PCI_TYPE_32BIT 0
- #define PCI_TYPE_20BIT 2
- #define PCI_TYPE_64BIT 4
- #define PCI_ROMADDRESS_ENABLED 0x00000001
+ /******************************************************************************
+ * Runtime Library Functions *
+ ******************************************************************************/
- #endif /* _PCI_X_ */
- #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
+ #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)(
- _Inout_ PVOID Context);
- typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE;
+ #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
+
+ FORCEINLINE
+ VOID
+ InitializeListHead(
+ _Out_ PLIST_ENTRY ListHead)
+ {
+ ListHead->Flink = ListHead->Blink = ListHead;
+ }
- _IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_
- typedef NTSTATUS
- (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)(
- _Inout_ PVOID Context);
- typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE;
+ FORCEINLINE
+ BOOLEAN
+ IsListEmpty(
+ _In_ const LIST_ENTRY * ListHead)
+ {
+ return (BOOLEAN)(ListHead->Flink == ListHead);
+ }
+
+ FORCEINLINE
+ BOOLEAN
+ RemoveEntryList(
+ _In_ PLIST_ENTRY Entry)
+ {
+ PLIST_ENTRY OldFlink;
+ PLIST_ENTRY OldBlink;
+
+ OldFlink = Entry->Flink;
+ OldBlink = Entry->Blink;
+ OldFlink->Blink = OldBlink;
+ OldBlink->Flink = OldFlink;
+ return (BOOLEAN)(OldFlink == OldBlink);
+ }
- typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode;
- PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode;
- } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE;
+ FORCEINLINE
+ PLIST_ENTRY
+ RemoveHeadList(
+ _Inout_ PLIST_ENTRY ListHead)
+ {
+ PLIST_ENTRY Flink;
+ PLIST_ENTRY Entry;
- #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
+ Entry = ListHead->Flink;
+ Flink = Entry->Flink;
+ ListHead->Flink = Flink;
+ Flink->Blink = ListHead;
+ return Entry;
+ }
- typedef ULONG
- (NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)(
- _In_ PVOID Context,
- _Out_writes_bytes_(Length) PVOID Buffer,
- _In_ ULONG Offset,
- _In_ ULONG Length);
+ FORCEINLINE
+ PLIST_ENTRY
+ RemoveTailList(
+ _Inout_ PLIST_ENTRY ListHead)
+ {
+ PLIST_ENTRY Blink;
+ PLIST_ENTRY Entry;
- typedef ULONG
- (NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)(
- _In_ PVOID Context,
- _In_reads_bytes_(Length) PVOID Buffer,
- _In_ ULONG Offset,
- _In_ ULONG Length);
+ Entry = ListHead->Blink;
+ Blink = Entry->Blink;
+ ListHead->Blink = Blink;
+ Blink->Flink = ListHead;
+ return Entry;
+ }
- typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace;
- PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace;
- } PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE;
+ FORCEINLINE
+ VOID
+ InsertTailList(
+ _Inout_ PLIST_ENTRY ListHead,
+ _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
+ {
+ PLIST_ENTRY OldBlink;
+ OldBlink = ListHead->Blink;
+ Entry->Flink = ListHead;
+ Entry->Blink = OldBlink;
+ OldBlink->Flink = Entry;
+ ListHead->Blink = Entry;
+ }
- #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
+ FORCEINLINE
+ VOID
+ InsertHeadList(
+ _Inout_ PLIST_ENTRY ListHead,
+ _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
+ {
+ PLIST_ENTRY OldFlink;
+ OldFlink = ListHead->Flink;
+ Entry->Flink = OldFlink;
+ Entry->Blink = ListHead;
+ OldFlink->Blink = Entry;
+ ListHead->Flink = Entry;
+ }
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI PCI_MSIX_SET_ENTRY)(
- _In_ PVOID Context,
- _In_ ULONG TableEntry,
- _In_ ULONG MessageNumber);
- typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY;
+ FORCEINLINE
+ VOID
+ AppendTailList(
+ _Inout_ PLIST_ENTRY ListHead,
+ _Inout_ PLIST_ENTRY ListToAppend)
+ {
+ PLIST_ENTRY ListEnd = ListHead->Blink;
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI PCI_MSIX_MASKUNMASK_ENTRY)(
- _In_ PVOID Context,
- _In_ ULONG TableEntry);
- typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY;
+ ListHead->Blink->Flink = ListToAppend;
+ ListHead->Blink = ListToAppend->Blink;
+ ListToAppend->Blink->Flink = ListHead;
+ ListToAppend->Blink = ListEnd;
+ }
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI PCI_MSIX_GET_ENTRY)(
- _In_ PVOID Context,
- _In_ ULONG TableEntry,
- _Out_ PULONG MessageNumber,
- _Out_ PBOOLEAN Masked);
- typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY;
+ FORCEINLINE
+ PSINGLE_LIST_ENTRY
+ PopEntryList(
+ _Inout_ PSINGLE_LIST_ENTRY ListHead)
+ {
+ PSINGLE_LIST_ENTRY FirstEntry;
+ FirstEntry = ListHead->Next;
+ if (FirstEntry != NULL) {
+ ListHead->Next = FirstEntry->Next;
+ }
+ return FirstEntry;
+ }
- _Must_inspect_result_
- typedef NTSTATUS
- (NTAPI PCI_MSIX_GET_TABLE_SIZE)(
- _In_ PVOID Context,
- _Out_ PULONG TableSize);
- typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE;
+ FORCEINLINE
+ VOID
+ PushEntryList(
+ _Inout_ PSINGLE_LIST_ENTRY ListHead,
+ _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry)
+ {
+ Entry->Next = ListHead->Next;
+ ListHead->Next = Entry;
+ }
- typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_MSIX_SET_ENTRY SetTableEntry;
- PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry;
- PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry;
- PPCI_MSIX_GET_ENTRY GetTableEntry;
- PPCI_MSIX_GET_TABLE_SIZE GetTableSize;
- } PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE;
+ #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
- #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
- RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
+ __analysis_noreturn
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlAssert(
+ _In_ PVOID FailedAssertion,
+ _In_ PVOID FileName,
+ _In_ ULONG LineNumber,
+ _In_opt_z_ PSTR Message);
- /******************************************************************************
- * Object Manager Types *
- ******************************************************************************/
+ /* VOID
+ * RtlCopyMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+ #define RtlCopyMemory(Destination, Source, Length) \
+ memcpy(Destination, Source, Length)
- #define MAXIMUM_FILENAME_LENGTH 256
- #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
+ #define RtlCopyBytes RtlCopyMemory
- #define OBJECT_TYPE_CREATE 0x0001
- #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
+ #if defined(_M_AMD64)
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlCopyMemoryNonTemporal(
+ _Out_writes_bytes_all_(Length) VOID UNALIGNED *Destination,
+ _In_reads_bytes_(Length) const VOID UNALIGNED *Source,
+ _In_ SIZE_T Length);
+ #else
+ #define RtlCopyMemoryNonTemporal RtlCopyMemory
+ #endif
- #define DIRECTORY_QUERY 0x0001
- #define DIRECTORY_TRAVERSE 0x0002
- #define DIRECTORY_CREATE_OBJECT 0x0004
- #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
- #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
+ /* BOOLEAN
+ * RtlEqualLuid(
+ * IN PLUID Luid1,
+ * IN PLUID Luid2)
+ */
+ #define RtlEqualLuid(Luid1, Luid2) \
+ (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
- #define SYMBOLIC_LINK_QUERY 0x0001
- #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
+ /* LOGICAL
+ * RtlEqualMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+ #define RtlEqualMemory(Destination, Source, Length) \
+ (!memcmp(Destination, Source, Length))
- #define DUPLICATE_CLOSE_SOURCE 0x00000001
- #define DUPLICATE_SAME_ACCESS 0x00000002
- #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
+ /* VOID
+ * RtlFillMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN SIZE_T Length,
+ * IN UCHAR Fill)
+ */
+ #define RtlFillMemory(Destination, Length, Fill) \
+ memset(Destination, Fill, Length)
- #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
- #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
+ #define RtlFillBytes RtlFillMemory
- typedef ULONG OB_OPERATION;
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlFreeUnicodeString(
+ _Inout_ _At_(UnicodeString->Buffer, __drv_freesMem(Mem))
+ PUNICODE_STRING UnicodeString);
- #define OB_OPERATION_HANDLE_CREATE 0x00000001
- #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlGUIDFromString(
+ _In_ PUNICODE_STRING GuidString,
+ _Out_ GUID *Guid);
- typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION {
- _Inout_ ACCESS_MASK DesiredAccess;
- _In_ ACCESS_MASK OriginalDesiredAccess;
- } OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION;
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _At_(DestinationString->Buffer, _Post_equal_to_(SourceString))
+ _When_(SourceString != NULL,
+ _At_(DestinationString->Length, _Post_equal_to_(_String_length_(SourceString) * sizeof(WCHAR)))
+ _At_(DestinationString->MaximumLength, _Post_equal_to_(DestinationString->Length + sizeof(WCHAR))))
+ _When_(SourceString == NULL,
+ _At_(DestinationString->Length, _Post_equal_to_(0))
+ _At_(DestinationString->MaximumLength, _Post_equal_to_(0)))
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlInitUnicodeString(
+ _Out_ PUNICODE_STRING DestinationString,
+ _In_opt_z_ __drv_aliasesMem PCWSTR SourceString);
- typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION {
- _Inout_ ACCESS_MASK DesiredAccess;
- _In_ ACCESS_MASK OriginalDesiredAccess;
- _In_ PVOID SourceProcess;
- _In_ PVOID TargetProcess;
- } OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION;
+ /* VOID
+ * RtlMoveMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN CONST VOID UNALIGNED *Source,
+ * IN SIZE_T Length)
+ */
+ #define RtlMoveMemory(Destination, Source, Length) \
+ memmove(Destination, Source, Length)
- typedef union _OB_PRE_OPERATION_PARAMETERS {
- _Inout_ OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation;
- _Inout_ OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
- } OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS;
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlStringFromGUID(
+ _In_ REFGUID Guid,
+ _Out_ _At_(GuidString->Buffer, __drv_allocatesMem(Mem))
+ PUNICODE_STRING GuidString);
- typedef struct _OB_PRE_OPERATION_INFORMATION {
- _In_ OB_OPERATION Operation;
- _ANONYMOUS_UNION union {
- _In_ ULONG Flags;
- _ANONYMOUS_STRUCT struct {
- _In_ ULONG KernelHandle:1;
- _In_ ULONG Reserved:31;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- _In_ PVOID Object;
- _In_ POBJECT_TYPE ObjectType;
- _Out_ PVOID CallContext;
- _In_ POB_PRE_OPERATION_PARAMETERS Parameters;
- } OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION;
+ /* VOID
+ * RtlZeroMemory(
+ * IN VOID UNALIGNED *Destination,
+ * IN SIZE_T Length)
+ */
+ #define RtlZeroMemory(Destination, Length) \
+ memset(Destination, 0, Length)
- typedef struct _OB_POST_CREATE_HANDLE_INFORMATION {
- _In_ ACCESS_MASK GrantedAccess;
- } OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION;
+ #define RtlZeroBytes RtlZeroMemory
- typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION {
- _In_ ACCESS_MASK GrantedAccess;
- } OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION;
+ #if (NTDDI_VERSION >= NTDDI_WIN2K)
- typedef union _OB_POST_OPERATION_PARAMETERS {
- _In_ OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation;
- _In_ OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
- } OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS;
+ _Must_inspect_result_
+ NTSYSAPI
+ BOOLEAN
+ NTAPI
+ RtlAreBitsClear(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_ ULONG StartingIndex,
+ _In_ ULONG Length);
- typedef struct _OB_POST_OPERATION_INFORMATION {
- _In_ OB_OPERATION Operation;
- _ANONYMOUS_UNION union {
- _In_ ULONG Flags;
- _ANONYMOUS_STRUCT struct {
- _In_ ULONG KernelHandle:1;
- _In_ ULONG Reserved:31;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- _In_ PVOID Object;
- _In_ POBJECT_TYPE ObjectType;
- _In_ PVOID CallContext;
- _In_ NTSTATUS ReturnStatus;
- _In_ POB_POST_OPERATION_PARAMETERS Parameters;
- } OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION;
+ _Must_inspect_result_
+ NTSYSAPI
+ BOOLEAN
+ NTAPI
+ RtlAreBitsSet(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_ ULONG StartingIndex,
+ _In_ ULONG Length);
- typedef enum _OB_PREOP_CALLBACK_STATUS {
- OB_PREOP_SUCCESS
- } OB_PREOP_CALLBACK_STATUS, *POB_PREOP_CALLBACK_STATUS;
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlAnsiStringToUnicodeString(
+ _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
+ _When_(!AllocateDestinationString, _Inout_)
+ PUNICODE_STRING DestinationString,
+ _In_ PANSI_STRING SourceString,
+ _In_ BOOLEAN AllocateDestinationString);
- typedef OB_PREOP_CALLBACK_STATUS
- (NTAPI *POB_PRE_OPERATION_CALLBACK)(
- _In_ PVOID RegistrationContext,
- _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation);
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlxAnsiStringToUnicodeSize(
+ _In_ PCANSI_STRING AnsiString);
- typedef VOID
- (NTAPI *POB_POST_OPERATION_CALLBACK)(
- _In_ PVOID RegistrationContext,
- _In_ POB_POST_OPERATION_INFORMATION OperationInformation);
+ #define RtlAnsiStringToUnicodeSize(String) ( \
+ NLS_MB_CODE_PAGE_TAG ? \
+ RtlxAnsiStringToUnicodeSize(String) : \
+ ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
+ )
- typedef struct _OB_OPERATION_REGISTRATION {
- _In_ POBJECT_TYPE *ObjectType;
- _In_ OB_OPERATION Operations;
- _In_ POB_PRE_OPERATION_CALLBACK PreOperation;
- _In_ POB_POST_OPERATION_CALLBACK PostOperation;
- } OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION;
+ _Success_(1)
+ _Unchanged_(Destination->MaximumLength)
+ _Unchanged_(Destination->Buffer)
+ _When_(_Old_(Destination->Length) + Source->Length <= Destination->MaximumLength,
+ _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + Source->Length))
+ _At_(return, _Out_range_(==, 0)))
+ _When_(_Old_(Destination->Length) + Source->Length > Destination->MaximumLength,
+ _Unchanged_(Destination->Length)
+ _At_(return, _Out_range_(<, 0)))
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlAppendUnicodeStringToString(
+ _Inout_ PUNICODE_STRING Destination,
+ _In_ PCUNICODE_STRING Source);
- typedef struct _OB_CALLBACK_REGISTRATION {
- _In_ USHORT Version;
- _In_ USHORT OperationRegistrationCount;
- _In_ UNICODE_STRING Altitude;
- _In_ PVOID RegistrationContext;
- _In_ OB_OPERATION_REGISTRATION *OperationRegistration;
- } OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION;
+ _Success_(1)
+ _Unchanged_(Destination->MaximumLength)
+ _Unchanged_(Destination->Buffer)
+ /* _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) <= Destination->MaximumLength,
+ _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR)))
+ _At_(return, _Out_range_(==, 0)))
+ _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) > Destination->MaximumLength,
+ _Unchanged_(Destination->Length)
+ _At_(return, _Out_range_(<, 0))) */
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlAppendUnicodeToString(
+ _Inout_ PUNICODE_STRING Destination,
+ _In_opt_z_ PCWSTR Source);
- typedef struct _OBJECT_NAME_INFORMATION {
- UNICODE_STRING Name;
- } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlCheckRegistryKey(
+ _In_ ULONG RelativeTo,
+ _In_ PWSTR Path);
- /* Exported object types */
- extern POBJECT_TYPE NTSYSAPI CmKeyObjectType;
- extern POBJECT_TYPE NTSYSAPI ExEventObjectType;
- extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType;
- extern POBJECT_TYPE NTSYSAPI IoFileObjectType;
- extern POBJECT_TYPE NTSYSAPI PsThreadType;
- extern POBJECT_TYPE NTSYSAPI SeTokenObjectType;
- extern POBJECT_TYPE NTSYSAPI PsProcessType;
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlClearAllBits(
+ _In_ PRTL_BITMAP BitMapHeader);
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlClearBits(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToClear) ULONG StartingIndex,
+ _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToClear);
- /******************************************************************************
- * Process Manager Types *
- ******************************************************************************/
+ _Must_inspect_result_
+ NTSYSAPI
+ SIZE_T
+ NTAPI
+ RtlCompareMemory(
+ _In_ const VOID *Source1,
+ _In_ const VOID *Source2,
+ _In_ SIZE_T Length);
- #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
- #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
- #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
- #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
- #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ NTSYSAPI
+ LONG
+ NTAPI
+ RtlCompareUnicodeString(
+ _In_ PCUNICODE_STRING String1,
+ _In_ PCUNICODE_STRING String2,
+ _In_ BOOLEAN CaseInSensitive);
- /* Thread Access Rights */
- #define THREAD_TERMINATE 0x0001
- #define THREAD_SUSPEND_RESUME 0x0002
- #define THREAD_ALERT 0x0004
- #define THREAD_GET_CONTEXT 0x0008
- #define THREAD_SET_CONTEXT 0x0010
- #define THREAD_SET_INFORMATION 0x0020
- #define THREAD_SET_LIMITED_INFORMATION 0x0400
- #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ NTSYSAPI
+ LONG
+ NTAPI
+ RtlCompareUnicodeStrings(
+ _In_reads_(String1Length) PCWCH String1,
+ _In_ SIZE_T String1Length,
+ _In_reads_(String2Length) PCWCH String2,
+ _In_ SIZE_T String2Length,
+ _In_ BOOLEAN CaseInSensitive);
- #define PROCESS_DUP_HANDLE (0x0040)
+ _Unchanged_(DestinationString->Buffer)
+ _Unchanged_(DestinationString->MaximumLength)
+ _At_(DestinationString->Length,
+ _When_(SourceString->Length > DestinationString->MaximumLength,
+ _Post_equal_to_(DestinationString->MaximumLength))
+ _When_(SourceString->Length <= DestinationString->MaximumLength,
+ _Post_equal_to_(SourceString->Length)))
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlCopyUnicodeString(
+ _Inout_ PUNICODE_STRING DestinationString,
+ _In_opt_ PCUNICODE_STRING SourceString);
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
- #else
- #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
- #endif
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlCreateRegistryKey(
+ _In_ ULONG RelativeTo,
+ _In_ PWSTR Path);
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
- #else
- #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
- #endif
+ _IRQL_requires_max_(APC_LEVEL)
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlCreateSecurityDescriptor(
+ _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ _In_ ULONG Revision);
- #define LOW_PRIORITY 0
- #define LOW_REALTIME_PRIORITY 16
- #define HIGH_PRIORITY 31
- #define MAXIMUM_PRIORITY 32
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlDeleteRegistryValue(
+ _In_ ULONG RelativeTo,
+ _In_ PCWSTR Path,
+ _In_z_ PCWSTR ValueName);
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
+ NTSYSAPI
+ BOOLEAN
+ NTAPI
+ RtlEqualUnicodeString(
+ _In_ CONST UNICODE_STRING *String1,
+ _In_ CONST UNICODE_STRING *String2,
+ _In_ BOOLEAN CaseInSensitive);
- /******************************************************************************
- * WMI Library Support Types *
- ******************************************************************************/
+ #if !defined(_AMD64_) && !defined(_IA64_)
+ NTSYSAPI
+ LARGE_INTEGER
+ NTAPI
+ RtlExtendedIntegerMultiply(
+ _In_ LARGE_INTEGER Multiplicand,
+ _In_ LONG Multiplier);
- #ifdef RUN_WPP
- #include <evntrace.h>
- #include <stdarg.h>
+ NTSYSAPI
+ LARGE_INTEGER
+ NTAPI
+ RtlExtendedLargeIntegerDivide(
+ _In_ LARGE_INTEGER Dividend,
+ _In_ ULONG Divisor,
+ _Out_opt_ PULONG Remainder);
#endif
- #ifndef _TRACEHANDLE_DEFINED
- #define _TRACEHANDLE_DEFINED
- typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
+ #if defined(_X86_) || defined(_IA64_)
+ NTSYSAPI
+ LARGE_INTEGER
+ NTAPI
+ RtlExtendedMagicDivide(
+ _In_ LARGE_INTEGER Dividend,
+ _In_ LARGE_INTEGER MagicDivisor,
+ _In_ CCHAR ShiftCount);
#endif
- #ifndef TRACE_INFORMATION_CLASS_DEFINE
-
- typedef struct _ETW_TRACE_SESSION_SETTINGS {
- ULONG Version;
- ULONG BufferSize;
- ULONG MinimumBuffers;
- ULONG MaximumBuffers;
- ULONG LoggerMode;
- ULONG FlushTimer;
- ULONG FlushThreshold;
- ULONG ClockType;
- } ETW_TRACE_SESSION_SETTINGS, *PETW_TRACE_SESSION_SETTINGS;
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlFreeAnsiString(
+ _Inout_ _At_(AnsiString->Buffer, __drv_freesMem(Mem))
+ PANSI_STRING AnsiString);
- typedef enum _TRACE_INFORMATION_CLASS {
- TraceIdClass,
- TraceHandleClass,
- TraceEnableFlagsClass,
- TraceEnableLevelClass,
- GlobalLoggerHandleClass,
- EventLoggerHandleClass,
- AllLoggerHandlesClass,
- TraceHandleByNameClass,
- LoggerEventsLostClass,
- TraceSessionSettingsClass,
- LoggerEventsLoggedClass,
- MaxTraceInformationClass
- } TRACE_INFORMATION_CLASS;
+ _Success_(return != -1)
+ _Must_inspect_result_
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlFindClearBits(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_ ULONG NumberToFind,
+ _In_ ULONG HintIndex);
- #endif /* TRACE_INFORMATION_CLASS_DEFINE */
+ _Success_(return != -1)
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlFindClearBitsAndSet(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_ ULONG NumberToFind,
+ _In_ ULONG HintIndex);
- #ifndef _ETW_KM_
- #define _ETW_KM_
- #endif
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlFindFirstRunClear(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _Out_ PULONG StartingIndex);
- #include <evntprov.h>
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlFindClearRuns(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _Out_writes_to_(SizeOfRunArray, return) PRTL_BITMAP_RUN RunArray,
+ _In_range_(>, 0) ULONG SizeOfRunArray,
+ _In_ BOOLEAN LocateLongestRuns);
- _IRQL_requires_same_
- typedef VOID
- (NTAPI *PETWENABLECALLBACK)(
- _In_ LPCGUID SourceId,
- _In_ ULONG ControlCode,
- _In_ UCHAR Level,
- _In_ ULONGLONG MatchAnyKeyword,
- _In_ ULONGLONG MatchAllKeyword,
- _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData,
- _Inout_opt_ PVOID CallbackContext);
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlFindLastBackwardRunClear(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_ ULONG FromIndex,
+ _Out_ PULONG StartingRunIndex);
- #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
+ _Success_(return != -1)
+ _Must_inspect_result_
+ NTSYSAPI
+ CCHAR
+ NTAPI
+ RtlFindLeastSignificantBit(
+ _In_ ULONGLONG Set);
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlFindLongestRunClear(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _Out_ PULONG StartingIndex);
- /******************************************************************************
- * Runtime Library Functions *
- ******************************************************************************/
+ _Success_(return != -1)
+ _Must_inspect_result_
+ NTSYSAPI
+ CCHAR
+ NTAPI
+ RtlFindMostSignificantBit(
+ _In_ ULONGLONG Set);
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlFindNextForwardRunClear(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_ ULONG FromIndex,
+ _Out_ PULONG StartingRunIndex);
- #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
+ _Success_(return != -1)
+ _Must_inspect_result_
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlFindSetBits(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_ ULONG NumberToFind,
+ _In_ ULONG HintIndex);
- #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
+ _Success_(return != -1)
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlFindSetBitsAndClear(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_ ULONG NumberToFind,
+ _In_ ULONG HintIndex);
- FORCEINLINE
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ NTSYSAPI
VOID
- InitializeListHead(
- _Out_ PLIST_ENTRY ListHead)
- {
- ListHead->Flink = ListHead->Blink = ListHead;
- }
+ NTAPI
+ RtlInitAnsiString(
+ _Out_ PANSI_STRING DestinationString,
+ _In_opt_z_ __drv_aliasesMem PCSZ SourceString);
- _Must_inspect_result_
- FORCEINLINE
- BOOLEAN
- IsListEmpty(
- _In_ const LIST_ENTRY * ListHead)
- {
- return (BOOLEAN)(ListHead->Flink == ListHead);
- }
+ _At_(BitMapHeader->SizeOfBitMap, _Post_equal_to_(SizeOfBitMap))
+ _At_(BitMapHeader->Buffer, _Post_equal_to_(BitMapBuffer))
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlInitializeBitMap(
+ _Out_ PRTL_BITMAP BitMapHeader,
+ _In_opt_ __drv_aliasesMem PULONG BitMapBuffer,
+ _In_opt_ ULONG SizeOfBitMap);
- FORCEINLINE
- BOOLEAN
- RemoveEntryList(
- _In_ PLIST_ENTRY Entry)
- {
- PLIST_ENTRY OldFlink;
- PLIST_ENTRY OldBlink;
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlInitString(
+ _Out_ PSTRING DestinationString,
+ _In_opt_z_ __drv_aliasesMem PCSZ SourceString);
- OldFlink = Entry->Flink;
- OldBlink = Entry->Blink;
- OldFlink->Blink = OldBlink;
- OldBlink->Flink = OldFlink;
- return (BOOLEAN)(OldFlink == OldBlink);
- }
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _At_(String->MaximumLength, _Const_)
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlIntegerToUnicodeString(
+ _In_ ULONG Value,
+ _In_opt_ ULONG Base,
+ _Inout_ PUNICODE_STRING String);
- FORCEINLINE
- PLIST_ENTRY
- RemoveHeadList(
- _Inout_ PLIST_ENTRY ListHead)
- {
- PLIST_ENTRY Flink;
- PLIST_ENTRY Entry;
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _At_(String->MaximumLength, _Const_)
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlInt64ToUnicodeString(
+ _In_ ULONGLONG Value,
+ _In_opt_ ULONG Base,
+ _Inout_ PUNICODE_STRING String);
- Entry = ListHead->Flink;
- Flink = Entry->Flink;
- ListHead->Flink = Flink;
- Flink->Blink = ListHead;
- return Entry;
- }
+ #ifdef _WIN64
+ #define RtlIntPtrToUnicodeString(Value, Base, String) \
+ RtlInt64ToUnicodeString(Value, Base, String)
+ #else
+ #define RtlIntPtrToUnicodeString(Value, Base, String) \
+ RtlIntegerToUnicodeString(Value, Base, String)
+ #endif
- FORCEINLINE
- PLIST_ENTRY
- RemoveTailList(
- _Inout_ PLIST_ENTRY ListHead)
- {
- PLIST_ENTRY Blink;
- PLIST_ENTRY Entry;
+ /* BOOLEAN
+ * RtlIsZeroLuid(
+ * IN PLUID L1);
+ */
+ #define RtlIsZeroLuid(_L1) \
+ ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
- Entry = ListHead->Blink;
- Blink = Entry->Blink;
- ListHead->Blink = Blink;
- Blink->Flink = ListHead;
- return Entry;
- }
+ _IRQL_requires_max_(APC_LEVEL)
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlLengthSecurityDescriptor(
+ _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
- FORCEINLINE
- VOID
- InsertTailList(
- _Inout_ PLIST_ENTRY ListHead,
- _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
- {
- PLIST_ENTRY OldBlink;
- OldBlink = ListHead->Blink;
- Entry->Flink = ListHead;
- Entry->Blink = OldBlink;
- OldBlink->Flink = Entry;
- ListHead->Blink = Entry;
- }
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlNumberOfClearBits(
+ _In_ PRTL_BITMAP BitMapHeader);
- FORCEINLINE
- VOID
- InsertHeadList(
- _Inout_ PLIST_ENTRY ListHead,
- _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
- {
- PLIST_ENTRY OldFlink;
- OldFlink = ListHead->Flink;
- Entry->Flink = OldFlink;
- Entry->Blink = ListHead;
- OldFlink->Blink = Entry;
- ListHead->Flink = Entry;
- }
+ NTSYSAPI
+ ULONG
+ NTAPI
+ RtlNumberOfSetBits(
+ _In_ PRTL_BITMAP BitMapHeader);
- FORCEINLINE
- VOID
- AppendTailList(
- _Inout_ PLIST_ENTRY ListHead,
- _Inout_ PLIST_ENTRY ListToAppend)
- {
- PLIST_ENTRY ListEnd = ListHead->Blink;
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlQueryRegistryValues(
+ _In_ ULONG RelativeTo,
+ _In_ PCWSTR Path,
+ _Inout_ _At_(*(*QueryTable).EntryContext, _Pre_unknown_)
+ PRTL_QUERY_REGISTRY_TABLE QueryTable,
+ _In_opt_ PVOID Context,
+ _In_opt_ PVOID Environment);
- ListHead->Blink->Flink = ListToAppend;
- ListHead->Blink = ListToAppend->Blink;
- ListToAppend->Blink->Flink = ListHead;
- ListToAppend->Blink = ListEnd;
- }
+ #define SHORT_SIZE (sizeof(USHORT))
+ #define SHORT_MASK (SHORT_SIZE - 1)
+ #define LONG_SIZE (sizeof(LONG))
+ #define LONGLONG_SIZE (sizeof(LONGLONG))
+ #define LONG_MASK (LONG_SIZE - 1)
+ #define LONGLONG_MASK (LONGLONG_SIZE - 1)
+ #define LOWBYTE_MASK 0x00FF
- FORCEINLINE
- PSINGLE_LIST_ENTRY
- PopEntryList(
- _Inout_ PSINGLE_LIST_ENTRY ListHead)
- {
- PSINGLE_LIST_ENTRY FirstEntry;
- FirstEntry = ListHead->Next;
- if (FirstEntry != NULL) {
- ListHead->Next = FirstEntry->Next;
- }
- return FirstEntry;
- }
+ #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
+ #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
+ #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
+ #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
- FORCEINLINE
+ NTSYSAPI
VOID
- PushEntryList(
- _Inout_ PSINGLE_LIST_ENTRY ListHead,
- _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry)
- {
- Entry->Next = ListHead->Next;
- ListHead->Next = Entry;
- }
-
- #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
+ NTAPI
+ RtlSetAllBits(
+ _In_ PRTL_BITMAP BitMapHeader);
- __analysis_noreturn
NTSYSAPI
VOID
NTAPI
- RtlAssert(
- _In_ PVOID FailedAssertion,
- _In_ PVOID FileName,
- _In_ ULONG LineNumber,
- _In_opt_z_ PSTR Message);
+ RtlSetBits(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToSet) ULONG StartingIndex,
+ _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToSet);
+
+ _IRQL_requires_max_(APC_LEVEL)
+ NTSYSAPI
+ NTSTATUS
+ NTAPI
+ RtlSetDaclSecurityDescriptor(
+ _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ _In_ BOOLEAN DaclPresent,
+ _In_opt_ PACL Dacl,
+ _In_opt_ BOOLEAN DaclDefaulted);
+
+ #if defined(_AMD64_)
/* VOID
- * RtlCopyMemory(
- * IN VOID UNALIGNED *Destination,
- * IN CONST VOID UNALIGNED *Source,
- * IN SIZE_T Length)
+ * RtlStoreUlong(
+ * IN PULONG Address,
+ * IN ULONG Value);
*/
- #define RtlCopyMemory(Destination, Source, Length) \
- memcpy(Destination, Source, Length)
-
- #define RtlCopyBytes RtlCopyMemory
+ #define RtlStoreUlong(Address,Value) \
+ *(ULONG UNALIGNED *)(Address) = (Value)
- #if defined(_M_AMD64)
- NTSYSAPI
- VOID
- NTAPI
- RtlCopyMemoryNonTemporal(
- _Out_writes_bytes_all_(Length) VOID UNALIGNED *Destination,
- _In_reads_bytes_(Length) const VOID UNALIGNED *Source,
- _In_ SIZE_T Length);
- #else
- #define RtlCopyMemoryNonTemporal RtlCopyMemory
- #endif
+ /* VOID
+ * RtlStoreUlonglong(
+ * IN OUT PULONGLONG Address,
+ * ULONGLONG Value);
+ */
+ #define RtlStoreUlonglong(Address,Value) \
+ *(ULONGLONG UNALIGNED *)(Address) = (Value)
- /* BOOLEAN
- * RtlEqualLuid(
- * IN PLUID Luid1,
- * IN PLUID Luid2)
+ /* VOID
+ * RtlStoreUshort(
+ * IN PUSHORT Address,
+ * IN USHORT Value);
*/
- #define RtlEqualLuid(Luid1, Luid2) \
- (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
+ #define RtlStoreUshort(Address,Value) \
+ *(USHORT UNALIGNED *)(Address) = (Value)
- /* LOGICAL
- * RtlEqualMemory(
- * IN VOID UNALIGNED *Destination,
- * IN CONST VOID UNALIGNED *Source,
- * IN SIZE_T Length)
+ /* VOID
+ * RtlRetrieveUshort(
+ * PUSHORT DestinationAddress,
+ * PUSHORT SourceAddress);
*/
- #define RtlEqualMemory(Destination, Source, Length) \
- (!memcmp(Destination, Source, Length))
+ #define RtlRetrieveUshort(DestAddress,SrcAddress) \
+ *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
/* VOID
- * RtlFillMemory(
- * IN VOID UNALIGNED *Destination,
- * IN SIZE_T Length,
- * IN UCHAR Fill)
+ * RtlRetrieveUlong(
+ * PULONG DestinationAddress,
+ * PULONG SourceAddress);
*/
- #define RtlFillMemory(Destination, Length, Fill) \
- memset(Destination, Fill, Length)
+ #define RtlRetrieveUlong(DestAddress,SrcAddress) \
+ *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
- #define RtlFillBytes RtlFillMemory
+ #else
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- VOID
- NTAPI
- RtlFreeUnicodeString(
- _Inout_ _At_(UnicodeString->Buffer, __drv_freesMem(Mem))
- PUNICODE_STRING UnicodeString);
+ #define RtlStoreUlong(Address,Value) \
+ if ((ULONG_PTR)(Address) & LONG_MASK) { \
+ ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
+ ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
+ ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
+ ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
+ } \
+ else { \
+ *((PULONG)(Address)) = (ULONG) (Value); \
+ }
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlGUIDFromString(
- _In_ PUNICODE_STRING GuidString,
- _Out_ GUID *Guid);
+ #define RtlStoreUlonglong(Address,Value) \
+ if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
+ RtlStoreUlong((ULONG_PTR)(Address), \
+ (ULONGLONG)(Value) & 0xFFFFFFFF); \
+ RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
+ (ULONGLONG)(Value) >> 32); \
+ } else { \
+ *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
+ }
- _IRQL_requires_max_(DISPATCH_LEVEL)
- _At_(DestinationString->Buffer, _Post_equal_to_(SourceString))
- _When_(SourceString != NULL,
- _At_(DestinationString->Length, _Post_equal_to_(_String_length_(SourceString) * sizeof(WCHAR)))
- _At_(DestinationString->MaximumLength, _Post_equal_to_(DestinationString->Length + sizeof(WCHAR))))
- _When_(SourceString == NULL,
- _At_(DestinationString->Length, _Post_equal_to_(0))
- _At_(DestinationString->MaximumLength, _Post_equal_to_(0)))
- NTSYSAPI
- VOID
- NTAPI
- RtlInitUnicodeString(
- _Out_ PUNICODE_STRING DestinationString,
- _In_opt_z_ __drv_aliasesMem PCWSTR SourceString);
+ #define RtlStoreUshort(Address,Value) \
+ if ((ULONG_PTR)(Address) & SHORT_MASK) { \
+ ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
+ ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
+ } \
+ else { \
+ *((PUSHORT) (Address)) = (USHORT)Value; \
+ }
- /* VOID
- * RtlMoveMemory(
- * IN VOID UNALIGNED *Destination,
- * IN CONST VOID UNALIGNED *Source,
- * IN SIZE_T Length)
- */
- #define RtlMoveMemory(Destination, Source, Length) \
- memmove(Destination, Source, Length)
+ #define RtlRetrieveUshort(DestAddress,SrcAddress) \
+ if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
+ { \
+ ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
+ ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
+ } \
+ else \
+ { \
+ *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
+ }
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlStringFromGUID(
- _In_ REFGUID Guid,
- _Out_ _At_(GuidString->Buffer, __drv_allocatesMem(Mem))
- PUNICODE_STRING GuidString);
+ #define RtlRetrieveUlong(DestAddress,SrcAddress) \
+ if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
+ { \
+ ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
+ ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
+ ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
+ ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
+ } \
+ else \
+ { \
+ *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
+ }
+
+ #endif /* defined(_AMD64_) */
+ #ifdef _WIN64
/* VOID
- * RtlZeroMemory(
- * IN VOID UNALIGNED *Destination,
- * IN SIZE_T Length)
+ * RtlStoreUlongPtr(
+ * IN OUT PULONG_PTR Address,
+ * IN ULONG_PTR Value);
*/
- #define RtlZeroMemory(Destination, Length) \
- memset(Destination, 0, Length)
-
- #define RtlZeroBytes RtlZeroMemory
-
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
+ #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
+ #else
+ #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
+ #endif /* _WIN64 */
+ _Success_(return!=FALSE)
_Must_inspect_result_
NTSYSAPI
BOOLEAN
NTAPI
- RtlAreBitsClear(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_ ULONG StartingIndex,
- _In_ ULONG Length);
+ RtlTimeFieldsToTime(
+ _In_ PTIME_FIELDS TimeFields,
+ _Out_ PLARGE_INTEGER Time);
- _Must_inspect_result_
NTSYSAPI
- BOOLEAN
+ VOID
NTAPI
- RtlAreBitsSet(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_ ULONG StartingIndex,
- _In_ ULONG Length);
+ RtlTimeToTimeFields(
+ _In_ PLARGE_INTEGER Time,
+ _Out_ PTIME_FIELDS TimeFields);
+
+ NTSYSAPI
+ ULONG
+ FASTCALL
+ RtlUlongByteSwap(
+ _In_ ULONG Source);
+ NTSYSAPI
+ ULONGLONG
+ FASTCALL
+ RtlUlonglongByteSwap(
+ _In_ ULONGLONG Source);
+
+ _When_(AllocateDestinationString,
+ _At_(DestinationString->MaximumLength,
+ _Out_range_(<=, (SourceString->MaximumLength / sizeof(WCHAR)))))
+ _When_(!AllocateDestinationString,
+ _At_(DestinationString->Buffer, _Const_)
+ _At_(DestinationString->MaximumLength, _Const_))
_IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
+ _When_(AllocateDestinationString, _Must_inspect_result_)
NTSYSAPI
NTSTATUS
NTAPI
- RtlAnsiStringToUnicodeString(
+ RtlUnicodeStringToAnsiString(
_When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
_When_(!AllocateDestinationString, _Inout_)
- PUNICODE_STRING DestinationString,
- _In_ PANSI_STRING SourceString,
+ PANSI_STRING DestinationString,
+ _In_ PCUNICODE_STRING SourceString,
_In_ BOOLEAN AllocateDestinationString);
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSYSAPI
ULONG
NTAPI
- RtlxAnsiStringToUnicodeSize(
- _In_ PCANSI_STRING AnsiString);
+ RtlxUnicodeStringToAnsiSize(
+ _In_ PCUNICODE_STRING UnicodeString);
- #define RtlAnsiStringToUnicodeSize(String) ( \
- NLS_MB_CODE_PAGE_TAG ? \
- RtlxAnsiStringToUnicodeSize(String) : \
- ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
+ #define RtlUnicodeStringToAnsiSize(String) ( \
+ NLS_MB_CODE_PAGE_TAG ? \
+ RtlxUnicodeStringToAnsiSize(String) : \
+ ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
)
- _Success_(1)
- _Unchanged_(Destination->MaximumLength)
- _Unchanged_(Destination->Buffer)
- _When_(_Old_(Destination->Length) + Source->Length <= Destination->MaximumLength,
- _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + Source->Length))
- _At_(return, _Out_range_(==, 0)))
- _When_(_Old_(Destination->Length) + Source->Length > Destination->MaximumLength,
- _Unchanged_(Destination->Length)
- _At_(return, _Out_range_(<, 0)))
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlAppendUnicodeStringToString(
- _Inout_ PUNICODE_STRING Destination,
- _In_ PCUNICODE_STRING Source);
-
- _Success_(1)
- _Unchanged_(Destination->MaximumLength)
- _Unchanged_(Destination->Buffer)
- /* _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) <= Destination->MaximumLength,
- _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR)))
- _At_(return, _Out_range_(==, 0)))
- _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) > Destination->MaximumLength,
- _Unchanged_(Destination->Length)
- _At_(return, _Out_range_(<, 0))) */
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlAppendUnicodeToString(
- _Inout_ PUNICODE_STRING Destination,
- _In_opt_z_ PCWSTR Source);
-
_IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
NTSYSAPI
NTSTATUS
NTAPI
- RtlCheckRegistryKey(
- _In_ ULONG RelativeTo,
- _In_ PWSTR Path);
-
- NTSYSAPI
- VOID
- NTAPI
- RtlClearAllBits(
- _In_ PRTL_BITMAP BitMapHeader);
-
- NTSYSAPI
- VOID
- NTAPI
- RtlClearBits(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToClear) ULONG StartingIndex,
- _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToClear);
-
- _Must_inspect_result_
- NTSYSAPI
- SIZE_T
- NTAPI
- RtlCompareMemory(
- _In_ const VOID *Source1,
- _In_ const VOID *Source2,
- _In_ SIZE_T Length);
+ RtlUnicodeStringToInteger(
+ _In_ PCUNICODE_STRING String,
+ _In_opt_ ULONG Base,
+ _Out_ PULONG Value);
_IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
NTSYSAPI
- LONG
+ WCHAR
NTAPI
- RtlCompareUnicodeString(
- _In_ PCUNICODE_STRING String1,
- _In_ PCUNICODE_STRING String2,
- _In_ BOOLEAN CaseInSensitive);
+ RtlUpcaseUnicodeChar(
+ _In_ WCHAR SourceCharacter);
- _IRQL_requires_max_(PASSIVE_LEVEL)
+ NTSYSAPI
+ USHORT
+ FASTCALL
+ RtlUshortByteSwap(
+ _In_ USHORT Source);
+
+ _IRQL_requires_max_(APC_LEVEL)
_Must_inspect_result_
NTSYSAPI
- LONG
+ BOOLEAN
NTAPI
- RtlCompareUnicodeStrings(
- _In_reads_(String1Length) PCWCH String1,
- _In_ SIZE_T String1Length,
- _In_reads_(String2Length) PCWCH String2,
- _In_ SIZE_T String2Length,
- _In_ BOOLEAN CaseInSensitive);
+ RtlValidRelativeSecurityDescriptor(
+ _In_reads_bytes_(SecurityDescriptorLength) PSECURITY_DESCRIPTOR SecurityDescriptorInput,
+ _In_ ULONG SecurityDescriptorLength,
+ _In_ SECURITY_INFORMATION RequiredInformation);
- _Unchanged_(DestinationString->Buffer)
- _Unchanged_(DestinationString->MaximumLength)
- _At_(DestinationString->Length,
- _When_(SourceString->Length > DestinationString->MaximumLength,
- _Post_equal_to_(DestinationString->MaximumLength))
- _When_(SourceString->Length <= DestinationString->MaximumLength,
- _Post_equal_to_(SourceString->Length)))
+ _IRQL_requires_max_(APC_LEVEL)
+ _Must_inspect_result_
NTSYSAPI
- VOID
+ BOOLEAN
NTAPI
- RtlCopyUnicodeString(
- _Inout_ PUNICODE_STRING DestinationString,
- _In_opt_ PCUNICODE_STRING SourceString);
+ RtlValidSecurityDescriptor(
+ _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSYSAPI
NTSTATUS
NTAPI
- RtlCreateRegistryKey(
- _In_ ULONG RelativeTo,
- _In_ PWSTR Path);
+ RtlGetVersion(
+ _Out_
+ _At_(lpVersionInformation->dwOSVersionInfoSize, _Pre_ _Valid_)
+ _When_(lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW),
+ _At_((PRTL_OSVERSIONINFOEXW)lpVersionInformation, _Out_))
+ PRTL_OSVERSIONINFOW lpVersionInformation);
- _IRQL_requires_max_(APC_LEVEL)
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
NTSYSAPI
NTSTATUS
NTAPI
- RtlCreateSecurityDescriptor(
- _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor,
- _In_ ULONG Revision);
+ RtlVerifyVersionInfo(
+ _In_ PRTL_OSVERSIONINFOEXW VersionInfo,
+ _In_ ULONG TypeMask,
+ _In_ ULONGLONG ConditionMask);
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSYSAPI
NTSTATUS
NTAPI
- RtlDeleteRegistryValue(
+ RtlWriteRegistryValue(
_In_ ULONG RelativeTo,
_In_ PCWSTR Path,
- _In_z_ PCWSTR ValueName);
+ _In_z_ PCWSTR ValueName,
+ _In_ ULONG ValueType,
+ _In_reads_bytes_opt_(ValueLength) PVOID ValueData,
+ _In_ ULONG ValueLength);
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlEqualUnicodeString(
- _In_ CONST UNICODE_STRING *String1,
- _In_ CONST UNICODE_STRING *String2,
- _In_ BOOLEAN CaseInSensitive);
- #if !defined(_AMD64_) && !defined(_IA64_)
- NTSYSAPI
- LARGE_INTEGER
- NTAPI
- RtlExtendedIntegerMultiply(
- _In_ LARGE_INTEGER Multiplicand,
- _In_ LONG Multiplier);
+ #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- NTSYSAPI
- LARGE_INTEGER
- NTAPI
- RtlExtendedLargeIntegerDivide(
- _In_ LARGE_INTEGER Dividend,
- _In_ ULONG Divisor,
- _Out_opt_ PULONG Remainder);
- #endif
- #if defined(_X86_) || defined(_IA64_)
+ #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
NTSYSAPI
- LARGE_INTEGER
- NTAPI
- RtlExtendedMagicDivide(
- _In_ LARGE_INTEGER Dividend,
- _In_ LARGE_INTEGER MagicDivisor,
- _In_ CCHAR ShiftCount);
+ VOID
+ FASTCALL
+ RtlPrefetchMemoryNonTemporal(
+ _In_ PVOID Source,
+ _In_ SIZE_T Length);
#endif
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- VOID
- NTAPI
- RtlFreeAnsiString(
- _Inout_ _At_(AnsiString->Buffer, __drv_freesMem(Mem))
- PANSI_STRING AnsiString);
- _Success_(return != -1)
- _Must_inspect_result_
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindClearBits(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_ ULONG NumberToFind,
- _In_ ULONG HintIndex);
+ #if (NTDDI_VERSION >= NTDDI_WINXP)
+
- _Success_(return != -1)
NTSYSAPI
- ULONG
+ VOID
NTAPI
- RtlFindClearBitsAndSet(
+ RtlClearBit(
_In_ PRTL_BITMAP BitMapHeader,
- _In_ ULONG NumberToFind,
- _In_ ULONG HintIndex);
+ _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber);
+ _IRQL_requires_max_(PASSIVE_LEVEL)
NTSYSAPI
- ULONG
+ WCHAR
NTAPI
- RtlFindFirstRunClear(
- _In_ PRTL_BITMAP BitMapHeader,
- _Out_ PULONG StartingIndex);
+ RtlDowncaseUnicodeChar(
+ _In_ WCHAR SourceCharacter);
NTSYSAPI
- ULONG
+ VOID
NTAPI
- RtlFindClearRuns(
+ RtlSetBit(
_In_ PRTL_BITMAP BitMapHeader,
- _Out_writes_to_(SizeOfRunArray, return) PRTL_BITMAP_RUN RunArray,
- _In_range_(>, 0) ULONG SizeOfRunArray,
- _In_ BOOLEAN LocateLongestRuns);
+ _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber);
+ _Must_inspect_result_
NTSYSAPI
- ULONG
+ BOOLEAN
NTAPI
- RtlFindLastBackwardRunClear(
+ RtlTestBit(
_In_ PRTL_BITMAP BitMapHeader,
- _In_ ULONG FromIndex,
- _Out_ PULONG StartingRunIndex);
+ _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber);
- _Success_(return != -1)
- _Must_inspect_result_
+ _IRQL_requires_max_(PASSIVE_LEVEL)
NTSYSAPI
- CCHAR
+ NTSTATUS
NTAPI
- RtlFindLeastSignificantBit(
- _In_ ULONGLONG Set);
+ RtlHashUnicodeString(
+ _In_ CONST UNICODE_STRING *String,
+ _In_ BOOLEAN CaseInSensitive,
+ _In_ ULONG HashAlgorithm,
+ _Out_ PULONG HashValue);
+
+
+
+ #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+
+ #if (NTDDI_VERSION >= NTDDI_VISTA)
NTSYSAPI
ULONG
NTAPI
- RtlFindLongestRunClear(
- _In_ PRTL_BITMAP BitMapHeader,
- _Out_ PULONG StartingIndex);
+ RtlNumberOfSetBitsUlongPtr(
+ _In_ ULONG_PTR Target);
- _Success_(return != -1)
- _Must_inspect_result_
NTSYSAPI
- CCHAR
+ ULONGLONG
NTAPI
- RtlFindMostSignificantBit(
- _In_ ULONGLONG Set);
+ RtlIoDecodeMemIoResource(
+ _In_ struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
+ _Out_opt_ PULONGLONG Alignment,
+ _Out_opt_ PULONGLONG MinimumAddress,
+ _Out_opt_ PULONGLONG MaximumAddress);
NTSYSAPI
- ULONG
+ NTSTATUS
NTAPI
- RtlFindNextForwardRunClear(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_ ULONG FromIndex,
- _Out_ PULONG StartingRunIndex);
+ RtlIoEncodeMemIoResource(
+ _In_ struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
+ _In_ UCHAR Type,
+ _In_ ULONGLONG Length,
+ _In_ ULONGLONG Alignment,
+ _In_ ULONGLONG MinimumAddress,
+ _In_ ULONGLONG MaximumAddress);
- _Success_(return != -1)
- _Must_inspect_result_
NTSYSAPI
- ULONG
+ ULONGLONG
NTAPI
- RtlFindSetBits(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_ ULONG NumberToFind,
- _In_ ULONG HintIndex);
+ RtlCmDecodeMemIoResource(
+ _In_ struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor,
+ _Out_opt_ PULONGLONG Start);
- _Success_(return != -1)
NTSYSAPI
- ULONG
+ NTSTATUS
NTAPI
- RtlFindSetBitsAndClear(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_ ULONG NumberToFind,
- _In_ ULONG HintIndex);
+ RtlFindClosestEncodableLength(
+ _In_ ULONGLONG SourceLength,
+ _Out_ PULONGLONG TargetLength);
- _IRQL_requires_max_(DISPATCH_LEVEL)
NTSYSAPI
- VOID
+ NTSTATUS
NTAPI
- RtlInitAnsiString(
- _Out_ PANSI_STRING DestinationString,
- _In_opt_z_ __drv_aliasesMem PCSZ SourceString);
+ RtlCmEncodeMemIoResource(
+ _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
+ _In_ UCHAR Type,
+ _In_ ULONGLONG Length,
+ _In_ ULONGLONG Start);
- _At_(BitMapHeader->SizeOfBitMap, _Post_equal_to_(SizeOfBitMap))
- _At_(BitMapHeader->Buffer, _Post_equal_to_(BitMapBuffer))
- NTSYSAPI
- VOID
- NTAPI
- RtlInitializeBitMap(
- _Out_ PRTL_BITMAP BitMapHeader,
- _In_opt_ __drv_aliasesMem PULONG BitMapBuffer,
- _In_opt_ ULONG SizeOfBitMap);
- _IRQL_requires_max_(DISPATCH_LEVEL)
+ #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+ #if (NTDDI_VERSION >= NTDDI_WIN7)
+
+ _IRQL_requires_max_(PASSIVE_LEVEL)
+ _Must_inspect_result_
NTSYSAPI
- VOID
+ NTSTATUS
NTAPI
- RtlInitString(
- _Out_ PSTRING DestinationString,
- _In_opt_z_ __drv_aliasesMem PCSZ SourceString);
+ RtlUnicodeToUTF8N(
+ _Out_writes_bytes_to_(UTF8StringMaxByteCount, *UTF8StringActualByteCount)
+ PCHAR UTF8StringDestination,
+ _In_ ULONG UTF8StringMaxByteCount,
+ _Out_ PULONG UTF8StringActualByteCount,
+ _In_reads_bytes_(UnicodeStringByteCount) PCWCH UnicodeStringSource,
+ _In_ ULONG UnicodeStringByteCount);
_IRQL_requires_max_(PASSIVE_LEVEL)
- _At_(String->MaximumLength, _Const_)
+ _Must_inspect_result_
NTSYSAPI
NTSTATUS
NTAPI
- RtlIntegerToUnicodeString(
- _In_ ULONG Value,
- _In_opt_ ULONG Base,
- _Inout_ PUNICODE_STRING String);
+ RtlUTF8ToUnicodeN(
+ _Out_writes_bytes_to_(UnicodeStringMaxByteCount, *UnicodeStringActualByteCount)
+ PWSTR UnicodeStringDestination,
+ _In_ ULONG UnicodeStringMaxByteCount,
+ _Out_ PULONG UnicodeStringActualByteCount,
+ _In_reads_bytes_(UTF8StringByteCount) PCCH UTF8StringSource,
+ _In_ ULONG UTF8StringByteCount);
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _At_(String->MaximumLength, _Const_)
NTSYSAPI
- NTSTATUS
+ ULONG64
NTAPI
- RtlInt64ToUnicodeString(
- _In_ ULONGLONG Value,
- _In_opt_ ULONG Base,
- _Inout_ PUNICODE_STRING String);
+ RtlGetEnabledExtendedFeatures(
+ IN ULONG64 FeatureMask);
- #ifdef _WIN64
- #define RtlIntPtrToUnicodeString(Value, Base, String) \
- RtlInt64ToUnicodeString(Value, Base, String)
- #else
- #define RtlIntPtrToUnicodeString(Value, Base, String) \
- RtlIntegerToUnicodeString(Value, Base, String)
- #endif
- /* BOOLEAN
- * RtlIsZeroLuid(
- * IN PLUID L1);
- */
- #define RtlIsZeroLuid(_L1) \
- ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
+ #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- _IRQL_requires_max_(APC_LEVEL)
- NTSYSAPI
- ULONG
- NTAPI
- RtlLengthSecurityDescriptor(
- _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
- NTSYSAPI
- ULONG
- NTAPI
- RtlNumberOfClearBits(
- _In_ PRTL_BITMAP BitMapHeader);
+ #if !defined(MIDL_PASS)
+ /* inline funftions */
+ //DECLSPEC_DEPRECATED_DDK_WINXP
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlConvertLongToLargeInteger(
+ _In_ LONG SignedInteger)
+ {
+ LARGE_INTEGER ret;
+ ret.QuadPart = SignedInteger;
+ return ret;
+ }
- NTSYSAPI
+ //DECLSPEC_DEPRECATED_DDK_WINXP
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlConvertUlongToLargeInteger(
+ _In_ ULONG UnsignedInteger)
+ {
+ LARGE_INTEGER ret;
+ ret.QuadPart = UnsignedInteger;
+ return ret;
+ }
+
+ //DECLSPEC_DEPRECATED_DDK_WINXP
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlLargeIntegerShiftLeft(
+ _In_ LARGE_INTEGER LargeInteger,
+ _In_ CCHAR ShiftCount)
+ {
+ LARGE_INTEGER Result;
+
+ Result.QuadPart = LargeInteger.QuadPart << ShiftCount;
+ return Result;
+ }
+
+ //DECLSPEC_DEPRECATED_DDK_WINXP
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlLargeIntegerShiftRight(
+ _In_ LARGE_INTEGER LargeInteger,
+ _In_ CCHAR ShiftCount)
+ {
+ LARGE_INTEGER Result;
+
+ Result.QuadPart = (ULONG64)LargeInteger.QuadPart >> ShiftCount;
+ return Result;
+ }
+
+ //DECLSPEC_DEPRECATED_DDK
+ static __inline
ULONG
- NTAPI
- RtlNumberOfSetBits(
- _In_ PRTL_BITMAP BitMapHeader);
+ NTAPI_INLINE
+ RtlEnlargedUnsignedDivide(
+ _In_ ULARGE_INTEGER Dividend,
+ _In_ ULONG Divisor,
+ _Out_opt_ PULONG Remainder)
+ {
+ if (Remainder)
+ *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+ return (ULONG)(Dividend.QuadPart / Divisor);
+ }
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlQueryRegistryValues(
- _In_ ULONG RelativeTo,
- _In_ PCWSTR Path,
- _Inout_ _At_(*(*QueryTable).EntryContext, _Pre_unknown_)
- PRTL_QUERY_REGISTRY_TABLE QueryTable,
- _In_opt_ PVOID Context,
- _In_opt_ PVOID Environment);
+ //DECLSPEC_DEPRECATED_DDK
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlLargeIntegerNegate(
+ _In_ LARGE_INTEGER Subtrahend)
+ {
+ LARGE_INTEGER Difference;
- #define SHORT_SIZE (sizeof(USHORT))
- #define SHORT_MASK (SHORT_SIZE - 1)
- #define LONG_SIZE (sizeof(LONG))
- #define LONGLONG_SIZE (sizeof(LONGLONG))
- #define LONG_MASK (LONG_SIZE - 1)
- #define LONGLONG_MASK (LONGLONG_SIZE - 1)
- #define LOWBYTE_MASK 0x00FF
+ Difference.QuadPart = -Subtrahend.QuadPart;
+ return Difference;
+ }
- #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
- #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
- #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
- #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
+ //DECLSPEC_DEPRECATED_DDK
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlLargeIntegerSubtract(
+ _In_ LARGE_INTEGER Minuend,
+ _In_ LARGE_INTEGER Subtrahend)
+ {
+ LARGE_INTEGER Difference;
- NTSYSAPI
+ Difference.QuadPart = Minuend.QuadPart - Subtrahend.QuadPart;
+ return Difference;
+ }
+
+ //DECLSPEC_DEPRECATED_DDK
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlEnlargedUnsignedMultiply(
+ _In_ ULONG Multiplicand,
+ _In_ ULONG Multiplier)
+ {
+ LARGE_INTEGER ret;
+ ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+ return ret;
+ }
+
+ //DECLSPEC_DEPRECATED_DDK
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlEnlargedIntegerMultiply(
+ _In_ LONG Multiplicand,
+ _In_ LONG Multiplier)
+ {
+ LARGE_INTEGER ret;
+ ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
+ return ret;
+ }
+
+ _At_(AnsiString->Buffer, _Post_equal_to_(Buffer))
+ _At_(AnsiString->Length, _Post_equal_to_(0))
+ _At_(AnsiString->MaximumLength, _Post_equal_to_(BufferSize))
+ FORCEINLINE
VOID
- NTAPI
- RtlSetAllBits(
- _In_ PRTL_BITMAP BitMapHeader);
+ RtlInitEmptyAnsiString(
+ _Out_ PANSI_STRING AnsiString,
+ _Pre_maybenull_ _Pre_readable_size_(BufferSize) __drv_aliasesMem PCHAR Buffer,
+ _In_ USHORT BufferSize)
+ {
+ AnsiString->Length = 0;
+ AnsiString->MaximumLength = BufferSize;
+ AnsiString->Buffer = Buffer;
+ }
- NTSYSAPI
+ _At_(UnicodeString->Buffer, _Post_equal_to_(Buffer))
+ _At_(UnicodeString->Length, _Post_equal_to_(0))
+ _At_(UnicodeString->MaximumLength, _Post_equal_to_(BufferSize))
+ FORCEINLINE
VOID
- NTAPI
- RtlSetBits(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToSet) ULONG StartingIndex,
- _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToSet);
+ RtlInitEmptyUnicodeString(
+ _Out_ PUNICODE_STRING UnicodeString,
+ _Writable_bytes_(BufferSize)
+ _When_(BufferSize != 0, _Notnull_)
+ __drv_aliasesMem PWSTR Buffer,
+ _In_ USHORT BufferSize)
+ {
+ UnicodeString->Length = 0;
+ UnicodeString->MaximumLength = BufferSize;
+ UnicodeString->Buffer = Buffer;
+ }
+
+ #if defined(_AMD64_) || defined(_IA64_)
+
+
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlExtendedIntegerMultiply(
+ _In_ LARGE_INTEGER Multiplicand,
+ _In_ LONG Multiplier)
+ {
+ LARGE_INTEGER ret;
+ ret.QuadPart = Multiplicand.QuadPart * Multiplier;
+ return ret;
+ }
+
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlExtendedLargeIntegerDivide(
+ _In_ LARGE_INTEGER Dividend,
+ _In_ ULONG Divisor,
+ _Out_opt_ PULONG Remainder)
+ {
+ LARGE_INTEGER ret;
+ ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
+ if (Remainder)
+ *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
+ return ret;
+ }
+
+
+
+ #endif /* defined(_AMD64_) || defined(_IA64_) */
- _IRQL_requires_max_(APC_LEVEL)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlSetDaclSecurityDescriptor(
- _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
- _In_ BOOLEAN DaclPresent,
- _In_opt_ PACL Dacl,
- _In_opt_ BOOLEAN DaclDefaulted);
#if defined(_AMD64_)
- /* VOID
- * RtlStoreUlong(
- * IN PULONG Address,
- * IN ULONG Value);
- */
- #define RtlStoreUlong(Address,Value) \
- *(ULONG UNALIGNED *)(Address) = (Value)
+ #define MultiplyHigh __mulh
+ #define UnsignedMultiplyHigh __umulh
- /* VOID
- * RtlStoreUlonglong(
- * IN OUT PULONGLONG Address,
- * ULONGLONG Value);
- */
- #define RtlStoreUlonglong(Address,Value) \
- *(ULONGLONG UNALIGNED *)(Address) = (Value)
+ //DECLSPEC_DEPRECATED_DDK
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlExtendedMagicDivide(
+ _In_ LARGE_INTEGER Dividend,
+ _In_ LARGE_INTEGER MagicDivisor,
+ _In_ CCHAR ShiftCount)
+ {
+ LARGE_INTEGER ret;
+ ULONG64 ret64;
+ BOOLEAN Pos;
+ Pos = (Dividend.QuadPart >= 0);
+ ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart,
+ MagicDivisor.QuadPart);
+ ret64 >>= ShiftCount;
+ ret.QuadPart = Pos ? ret64 : -(LONG64)ret64;
+ return ret;
+ }
+ #endif
- /* VOID
- * RtlStoreUshort(
- * IN PUSHORT Address,
- * IN USHORT Value);
- */
- #define RtlStoreUshort(Address,Value) \
- *(USHORT UNALIGNED *)(Address) = (Value)
+ //DECLSPEC_DEPRECATED_DDK
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlLargeIntegerAdd(
+ _In_ LARGE_INTEGER Addend1,
+ _In_ LARGE_INTEGER Addend2)
+ {
+ LARGE_INTEGER ret;
+ ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart;
+ return ret;
+ }
/* VOID
- * RtlRetrieveUshort(
- * PUSHORT DestinationAddress,
- * PUSHORT SourceAddress);
+ * RtlLargeIntegerAnd(
+ * IN OUT LARGE_INTEGER Result,
+ * IN LARGE_INTEGER Source,
+ * IN LARGE_INTEGER Mask);
*/
- #define RtlRetrieveUshort(DestAddress,SrcAddress) \
- *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
+ #define RtlLargeIntegerAnd(Result, Source, Mask) \
+ Result.QuadPart = Source.QuadPart & Mask.QuadPart
- /* VOID
- * RtlRetrieveUlong(
- * PULONG DestinationAddress,
- * PULONG SourceAddress);
+ //DECLSPEC_DEPRECATED_DDK
+ static __inline
+ LARGE_INTEGER
+ NTAPI_INLINE
+ RtlLargeIntegerArithmeticShift(
+ _In_ LARGE_INTEGER LargeInteger,
+ _In_ CCHAR ShiftCount)
+ {
+ LARGE_INTEGER ret;
+ ret.QuadPart = LargeInteger.QuadPart >> ShiftCount;
+ return ret;
+ }
+
+ /* BOOLEAN
+ * RtlLargeIntegerEqualTo(
+ * IN LARGE_INTEGER Operand1,
+ * IN LARGE_INTEGER Operand2);
*/
- #define RtlRetrieveUlong(DestAddress,SrcAddress) \
- *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
+ #define RtlLargeIntegerEqualTo(X,Y) \
+ (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
+ FORCEINLINE
+ PVOID
+ RtlSecureZeroMemory(
+ _Out_writes_bytes_all_(Size) PVOID Pointer,
+ _In_ SIZE_T Size)
+ {
+ volatile char* vptr = (volatile char*)Pointer;
+ #if defined(_M_AMD64)
+ __stosb((PUCHAR)vptr, 0, Size);
#else
+ char * endptr = (char *)vptr + Size;
+ while (vptr < endptr) {
+ *vptr = 0; vptr++;
+ }
+ #endif
+ return Pointer;
+ }
- #define RtlStoreUlong(Address,Value) \
- if ((ULONG_PTR)(Address) & LONG_MASK) { \
- ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
- ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
- ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
- ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
- } \
- else { \
- *((PULONG)(Address)) = (ULONG) (Value); \
- }
+ #if defined(_M_AMD64)
+ _Must_inspect_result_
+ FORCEINLINE
+ BOOLEAN
+ RtlCheckBit(
+ _In_ PRTL_BITMAP BitMapHeader,
+ _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitPosition)
+ {
+ return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition);
+ }
+ #else
+ #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
+ #endif /* defined(_M_AMD64) */
- #define RtlStoreUlonglong(Address,Value) \
- if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
- RtlStoreUlong((ULONG_PTR)(Address), \
- (ULONGLONG)(Value) & 0xFFFFFFFF); \
- RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
- (ULONGLONG)(Value) >> 32); \
- } else { \
- *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
- }
+ #define RtlLargeIntegerGreaterThan(X,Y) ( \
+ (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
+ ((X).HighPart > (Y).HighPart) \
+ )
- #define RtlStoreUshort(Address,Value) \
- if ((ULONG_PTR)(Address) & SHORT_MASK) { \
- ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
- ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
- } \
- else { \
- *((PUSHORT) (Address)) = (USHORT)Value; \
- }
+ #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
+ (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
+ ((X).HighPart > (Y).HighPart) \
+ )
- #define RtlRetrieveUshort(DestAddress,SrcAddress) \
- if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
- { \
- ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
- ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
- } \
- else \
- { \
- *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
- }
+ #define RtlLargeIntegerNotEqualTo(X,Y) ( \
+ (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
+ )
- #define RtlRetrieveUlong(DestAddress,SrcAddress) \
- if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
- { \
- ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
- ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
- ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
- ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
- } \
- else \
- { \
- *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
- }
+ #define RtlLargeIntegerLessThan(X,Y) ( \
+ (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
+ ((X).HighPart < (Y).HighPart) \
+ )
- #endif /* defined(_AMD64_) */
+ #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
+ (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
+ ((X).HighPart < (Y).HighPart) \
+ )
- #ifdef _WIN64
- /* VOID
- * RtlStoreUlongPtr(
- * IN OUT PULONG_PTR Address,
- * IN ULONG_PTR Value);
- */
- #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
- #else
- #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
- #endif /* _WIN64 */
+ #define RtlLargeIntegerGreaterThanZero(X) ( \
+ (((X).HighPart == 0) && ((X).LowPart > 0)) || \
+ ((X).HighPart > 0 ) \
+ )
- _Success_(return!=FALSE)
- _Must_inspect_result_
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlTimeFieldsToTime(
- _In_ PTIME_FIELDS TimeFields,
- _Out_ PLARGE_INTEGER Time);
+ #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
- NTSYSAPI
- VOID
- NTAPI
- RtlTimeToTimeFields(
- _In_ PLARGE_INTEGER Time,
- _Out_ PTIME_FIELDS TimeFields);
+ #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
+
+ #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
+
+ #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
+
+ #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
+
+ #endif /* !defined(MIDL_PASS) */
+
+ /* Byte Swap Functions */
+ #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
+ ((defined(_M_AMD64) || defined(_M_IA64)) \
+ && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
+
+ #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
+ #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
+ #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
+
+ #endif
+
+ #if DBG
- NTSYSAPI
- ULONG
- FASTCALL
- RtlUlongByteSwap(
- _In_ ULONG Source);
+ #define RTL_VERIFY(exp) \
+ ((!(exp)) ? \
+ RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
- NTSYSAPI
- ULONGLONG
- FASTCALL
- RtlUlonglongByteSwap(
- _In_ ULONGLONG Source);
+ #define RTL_VERIFYMSG(msg, exp) \
+ ((!(exp)) ? \
+ RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE)
- _When_(AllocateDestinationString,
- _At_(DestinationString->MaximumLength,
- _Out_range_(<=, (SourceString->MaximumLength / sizeof(WCHAR)))))
- _When_(!AllocateDestinationString,
- _At_(DestinationString->Buffer, _Const_)
- _At_(DestinationString->MaximumLength, _Const_))
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _When_(AllocateDestinationString, _Must_inspect_result_)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlUnicodeStringToAnsiString(
- _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
- _When_(!AllocateDestinationString, _Inout_)
- PANSI_STRING DestinationString,
- _In_ PCUNICODE_STRING SourceString,
- _In_ BOOLEAN AllocateDestinationString);
+ #define RTL_SOFT_VERIFY(exp) \
+ ((!(exp)) ? \
+ DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- ULONG
- NTAPI
- RtlxUnicodeStringToAnsiSize(
- _In_ PCUNICODE_STRING UnicodeString);
+ #define RTL_SOFT_VERIFYMSG(msg, exp) \
+ (VOID)((!(exp)) ? \
+ DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
- #define RtlUnicodeStringToAnsiSize(String) ( \
- NLS_MB_CODE_PAGE_TAG ? \
- RtlxUnicodeStringToAnsiSize(String) : \
- ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
- )
+ #define ASSERT(exp) ((void)RTL_VERIFY(exp))
+ #define ASSERTMSG(msg, exp) ((void)RTL_VERIFYMSG(msg, exp))
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlUnicodeStringToInteger(
- _In_ PCUNICODE_STRING String,
- _In_opt_ ULONG Base,
- _Out_ PULONG Value);
+ #define RTL_SOFT_ASSERT(exp) ((void)RTL_SOFT_VERIFY(exp))
+ #define RTL_SOFT_ASSERTMSG(msg, exp) ((void)RTL_SOFT_VERIFYMSG(msg, exp))
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- WCHAR
- NTAPI
- RtlUpcaseUnicodeChar(
- _In_ WCHAR SourceCharacter);
+ #if defined(_MSC_VER)
+ # define __assert_annotationA(msg) __annotation(L"Debug", L"AssertFail", L ## msg)
+ # define __assert_annotationW(msg) __annotation(L"Debug", L"AssertFail", msg)
+ #else
+ # define __assert_annotationA(msg) \
+ DbgPrint("Assertion %s(%d): %s", __FILE__, __LINE__, msg)
+ # define __assert_annotationW(msg) \
+ DbgPrint("Assertion %s(%d): %S", __FILE__, __LINE__, msg)
+ #endif
- NTSYSAPI
- USHORT
- FASTCALL
- RtlUshortByteSwap(
- _In_ USHORT Source);
+ #define NT_VERIFY(exp) \
+ ((!(exp)) ? \
+ (__assert_annotationA(#exp), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE)
- _IRQL_requires_max_(APC_LEVEL)
- _Must_inspect_result_
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlValidRelativeSecurityDescriptor(
- _In_reads_bytes_(SecurityDescriptorLength) PSECURITY_DESCRIPTOR SecurityDescriptorInput,
- _In_ ULONG SecurityDescriptorLength,
- _In_ SECURITY_INFORMATION RequiredInformation);
+ #define NT_VERIFYMSG(msg, exp) \
+ ((!(exp)) ? \
+ (__assert_annotationA(msg), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE)
- _IRQL_requires_max_(APC_LEVEL)
- _Must_inspect_result_
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlValidSecurityDescriptor(
- _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
+ #define NT_VERIFYMSGW(msg, exp) \
+ ((!(exp)) ? \
+ (__assert_annotationW(msg), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE)
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlGetVersion(
- _Out_
- _At_(lpVersionInformation->dwOSVersionInfoSize, _Pre_ _Valid_)
- _When_(lpVersionInformation->dwOSVersionInfoSize == sizeof(RTL_OSVERSIONINFOEXW),
- _At_((PRTL_OSVERSIONINFOEXW)lpVersionInformation, _Out_))
- PRTL_OSVERSIONINFOW lpVersionInformation);
+ #define NT_ASSERT(exp) ((void)NT_VERIFY(exp))
+ #define NT_ASSERTMSG(msg, exp) ((void)NT_VERIFYMSG(msg, exp))
+ #define NT_ASSERTMSGW(msg, exp) ((void)NT_VERIFYMSGW(msg, exp))
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlVerifyVersionInfo(
- _In_ PRTL_OSVERSIONINFOEXW VersionInfo,
- _In_ ULONG TypeMask,
- _In_ ULONGLONG ConditionMask);
+ #else /* !DBG */
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlWriteRegistryValue(
- _In_ ULONG RelativeTo,
- _In_ PCWSTR Path,
- _In_z_ PCWSTR ValueName,
- _In_ ULONG ValueType,
- _In_reads_bytes_opt_(ValueLength) PVOID ValueData,
- _In_ ULONG ValueLength);
+ #define ASSERT(exp) ((VOID) 0)
+ #define ASSERTMSG(msg, exp) ((VOID) 0)
+ #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
+ #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
+ #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
+ #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+ #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
+ #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
- #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
- NTSYSAPI
- VOID
- FASTCALL
- RtlPrefetchMemoryNonTemporal(
- _In_ PVOID Source,
- _In_ SIZE_T Length);
- #endif
+ #define NT_ASSERT(exp) ((VOID)0)
+ #define NT_ASSERTMSG(msg, exp) ((VOID)0)
+ #define NT_ASSERTMSGW(msg, exp) ((VOID)0)
+ #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
+ #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
+ #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
- #if (NTDDI_VERSION >= NTDDI_WINXP)
+ #endif /* DBG */
+ #define InitializeListHead32(ListHead) (\
+ (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
- NTSYSAPI
+ #if !defined(_WINBASE_)
+
+ #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
+
+ NTKERNELAPI
VOID
- NTAPI
- RtlClearBit(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber);
+ InitializeSListHead(
+ _Out_ PSLIST_HEADER SListHead);
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- WCHAR
- NTAPI
- RtlDowncaseUnicodeChar(
- _In_ WCHAR SourceCharacter);
+ #else
- NTSYSAPI
+ FORCEINLINE
VOID
- NTAPI
- RtlSetBit(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber);
+ InitializeSListHead(
+ _Out_ PSLIST_HEADER SListHead)
+ {
+ #if defined(_IA64_)
+ ULONG64 FeatureBits;
+ #endif
- _Must_inspect_result_
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlTestBit(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber);
+ #if defined(_WIN64)
+ if (((ULONG_PTR)SListHead & 0xf) != 0) {
+ RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT);
+ }
+ #endif
+ RtlZeroMemory(SListHead, sizeof(SLIST_HEADER));
+ #if defined(_IA64_)
+ FeatureBits = __getReg(CV_IA64_CPUID4);
+ if ((FeatureBits & KF_16BYTE_INSTR) != 0) {
+ SListHead->Header16.HeaderType = 1;
+ SListHead->Header16.Init = 1;
+ }
+ #endif
+ }
- _IRQL_requires_max_(PASSIVE_LEVEL)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlHashUnicodeString(
- _In_ CONST UNICODE_STRING *String,
- _In_ BOOLEAN CaseInSensitive,
- _In_ ULONG HashAlgorithm,
- _Out_ PULONG HashValue);
+ #endif
+
+ #if defined(_WIN64)
+ #define InterlockedPopEntrySList(Head) \
+ ExpInterlockedPopEntrySList(Head)
+ #define InterlockedPushEntrySList(Head, Entry) \
+ ExpInterlockedPushEntrySList(Head, Entry)
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+ #define InterlockedFlushSList(Head) \
+ ExpInterlockedFlushSList(Head)
+ #define QueryDepthSList(Head) \
+ ExQueryDepthSList(Head)
- #if (NTDDI_VERSION >= NTDDI_VISTA)
+ #else /* !defined(_WIN64) */
- NTSYSAPI
- ULONG
- NTAPI
- RtlNumberOfSetBitsUlongPtr(
- _In_ ULONG_PTR Target);
+ NTKERNELAPI
+ PSLIST_ENTRY
+ FASTCALL
+ InterlockedPopEntrySList(
+ _Inout_ PSLIST_HEADER ListHead);
- NTSYSAPI
- ULONGLONG
- NTAPI
- RtlIoDecodeMemIoResource(
- _In_ struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
- _Out_opt_ PULONGLONG Alignment,
- _Out_opt_ PULONGLONG MinimumAddress,
- _Out_opt_ PULONGLONG MaximumAddress);
+ NTKERNELAPI
+ PSLIST_ENTRY
+ FASTCALL
+ InterlockedPushEntrySList(
+ _Inout_ PSLIST_HEADER ListHead,
+ _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlIoEncodeMemIoResource(
- _In_ struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
- _In_ UCHAR Type,
- _In_ ULONGLONG Length,
- _In_ ULONGLONG Alignment,
- _In_ ULONGLONG MinimumAddress,
- _In_ ULONGLONG MaximumAddress);
+ #define InterlockedFlushSList(ListHead) \
+ ExInterlockedFlushSList(ListHead)
- NTSYSAPI
- ULONGLONG
- NTAPI
- RtlCmDecodeMemIoResource(
- _In_ struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor,
- _Out_opt_ PULONGLONG Start);
+ #define QueryDepthSList(Head) \
+ ExQueryDepthSList(Head)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlFindClosestEncodableLength(
- _In_ ULONGLONG SourceLength,
- _Out_ PULONGLONG TargetLength);
+ #endif /* !defined(_WIN64) */
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlCmEncodeMemIoResource(
- _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
- _In_ UCHAR Type,
- _In_ ULONGLONG Length,
- _In_ ULONGLONG Start);
+ #endif /* !defined(_WINBASE_) */
+ #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
+ #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
+ #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
+ ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
+ #define RTL_CONTEXT_OFFSET(Context, Chunk) \
+ RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
+ #define RTL_CONTEXT_LENGTH(Context, Chunk) \
+ RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
+ #define RTL_CONTEXT_CHUNK(Context, Chunk) \
+ RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
+ (PCONTEXT_EX)(Context + 1), \
+ Chunk)
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+ BOOLEAN
+ RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable)(
+ _In_ ULONG Version);
- #if (NTDDI_VERSION >= NTDDI_WIN7)
+ BOOLEAN
+ RTLVERLIB_DDI(RtlIsServicePackVersionInstalled)(
+ _In_ ULONG Version);
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlUnicodeToUTF8N(
- _Out_writes_bytes_to_(UTF8StringMaxByteCount, *UTF8StringActualByteCount)
- PCHAR UTF8StringDestination,
- _In_ ULONG UTF8StringMaxByteCount,
- _Out_ PULONG UTF8StringActualByteCount,
- _In_reads_bytes_(UnicodeStringByteCount) PCWCH UnicodeStringSource,
- _In_ ULONG UnicodeStringByteCount);
+ #ifndef RtlIsNtDdiVersionAvailable
+ #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
+ #endif
- _IRQL_requires_max_(PASSIVE_LEVEL)
- _Must_inspect_result_
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlUTF8ToUnicodeN(
- _Out_writes_bytes_to_(UnicodeStringMaxByteCount, *UnicodeStringActualByteCount)
- PWSTR UnicodeStringDestination,
- _In_ ULONG UnicodeStringMaxByteCount,
- _Out_ PULONG UnicodeStringActualByteCount,
- _In_reads_bytes_(UTF8StringByteCount) PCCH UTF8StringSource,
- _In_ ULONG UTF8StringByteCount);
+ #ifndef RtlIsServicePackVersionInstalled
+ #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
+ #endif
- NTSYSAPI
- ULONG64
- NTAPI
- RtlGetEnabledExtendedFeatures(
- IN ULONG64 FeatureMask);
+ #define RtlInterlockedSetBits(Flags, Flag) \
+ InterlockedOr((PLONG)(Flags), Flag)
+ #define RtlInterlockedAndBits(Flags, Flag) \
+ InterlockedAnd((PLONG)(Flags), Flag)
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+ #define RtlInterlockedClearBits(Flags, Flag) \
+ RtlInterlockedAndBits(Flags, ~(Flag))
+ #define RtlInterlockedXorBits(Flags, Flag) \
+ InterlockedXor(Flags, Flag)
- #if !defined(MIDL_PASS)
- /* inline funftions */
- //DECLSPEC_DEPRECATED_DDK_WINXP
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlConvertLongToLargeInteger(
- _In_ LONG SignedInteger)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = SignedInteger;
- return ret;
- }
+ #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
+ (VOID) RtlInterlockedSetBits(Flags, Flag)
- //DECLSPEC_DEPRECATED_DDK_WINXP
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlConvertUlongToLargeInteger(
- _In_ ULONG UnsignedInteger)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = UnsignedInteger;
- return ret;
- }
+ #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
+ (VOID) RtlInterlockedAndBits(Flags, Flag)
- //DECLSPEC_DEPRECATED_DDK_WINXP
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerShiftLeft(
- _In_ LARGE_INTEGER LargeInteger,
- _In_ CCHAR ShiftCount)
- {
- LARGE_INTEGER Result;
+ #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
+ RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
- Result.QuadPart = LargeInteger.QuadPart << ShiftCount;
- return Result;
- }
- //DECLSPEC_DEPRECATED_DDK_WINXP
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerShiftRight(
- _In_ LARGE_INTEGER LargeInteger,
- _In_ CCHAR ShiftCount)
- {
- LARGE_INTEGER Result;
+ /******************************************************************************
+ * Kernel Functions *
+ ******************************************************************************/
+ #if defined(_M_IX86)
+ /** Kernel definitions for x86 **/
- Result.QuadPart = (ULONG64)LargeInteger.QuadPart >> ShiftCount;
- return Result;
- }
+ /* Interrupt request levels */
+ #define PASSIVE_LEVEL 0
+ #define LOW_LEVEL 0
+ #define APC_LEVEL 1
+ #define DISPATCH_LEVEL 2
+ #define CMCI_LEVEL 5
+ #define PROFILE_LEVEL 27
+ #define CLOCK1_LEVEL 28
+ #define CLOCK2_LEVEL 28
+ #define IPI_LEVEL 29
+ #define POWER_LEVEL 30
+ #define HIGH_LEVEL 31
+ #define CLOCK_LEVEL CLOCK2_LEVEL
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- ULONG
- NTAPI_INLINE
- RtlEnlargedUnsignedDivide(
- _In_ ULARGE_INTEGER Dividend,
- _In_ ULONG Divisor,
- _Out_opt_ PULONG Remainder)
- {
- if (Remainder)
- *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
- return (ULONG)(Dividend.QuadPart / Divisor);
- }
+ #define KIP0PCRADDRESS 0xffdff000
+ #define KI_USER_SHARED_DATA 0xffdf0000
+ #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerNegate(
- _In_ LARGE_INTEGER Subtrahend)
- {
- LARGE_INTEGER Difference;
+ #define PAGE_SIZE 0x1000
+ #define PAGE_SHIFT 12L
+ #define KeGetDcacheFillSize() 1L
- Difference.QuadPart = -Subtrahend.QuadPart;
- return Difference;
- }
+ #define EFLAG_SIGN 0x8000
+ #define EFLAG_ZERO 0x4000
+ #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerSubtract(
- _In_ LARGE_INTEGER Minuend,
- _In_ LARGE_INTEGER Subtrahend)
- {
- LARGE_INTEGER Difference;
+ #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
+ #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
+ #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
- Difference.QuadPart = Minuend.QuadPart - Subtrahend.QuadPart;
- return Difference;
- }
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlEnlargedUnsignedMultiply(
- _In_ ULONG Multiplicand,
- _In_ ULONG Multiplier)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
- return ret;
- }
+ typedef struct _KFLOATING_SAVE {
+ ULONG ControlWord;
+ ULONG StatusWord;
+ ULONG ErrorOffset;
+ ULONG ErrorSelector;
+ ULONG DataOffset;
+ ULONG DataSelector;
+ ULONG Cr0NpxState;
+ ULONG Spare1;
+ } KFLOATING_SAVE, *PKFLOATING_SAVE;
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlEnlargedIntegerMultiply(
- _In_ LONG Multiplicand,
- _In_ LONG Multiplier)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
- return ret;
- }
+ extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
- _At_(AnsiString->Buffer, _Post_equal_to_(Buffer))
- _At_(AnsiString->Length, _Post_equal_to_(0))
- _At_(AnsiString->MaximumLength, _Post_equal_to_(BufferSize))
- FORCEINLINE
- VOID
- RtlInitEmptyAnsiString(
- _Out_ PANSI_STRING AnsiString,
- _Pre_maybenull_ _Pre_readable_size_(BufferSize) __drv_aliasesMem PCHAR Buffer,
- _In_ USHORT BufferSize)
- {
- AnsiString->Length = 0;
- AnsiString->MaximumLength = BufferSize;
- AnsiString->Buffer = Buffer;
- }
+ #define YieldProcessor _mm_pause
- _At_(UnicodeString->Buffer, _Post_equal_to_(Buffer))
- _At_(UnicodeString->Length, _Post_equal_to_(0))
- _At_(UnicodeString->MaximumLength, _Post_equal_to_(BufferSize))
FORCEINLINE
VOID
- RtlInitEmptyUnicodeString(
- _Out_ PUNICODE_STRING UnicodeString,
- _Writable_bytes_(BufferSize)
- _When_(BufferSize != 0, _Notnull_)
- __drv_aliasesMem PWSTR Buffer,
- _In_ USHORT BufferSize)
+ KeMemoryBarrier(VOID)
{
- UnicodeString->Length = 0;
- UnicodeString->MaximumLength = BufferSize;
- UnicodeString->Buffer = Buffer;
- }
+ LONG Barrier, *Dummy = &Barrier;
+ UNREFERENCED_LOCAL_VARIABLE(Dummy);
- #if defined(_AMD64_) || defined(_IA64_)
+ #if defined(__GNUC__)
+ __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
+ #elif defined(_MSC_VER)
+ __asm xchg [Barrier], eax
+ #endif
+ }
+ #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlExtendedIntegerMultiply(
- _In_ LARGE_INTEGER Multiplicand,
- _In_ LONG Multiplier)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = Multiplicand.QuadPart * Multiplier;
- return ret;
- }
+ _IRQL_requires_max_(HIGH_LEVEL)
+ _IRQL_saves_
+ NTHALAPI
+ KIRQL
+ NTAPI
+ KeGetCurrentIrql(VOID);
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlExtendedLargeIntegerDivide(
- _In_ LARGE_INTEGER Dividend,
- _In_ ULONG Divisor,
- _Out_opt_ PULONG Remainder)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
- if (Remainder)
- *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
- return ret;
- }
+ _IRQL_requires_max_(HIGH_LEVEL)
+ NTHALAPI
+ VOID
+ FASTCALL
+ KfLowerIrql(
+ _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql);
+ #define KeLowerIrql(a) KfLowerIrql(a)
+ _IRQL_requires_max_(HIGH_LEVEL)
+ _IRQL_raises_(NewIrql)
+ _IRQL_saves_
+ NTHALAPI
+ KIRQL
+ FASTCALL
+ KfRaiseIrql(
+ _In_ KIRQL NewIrql);
+ #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _IRQL_saves_
+ _IRQL_raises_(DISPATCH_LEVEL)
+ NTHALAPI
+ KIRQL
+ NTAPI
+ KeRaiseIrqlToDpcLevel(VOID);
- #endif /* defined(_AMD64_) || defined(_IA64_) */
+ NTHALAPI
+ KIRQL
+ NTAPI
+ KeRaiseIrqlToSynchLevel(VOID);
+ _Requires_lock_not_held_(*SpinLock)
+ _Acquires_lock_(*SpinLock)
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _IRQL_saves_
+ _IRQL_raises_(DISPATCH_LEVEL)
+ NTHALAPI
+ KIRQL
+ FASTCALL
+ KfAcquireSpinLock(
+ _Inout_ PKSPIN_LOCK SpinLock);
+ #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
- #if defined(_AMD64_)
+ _Requires_lock_held_(*SpinLock)
+ _Releases_lock_(*SpinLock)
+ _IRQL_requires_(DISPATCH_LEVEL)
+ NTHALAPI
+ VOID
+ FASTCALL
+ KfReleaseSpinLock(
+ _Inout_ PKSPIN_LOCK SpinLock,
+ _In_ _IRQL_restores_ KIRQL NewIrql);
+ #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
- #define MultiplyHigh __mulh
- #define UnsignedMultiplyHigh __umulh
+ _Requires_lock_not_held_(*SpinLock)
+ _Acquires_lock_(*SpinLock)
+ _IRQL_requires_min_(DISPATCH_LEVEL)
+ NTKERNELAPI
+ VOID
+ FASTCALL
+ KefAcquireSpinLockAtDpcLevel(
+ _Inout_ PKSPIN_LOCK SpinLock);
+ #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlExtendedMagicDivide(
- _In_ LARGE_INTEGER Dividend,
- _In_ LARGE_INTEGER MagicDivisor,
- _In_ CCHAR ShiftCount)
- {
- LARGE_INTEGER ret;
- ULONG64 ret64;
- BOOLEAN Pos;
- Pos = (Dividend.QuadPart >= 0);
- ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart,
- MagicDivisor.QuadPart);
- ret64 >>= ShiftCount;
- ret.QuadPart = Pos ? ret64 : -(LONG64)ret64;
- return ret;
- }
- #endif
+ _Requires_lock_held_(*SpinLock)
+ _Releases_lock_(*SpinLock)
+ _IRQL_requires_min_(DISPATCH_LEVEL)
+ NTKERNELAPI
+ VOID
+ FASTCALL
+ KefReleaseSpinLockFromDpcLevel(
+ _Inout_ PKSPIN_LOCK SpinLock);
+ #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerAdd(
- _In_ LARGE_INTEGER Addend1,
- _In_ LARGE_INTEGER Addend2)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart;
- return ret;
- }
+ NTSYSAPI
+ PKTHREAD
+ NTAPI
+ KeGetCurrentThread(VOID);
- /* VOID
- * RtlLargeIntegerAnd(
- * IN OUT LARGE_INTEGER Result,
- * IN LARGE_INTEGER Source,
- * IN LARGE_INTEGER Mask);
- */
- #define RtlLargeIntegerAnd(Result, Source, Mask) \
- Result.QuadPart = Source.QuadPart & Mask.QuadPart
+ _Always_(_Post_satisfies_(return<=0))
+ _Must_inspect_result_
+ _IRQL_requires_max_(DISPATCH_LEVEL)
+ _Kernel_float_saved_
+ _At_(*FloatSave, _Kernel_requires_resource_not_held_(FloatState) _Kernel_acquires_resource_(FloatState))
+ NTKERNELAPI
+ NTSTATUS
+ NTAPI
+ KeSaveFloatingPointState(
+ _Out_ PKFLOATING_SAVE FloatSave);
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerArithmeticShift(
- _In_ LARGE_INTEGER LargeInteger,
- _In_ CCHAR ShiftCount)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = LargeInteger.QuadPart >> ShiftCount;
- return ret;
- }
+ _Success_(1)
+ _Kernel_float_restored_
+ _At_(*FloatSave, _Kernel_requires_resource_held_(FloatState) _Kernel_releases_resource_(FloatState))
+ NTKERNELAPI
+ NTSTATUS
+ NTAPI
+ KeRestoreFloatingPointState(
+ _In_ PKFLOATING_SAVE FloatSave);
- /* BOOLEAN
- * RtlLargeIntegerEqualTo(
- * IN LARGE_INTEGER Operand1,
- * IN LARGE_INTEGER Operand2);
+ /* VOID
+ * KeFlushIoBuffers(
+ * IN PMDL Mdl,
+ * IN BOOLEAN ReadOperation,
+ * IN BOOLEAN DmaOperation)
*/
- #define RtlLargeIntegerEqualTo(X,Y) \
- (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
+ #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
- FORCEINLINE
- PVOID
- RtlSecureZeroMemory(
- _Out_writes_bytes_all_(Size) PVOID Pointer,
- _In_ SIZE_T Size)
- {
- volatile char* vptr = (volatile char*)Pointer;
- #if defined(_M_AMD64)
- __stosb((PUCHAR)vptr, 0, Size);
- #else
- char * endptr = (char *)vptr + Size;
- while (vptr < endptr) {
- *vptr = 0; vptr++;
- }
- #endif
- return Pointer;
- }
+ /* x86 and x64 performs a 0x2C interrupt */
+ #define DbgRaiseAssertionFailure __int2c
- #if defined(_M_AMD64)
- _Must_inspect_result_
FORCEINLINE
- BOOLEAN
- RtlCheckBit(
- _In_ PRTL_BITMAP BitMapHeader,
- _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitPosition)
+ VOID
+ _KeQueryTickCount(
+ OUT PLARGE_INTEGER CurrentCount)
{
- return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition);
- }
+ for (;;) {
+ #ifdef NONAMELESSUNION
+ CurrentCount->s.HighPart = KeTickCount.High1Time;
+ CurrentCount->s.LowPart = KeTickCount.LowPart;
+ if (CurrentCount->s.HighPart == KeTickCount.High2Time) break;
#else
- #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
- #endif /* defined(_M_AMD64) */
-
- #define RtlLargeIntegerGreaterThan(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
- ((X).HighPart > (Y).HighPart) \
- )
-
- #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
- ((X).HighPart > (Y).HighPart) \
- )
+ CurrentCount->HighPart = KeTickCount.High1Time;
+ CurrentCount->LowPart = KeTickCount.LowPart;
+ if (CurrentCount->HighPart == KeTickCount.High2Time) break;
+ #endif
+ YieldProcessor();
+ }
+ }
+ #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
- #define RtlLargeIntegerNotEqualTo(X,Y) ( \
- (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
- )
- #define RtlLargeIntegerLessThan(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
- ((X).HighPart < (Y).HighPart) \
- )
- #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
- ((X).HighPart < (Y).HighPart) \
- )
- #define RtlLargeIntegerGreaterThanZero(X) ( \
- (((X).HighPart == 0) && ((X).LowPart > 0)) || \
- ((X).HighPart > 0 ) \
- )
- #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
+ #elif defined(_M_AMD64)
+ /** Kernel definitions for AMD64 **/
- #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
+ /* Interrupt request levels */
+ #define PASSIVE_LEVEL 0
+ #define LOW_LEVEL 0
+ #define APC_LEVEL 1
+ #define DISPATCH_LEVEL 2
+ #define CMCI_LEVEL 5
+ #define CLOCK_LEVEL 13
+ #define IPI_LEVEL 14
+ #define DRS_LEVEL 14
+ #define POWER_LEVEL 14
+ #define PROFILE_LEVEL 15
+ #define HIGH_LEVEL 15
- #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
+ #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
+ #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
+ #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
+ #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
+ #define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
- #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
+ #define PAGE_SIZE 0x1000
+ #define PAGE_SHIFT 12L
- #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
+ #define EFLAG_SIGN 0x8000
+ #define EFLAG_ZERO 0x4000
+ #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
- #endif /* !defined(MIDL_PASS) */
+ typedef struct _KFLOATING_SAVE {
+ ULONG Dummy;
+ } KFLOATING_SAVE, *PKFLOATING_SAVE;
- /* Byte Swap Functions */
- #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
- ((defined(_M_AMD64) || defined(_M_IA64)) \
- && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
+ typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
- #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
- #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
- #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
+ #define KeQueryInterruptTime() \
+ (*(volatile ULONG64*)SharedInterruptTime)
- #endif
+ #define KeQuerySystemTime(CurrentCount) \
+ *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
- #if DBG
+ #define KeQueryTickCount(CurrentCount) \
+ *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
- #define RTL_VERIFY(exp) \
- ((!(exp)) ? \
- RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
+ #define KeGetDcacheFillSize() 1L
- #define RTL_VERIFYMSG(msg, exp) \
- ((!(exp)) ? \
- RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE)
+ #define YieldProcessor _mm_pause
+ #define MemoryBarrier __faststorefence
+ #define FastFence __faststorefence
+ #define LoadFence _mm_lfence
+ #define MemoryFence _mm_mfence
+ #define StoreFence _mm_sfence
+ #define LFENCE_ACQUIRE() LoadFence()
- #define RTL_SOFT_VERIFY(exp) \
- ((!(exp)) ? \
- DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
+ FORCEINLINE
+ VOID
+ KeMemoryBarrier(VOID)
+ {
+ // FIXME: Do we really need lfence after the __faststorefence ?
+ FastFence();
+ LFENCE_ACQUIRE();
+ }
- #define RTL_SOFT_VERIFYMSG(msg, exp) \
- (VOID)((!(exp)) ? \
- DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
+ #define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
- #define ASSERT(exp) ((void)RTL_VERIFY(exp))
- #define ASSERTMSG(msg, exp) ((void)RTL_VERIFYMSG(msg, exp))
+ FORCEINLINE
+ KIRQL
+ KeGetCurrentIrql(VOID)
+ {
+ return (KIRQL)__readcr8();
+ }
- #define RTL_SOFT_ASSERT(exp) ((void)RTL_SOFT_VERIFY(exp))
- #define RTL_SOFT_ASSERTMSG(msg, exp) ((void)RTL_SOFT_VERIFYMSG(msg, exp))
+ FORCEINLINE
+ VOID
+ KeLowerIrql(IN KIRQL NewIrql)
+ {
+ ASSERT((KIRQL)__readcr8() >= NewIrql);
+ __writecr8(NewIrql);
+ }
- #if defined(_MSC_VER)
- # define __assert_annotationA(msg) __annotation(L"Debug", L"AssertFail", L ## msg)
- # define __assert_annotationW(msg) __annotation(L"Debug", L"AssertFail", msg)
- #else
- # define __assert_annotationA(msg) \
- DbgPrint("Assertion %s(%d): %s", __FILE__, __LINE__, msg)
- # define __assert_annotationW(msg) \
- DbgPrint("Assertion %s(%d): %S", __FILE__, __LINE__, msg)
- #endif
+ FORCEINLINE
+ KIRQL
+ KfRaiseIrql(IN KIRQL NewIrql)
+ {
+ KIRQL OldIrql;
- #define NT_VERIFY(exp) \
- ((!(exp)) ? \
- (__assert_annotationA(#exp), \
- DbgRaiseAssertionFailure(), FALSE) : TRUE)
+ OldIrql = (KIRQL)__readcr8();
+ ASSERT(OldIrql <= NewIrql);
+ __writecr8(NewIrql);
+ return OldIrql;
+ }
+ #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
- #define NT_VERIFYMSG(msg, exp) \
- ((!(exp)) ? \
- (__assert_annotationA(msg), \
- DbgRaiseAssertionFailure(), FALSE) : TRUE)
+ FORCEINLINE
+ KIRQL
+ KeRaiseIrqlToDpcLevel(VOID)
+ {
+ return KfRaiseIrql(DISPATCH_LEVEL);
+ }
- #define NT_VERIFYMSGW(msg, exp) \
- ((!(exp)) ? \
- (__assert_annotationW(msg), \
- DbgRaiseAssertionFailure(), FALSE) : TRUE)
+ FORCEINLINE
+ KIRQL
+ KeRaiseIrqlToSynchLevel(VOID)
+ {
+ return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
+ }
- #define NT_ASSERT(exp) ((void)NT_VERIFY(exp))
- #define NT_ASSERTMSG(msg, exp) ((void)NT_VERIFYMSG(msg, exp))
- #define NT_ASSERTMSGW(msg, exp) ((void)NT_VERIFYMSGW(msg, exp))
+ FORCEINLINE
+ PKTHREAD
+ KeGetCurrentThread(VOID)
+ {
+ return (struct _KTHREAD *)__readgsqword(0x188);
+ }
- #else /* !DBG */
+ FORCEINLINE
+ NTSTATUS
+ KeSaveFloatingPointState(PVOID FloatingState)
+ {
+ UNREFERENCED_PARAMETER(FloatingState);
+ return STATUS_SUCCESS;
+ }
- #define ASSERT(exp) ((VOID) 0)
- #define ASSERTMSG(msg, exp) ((VOID) 0)
+ FORCEINLINE
+ NTSTATUS
+ KeRestoreFloatingPointState(PVOID FloatingState)
+ {
+ UNREFERENCED_PARAMETER(FloatingState);
+ return STATUS_SUCCESS;
+ }
- #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
- #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
+ /* VOID
+ * KeFlushIoBuffers(
+ * IN PMDL Mdl,
+ * IN BOOLEAN ReadOperation,
+ * IN BOOLEAN DmaOperation)
+ */
+ #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
- #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
- #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+ /* x86 and x64 performs a 0x2C interrupt */
+ #define DbgRaiseAssertionFailure __int2c
- #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
- #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
+ #elif defined(_M_IA64)
+ /** Kernel definitions for IA64 **/
- #define NT_ASSERT(exp) ((VOID)0)
- #define NT_ASSERTMSG(msg, exp) ((VOID)0)
- #define NT_ASSERTMSGW(msg, exp) ((VOID)0)
+ /* Interrupt request levels */
+ #define PASSIVE_LEVEL 0
+ #define LOW_LEVEL 0
+ #define APC_LEVEL 1
+ #define DISPATCH_LEVEL 2
+ #define CMC_LEVEL 3
+ #define DEVICE_LEVEL_BASE 4
+ #define PC_LEVEL 12
+ #define IPI_LEVEL 14
+ #define DRS_LEVEL 14
+ #define CLOCK_LEVEL 13
+ #define POWER_LEVEL 15
+ #define PROFILE_LEVEL 15
+ #define HIGH_LEVEL 15
- #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
- #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
- #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
+ #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
+ extern volatile LARGE_INTEGER KeTickCount;
- #endif /* DBG */
+ #define PAUSE_PROCESSOR __yield();
- #define InitializeListHead32(ListHead) (\
- (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
+ FORCEINLINE
+ VOID
+ KeFlushWriteBuffer(VOID)
+ {
+ __mf ();
+ return;
+ }
- #if !defined(_WINBASE_)
+ NTSYSAPI
+ PKTHREAD
+ NTAPI
+ KeGetCurrentThread(VOID);
- #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
- NTKERNELAPI
- VOID
- InitializeSListHead(
- _Out_ PSLIST_HEADER SListHead);
+ #elif defined(_M_PPC)
- #else
+ /* Interrupt request levels */
+ #define PASSIVE_LEVEL 0
+ #define LOW_LEVEL 0
+ #define APC_LEVEL 1
+ #define DISPATCH_LEVEL 2
+ #define PROFILE_LEVEL 27
+ #define CLOCK1_LEVEL 28
+ #define CLOCK2_LEVEL 28
+ #define IPI_LEVEL 29
+ #define POWER_LEVEL 30
+ #define HIGH_LEVEL 31
- FORCEINLINE
- VOID
- InitializeSListHead(
- _Out_ PSLIST_HEADER SListHead)
- {
- #if defined(_IA64_)
- ULONG64 FeatureBits;
- #endif
+ //
+ // Used to contain PFNs and PFN counts
+ //
+ typedef ULONG PFN_COUNT;
+ typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
+ typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
- #if defined(_WIN64)
- if (((ULONG_PTR)SListHead & 0xf) != 0) {
- RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT);
- }
- #endif
- RtlZeroMemory(SListHead, sizeof(SLIST_HEADER));
- #if defined(_IA64_)
- FeatureBits = __getReg(CV_IA64_CPUID4);
- if ((FeatureBits & KF_16BYTE_INSTR) != 0) {
- SListHead->Header16.HeaderType = 1;
- SListHead->Header16.Init = 1;
- }
- #endif
- }
- #endif
+ typedef struct _KFLOATING_SAVE {
+ ULONG Dummy;
+ } KFLOATING_SAVE, *PKFLOATING_SAVE;
- #if defined(_WIN64)
+ typedef struct _KPCR_TIB {
+ PVOID ExceptionList; /* 00 */
+ PVOID StackBase; /* 04 */
+ PVOID StackLimit; /* 08 */
+ PVOID SubSystemTib; /* 0C */
+ _ANONYMOUS_UNION union {
+ PVOID FiberData; /* 10 */
+ ULONG Version; /* 10 */
+ } DUMMYUNIONNAME;
+ PVOID ArbitraryUserPointer; /* 14 */
+ struct _KPCR_TIB *Self; /* 18 */
+ } KPCR_TIB, *PKPCR_TIB; /* 1C */
- #define InterlockedPopEntrySList(Head) \
- ExpInterlockedPopEntrySList(Head)
+ #define PCR_MINOR_VERSION 1
+ #define PCR_MAJOR_VERSION 1
- #define InterlockedPushEntrySList(Head, Entry) \
- ExpInterlockedPushEntrySList(Head, Entry)
+ typedef struct _KPCR {
+ KPCR_TIB Tib; /* 00 */
+ struct _KPCR *Self; /* 1C */
+ struct _KPRCB *Prcb; /* 20 */
+ KIRQL Irql; /* 24 */
+ ULONG IRR; /* 28 */
+ ULONG IrrActive; /* 2C */
+ ULONG IDR; /* 30 */
+ PVOID KdVersionBlock; /* 34 */
+ PUSHORT IDT; /* 38 */
+ PUSHORT GDT; /* 3C */
+ struct _KTSS *TSS; /* 40 */
+ USHORT MajorVersion; /* 44 */
+ USHORT MinorVersion; /* 46 */
+ KAFFINITY SetMember; /* 48 */
+ ULONG StallScaleFactor; /* 4C */
+ UCHAR SpareUnused; /* 50 */
+ UCHAR Number; /* 51 */
+ } KPCR, *PKPCR; /* 54 */
- #define InterlockedFlushSList(Head) \
- ExpInterlockedFlushSList(Head)
+ #define KeGetPcr() PCR
- #define QueryDepthSList(Head) \
- ExQueryDepthSList(Head)
+ #define YieldProcessor() __asm__ __volatile__("nop");
- #else /* !defined(_WIN64) */
+ FORCEINLINE
+ ULONG
+ NTAPI
+ KeGetCurrentProcessorNumber(VOID)
+ {
+ ULONG Number;
+ __asm__ __volatile__ (
+ "lwz %0, %c1(12)\n"
+ : "=r" (Number)
+ : "i" (FIELD_OFFSET(KPCR, Number))
+ );
+ return Number;
+ }
- NTKERNELAPI
- PSLIST_ENTRY
+ NTHALAPI
+ VOID
FASTCALL
- InterlockedPopEntrySList(
- _Inout_ PSLIST_HEADER ListHead);
+ KfLowerIrql(
+ IN KIRQL NewIrql);
+ #define KeLowerIrql(a) KfLowerIrql(a)
- NTKERNELAPI
- PSLIST_ENTRY
+ NTHALAPI
+ KIRQL
FASTCALL
- InterlockedPushEntrySList(
- _Inout_ PSLIST_HEADER ListHead,
- _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry);
+ KfRaiseIrql(
+ IN KIRQL NewIrql);
+ #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
- #define InterlockedFlushSList(ListHead) \
- ExInterlockedFlushSList(ListHead)
+ NTHALAPI
+ KIRQL
+ NTAPI
+ KeRaiseIrqlToDpcLevel(VOID);
- #define QueryDepthSList(Head) \
- ExQueryDepthSList(Head)
+ NTHALAPI
+ KIRQL
+ NTAPI
+ KeRaiseIrqlToSynchLevel(VOID);
- #endif /* !defined(_WIN64) */
- #endif /* !defined(_WINBASE_) */
- #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
- #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
- #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
- ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
- #define RTL_CONTEXT_OFFSET(Context, Chunk) \
- RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
- #define RTL_CONTEXT_LENGTH(Context, Chunk) \
- RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
- #define RTL_CONTEXT_CHUNK(Context, Chunk) \
- RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
- (PCONTEXT_EX)(Context + 1), \
- Chunk)
+ #elif defined(_M_MIPS)
+ #error MIPS Headers are totally incorrect
- BOOLEAN
- RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable)(
- _In_ ULONG Version);
+ //
+ // Used to contain PFNs and PFN counts
+ //
+ typedef ULONG PFN_COUNT;
+ typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
+ typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
- BOOLEAN
- RTLVERLIB_DDI(RtlIsServicePackVersionInstalled)(
- _In_ ULONG Version);
+ #define PASSIVE_LEVEL 0
+ #define APC_LEVEL 1
+ #define DISPATCH_LEVEL 2
+ #define PROFILE_LEVEL 27
+ #define IPI_LEVEL 29
+ #define HIGH_LEVEL 31
- #ifndef RtlIsNtDdiVersionAvailable
- #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
- #endif
+ typedef struct _KPCR {
+ struct _KPRCB *Prcb; /* 20 */
+ KIRQL Irql; /* 24 */
+ ULONG IRR; /* 28 */
+ ULONG IDR; /* 30 */
+ } KPCR, *PKPCR;
- #ifndef RtlIsServicePackVersionInstalled
- #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
- #endif
+ #define KeGetPcr() PCR
- #define RtlInterlockedSetBits(Flags, Flag) \
- InterlockedOr((PLONG)(Flags), Flag)
+ typedef struct _KFLOATING_SAVE {
+ } KFLOATING_SAVE, *PKFLOATING_SAVE;
- #define RtlInterlockedAndBits(Flags, Flag) \
- InterlockedAnd((PLONG)(Flags), Flag)
+ static __inline
+ ULONG
+ NTAPI
+ KeGetCurrentProcessorNumber(VOID)
+ {
+ return 0;
+ }
- #define RtlInterlockedClearBits(Flags, Flag) \
- RtlInterlockedAndBits(Flags, ~(Flag))
+ #define YieldProcessor() __asm__ __volatile__("nop");
- #define RtlInterlockedXorBits(Flags, Flag) \
- InterlockedXor(Flags, Flag)
+ #define KeLowerIrql(a) KfLowerIrql(a)
+ #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
- #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
- (VOID) RtlInterlockedSetBits(Flags, Flag)
+ NTKERNELAPI
+ VOID
+ NTAPI
+ KfLowerIrql(
+ IN KIRQL NewIrql);
- #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
- (VOID) RtlInterlockedAndBits(Flags, Flag)
+ NTKERNELAPI
+ KIRQL
+ NTAPI
+ KfRaiseIrql(
+ IN KIRQL NewIrql);
- #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
- RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
+ NTKERNELAPI
+ KIRQL
+ NTAPI
+ KeRaiseIrqlToDpcLevel(VOID);
+ NTKERNELAPI
+ KIRQL
+ NTAPI
+ KeRaiseIrqlToSynchLevel(VOID);
- /******************************************************************************
- * Kernel Functions *
- ******************************************************************************/
+
+ #elif defined(_M_ARM)
+ #include <armddk.h>
+ #else
+ #error Unknown Architecture
+ #endif
NTKERNELAPI
VOID
//
// Flags for ProcessExecutionOptions
//
- #define MEM_EXECUTE_OPTION_DISABLE 0x1
+ #define MEM_EXECUTE_OPTION_DISABLE 0x1
#define MEM_EXECUTE_OPTION_ENABLE 0x2
#define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION 0x4
#define MEM_EXECUTE_OPTION_PERMANENT 0x8
#define MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE 0x10
- #define MEM_EXECUTE_OPTION_IMAGE_DISPATCH_ENABLE 0x20
+ #define MEM_EXECUTE_OPTION_IMAGE_DISPATCH_ENABLE 0x20
#define MEM_EXECUTE_OPTION_VALID_FLAGS 0x3F
#ifndef NTOS_MODE_USER
ULONG NumberOfThunks;
} DRIVER_SPECIFIED_VERIFIER_THUNKS, *PDRIVER_SPECIFIED_VERIFIER_THUNKS;
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+
//
// Default heap size values. For user mode, these values are copied to a new
// process's PEB by the kernel in MmCreatePeb. In kernel mode, RtlCreateHeap
//
extern POBJECT_TYPE NTSYSAPI MmSectionObjectType;
+ #ifdef __cplusplus
+ }; // extern "C"
+ #endif
+
#endif // !NTOS_MODE_USER
#endif // _MMTYPES_H
#include <pstypes.h>
#include <obtypes.h>
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+
#ifndef NTOS_MODE_USER
//
#endif /* NTOS_MODE_USER */
+ #ifdef __cplusplus
+ }; // extern "C"
+ #endif
+
#endif
_In_ ULONG MaximumResponseLength
);
+ #undef DbgBreakPoint
VOID
NTAPI
DbgBreakPoint(
NTSTATUS
NTAPI
RtlAllocateActivationContextStack(
- _In_ PVOID *Context
+ _In_ PACTIVATION_CONTEXT_STACK *Stack
);
NTSYSAPI
NTSYSAPI
VOID
NTAPI
- RtlFreeThreadActivationContextStack(void);
+ RtlFreeActivationContextStack(
+ _In_ PACTIVATION_CONTEXT_STACK Stack
+ );
+
+ NTSYSAPI
+ VOID
+ NTAPI
+ RtlFreeThreadActivationContextStack(VOID);
NTSYSAPI
PRTL_ACTIVATION_CONTEXT_STACK_FRAME
#ifndef __WINE_PROPVARUTIL_H
#define __WINE_PROPVARUTIL_H
- #include <propidl.h>
#include <shtypes.h>
#include <shlwapi.h>
typedef int PROPVAR_CHANGE_FLAGS;
+ enum tagPROPVAR_COMPARE_UNIT
+ {
+ PVCU_DEFAULT = 0x00000000,
+ PVCU_SECOND = 0x00000001,
+ PVCU_MINUTE = 0x00000002,
+ PVCU_HOUR = 0x00000003,
+ PVCU_DAY = 0x00000004,
+ PVCU_MONTH = 0x00000005,
+ PVCU_YEAR = 0x00000006,
+ };
+
+ typedef int PROPVAR_COMPARE_UNIT;
+
+ enum tagPROPVAR_COMPARE_FLAGS
+ {
+ PVCF_DEFAULT = 0x00000000,
+ PVCF_TREATEMPTYASGREATERTHAN = 0x00000001,
+ PVCF_USESTRCMP = 0x00000002,
+ PVCF_USESTRCMPC = 0x00000004,
+ PVCF_USESTRCMPI = 0x00000008,
+ PVCF_USESTRCMPIC = 0x00000010,
+ };
+
+ typedef int PROPVAR_COMPARE_FLAGS;
+
HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
PROPVAR_CHANGE_FLAGS flags, VARTYPE vt);
+ HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
+ HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
+ HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);
+ HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);
+ HRESULT WINAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);
+ HRESULT WINAPI VariantToGUID(const VARIANT *pvar, GUID *guid);
+ INT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,
+ PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags);
+
+ HRESULT WINAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret);
+ HRESULT WINAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret);
+ HRESULT WINAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);
+ HRESULT WINAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret);
+ HRESULT WINAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret);
+ HRESULT WINAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret);
+
+ #ifdef __cplusplus
+
+ HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar);
+ HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar);
+ HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar);
+
+ #ifndef NO_PROPVAR_INLINES
+
+ inline HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar)
+ {
+ ppropvar->vt = VT_BOOL;
+ ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE;
+ return S_OK;
+ }
+
+ inline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar)
+ {
+ HRESULT hres;
+
+ hres = SHStrDupW(psz, &ppropvar->pwszVal);
+ if(SUCCEEDED(hres))
+ ppropvar->vt = VT_LPWSTR;
+ else
+ PropVariantInit(ppropvar);
+
+ return hres;
+ }
+
+ inline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar)
+ {
+ ppropvar->vt = VT_I8;
+ ppropvar->hVal.QuadPart = llVal;
+ return S_OK;
+ }
+
+ #endif
+ #endif
#endif /* __WINE_PROPVARUTIL_H */
#define _Outptr_result_bytebuffer_(size) _SAL2_NAME(_Outptr_result_bytebuffer_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(WritableElementsConst=1,Notref=1)] [SA_Post(Valid=SA_Yes)] [SA_Post(Deref=1,Null=SA_No,Notref=1,WritableBytes="\n" _SA_SPECSTRIZE(size))])
//#define _Outptr_result_bytebuffer_all_(size)
//#define _Outptr_result_bytebuffer_all_maybenull_(size)
- //#define _Outptr_result_bytebuffer_maybenull_(size)
+ #define _Outptr_result_bytebuffer_maybenull_(size) _SAL2_NAME(_Outptr_result_bytebuffer_maybenull_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(WritableElementsConst=1,Notref=1)] [SA_Post(Valid=SA_Yes)] [SA_Post(Deref=1,Null=SA_Maybe,Notref=1,WritableBytes="\n" _SA_SPECSTRIZE(size))])
#define _Outptr_result_bytebuffer_to_(size, count) _SAL2_NAME(_Outptr_result_bytebuffer_to_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(WritableElementsConst=1,Notref=1)] [SA_Post(Valid=SA_Yes)] [SA_Post(Deref=1,Null=SA_No,Notref=1,WritableBytes="\n" _SA_SPECSTRIZE(size), ValidBytes="\n" _SA_SPECSTRIZE(count))])
//#define _Outptr_result_bytebuffer_to_maybenull_(size, count)
#define _Outptr_result_maybenull_ _SAL2_NAME(_Outptr_result_maybenull_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(WritableElementsConst=1,Notref=1)] [SA_Post(Valid=SA_Yes)] [SA_Post(Deref=1,Null=SA_Maybe,Notref=1,ValidElements="\n""1")] )
//#define _Raises_SEH_exception_
#define _Maybe_raises_SEH_exception_
#define _Readable_bytes_(size) _SAL2_NAME(_Readable_bytes_) _Group_(_SA_annotes1(SAL_readableTo, byteCount(size)))
- //#define _Readable_elements_(size)
+ #define _Readable_elements_(size) _SAL2_NAME(_Readable_elements_) _Group_([SAL_annotes(Name="SAL_readableTo", p1="elementCount(size)")])
#define _Reserved_ _SAL2_NAME(_Reserved_) _Group_([SA_Pre(Null=SA_Yes)])
//#define _Result_nullonfailure_
//#define _Result_zeroonfailure_
#define _In_function_class_(x) _In_function_class_(#x)
#define _Called_from_function_class_(x) _In_function_class_(x)
- #define _Function_class_(x) _SA_annotes1(SAL_functionClassNew, #x)
#else // ] [ !_PREFAST_
#define __inner_fallthrough_dec __inline __nothrow void __FallThrough() {}
#define __inner_override __declspec("__override")
#define __inner_success(expr) __declspec("SAL_success("SPECSTRINGIZE(expr)")")
- #define __inner_typefix(ctype) __declspec("SAL_typefix("SPECSTRINGIZE(ctype)")")
#define __maybenull __declspec("SAL_maybenull")
#define __maybereadonly __declspec("SAL_maybereadonly")
#define __maybevalid __declspec("SAL_maybevalid")
cpp_quote("#endif")
interface IInternetProtocolSink;
+ interface IUri;
/*****************************************************************************
* IInternet interface
* IAuthenticate interface
*/
[
- local,
object,
uuid(79EAC9D0-BAf9-11CE-8C82-00AA004BA90B),
pointer_default(unique)
[out] HWND *phwnd);
}
+ /*****************************************************************************
+ * ICodeInstall interface
+ */
+ [
+ local,
+ object,
+ uuid(79eac9d1-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+ ]
+ interface ICodeInstall : IWindowForBindingUI
+ {
+ typedef [unique] ICodeInstall *LPCODEINSTALL;
+
+ typedef enum {
+ CIP_DISK_FULL,
+ CIP_ACCESS_DENIED,
+ CIP_NEWER_VERSION_EXISTS,
+ CIP_OLDER_VERSION_EXISTS,
+ CIP_NAME_CONFLICT,
+ CIP_TRUST_VERIFICATION_COMPONENT_MISSING,
+ CIP_EXE_SELF_REGISTERATION_TIMEOUT,
+ CIP_UNSAFE_TO_ABORT,
+ CIP_NEED_REBOOT,
+ CIP_NEED_REBOOT_UI_PERMISSION
+ } CIP_STATUS;
+
+ HRESULT OnCodeInstallProblem(
+ [in] ULONG ulStatusCode,
+ [in, unique] LPCWSTR szDestination,
+ [in, unique] LPCWSTR szSource,
+ [in] DWORD dwReserved);
+ }
+
/*****************************************************************************
* IHttpSecurity interface
*/
QUERY_USES_CACHE,
QUERY_IS_SECURE,
QUERY_IS_SAFE,
- QUERY_USES_HISTORYFOLDER
+ QUERY_USES_HISTORYFOLDER,
+ QUERY_IS_CACHED_AND_USABLE_OFFLINE
} QUERYOPTION;
HRESULT ParseUrl(
[in] DWORD dwFlags);
}
+ /*****************************************************************************
+ * IInternetSecurityManagerEx interface
+ */
+ cpp_quote("#define SID_SInternetSecurityManagerEx IID_IInternetSecurityManagerEx")
+
+ [
+ object,
+ uuid(f164edf1-cc7c-4f0d-9a94-34222625C393),
+ pointer_default(unique)
+ ]
+ interface IInternetSecurityManagerEx : IInternetSecurityManager
+ {
+ HRESULT ProcessUrlActionEx(
+ [in] LPCWSTR pwszUrl,
+ [in] DWORD dwAction,
+ [out] BYTE *pPolicy,
+ [in] DWORD cbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD dwFlags,
+ [in] DWORD dwReserved,
+ [out] DWORD *pdwOutFlags);
+ }
+
+ /*****************************************************************************
+ * IInternetSecurityManagerEx2 interface
+ */
+ cpp_quote("#define SID_SInternetSecurityManagerEx2 IID_IInternetSecurityManagerEx2")
+
+ [
+ object,
+ uuid(f1e50292-a795-4117-8e09-2b560a72ac60),
+ pointer_default(unique)
+ ]
+ interface IInternetSecurityManagerEx2 : IInternetSecurityManagerEx
+ {
+ HRESULT MapUrlToZoneEx2(
+ [in] IUri *pUri,
+ [out] DWORD *pdwZone,
+ [in] DWORD dwFlags,
+ [out] LPWSTR *ppwszMappedUrl,
+ [out] DWORD *pdwOutFlags);
+
+ HRESULT ProcessUrlActionEx2(
+ [in] IUri *pUri,
+ [in] DWORD dwAction,
+ [out] BYTE *pPolicy,
+ [in] DWORD cbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD dwFlags,
+ [in] DWORD_PTR dwReserved,
+ [out] DWORD *pdwOutFlags);
+
+ HRESULT GetSecurityIdEx2(
+ [in] IUri *pUri,
+ [out] BYTE *pbSecurityId,
+ [in, out] DWORD *pcbSecurityId,
+ [in] DWORD_PTR dwReserved);
+
+ HRESULT QueryCustomPolicyEx2(
+ [in] IUri *pUri,
+ [in] REFGUID guidKey,
+ [out] BYTE **ppPolicy,
+ [out] DWORD *pcbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD_PTR dwReserved);
+ }
+
/*****************************************************************************
* IInternetHostSecurityManager interface
*/
cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL 0x00030000")
cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MAX 0x00001eff")
+ cpp_quote("#define URLACTION_BEHAVIOR_MIN 0x00002000")
+ cpp_quote("#define URLACTION_BEHAVIOR_RUN 0x00002000")
+ cpp_quote("#define URLPOLICY_BEHAVIOR_CHECK_LIST 0x00010000")
+
+ cpp_quote("#define URLACTION_FEATURE_MIN 0x00002100")
+ cpp_quote("#define URLACTION_FEATURE_MIME_SNIFFING 0x00002100")
+ cpp_quote("#define URLACTION_FEATURE_ZONE_ELEVATION 0x00002101")
+ cpp_quote("#define URLACTION_FEATURE_WINDOW_RESTRICTIONS 0x00002102")
+ cpp_quote("#define URLACTION_FEATURE_SCRIPT_STATUS_BAR 0x00002103")
+ cpp_quote("#define URLACTION_FEATURE_FORCE_ADDR_AND_STATUS 0x00002104")
+ cpp_quote("#define URLACTION_FEATURE_BLOCK_INPUT_PROMPTS 0x00002105")
+
cpp_quote("#define URLPOLICY_ALLOW 0x00")
cpp_quote("#define URLPOLICY_QUERY 0x01")
cpp_quote("#define URLPOLICY_DISALLOW 0x03")
* IUri interface
*/
[
- local,
object,
uuid(a39ee748-6a27-4817-a6f2-13914bef5890),
pointer_default(unique)
[in] HANDLE *dwReserved);
}
+ /*****************************************************************************
+ * IGetBindHandle interface
+ */
+ [
+ local,
+ object,
+ uuid(AF0FF408-129D-4b20-91F0-02BD23D88352),
+ pointer_default(unique)
+ ]
+ interface IGetBindHandle : IUnknown
+ {
+ typedef [unique] IGetBindHandle *LPGETBINDHANDLE;
+
+ typedef enum {
+ BINDHANDLETYPES_APPCACHE = 0x00000000,
+ BINDHANDLETYPES_DEPENDENCY = 0x00000001,
+ BINDHANDLETYPES_COUNT
+ } BINDHANDLETYPES;
+
+ HRESULT GetBindHandle(
+ [in] BINDHANDLETYPES enumRequestedHandle,
+ [out] HANDLE *pRetHandle);
+ }
+
cpp_quote("#define CONFIRMSAFETYACTION_LOADOBJECT 0x00000001")
struct CONFIRMSAFETY
cpp_quote("HRESULT WINAPI CoInternetParseIUri(IUri*,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD_PTR);")
cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);")
cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);")
+ cpp_quote("HRESULT WINAPI CoInternetIsFeatureEnabled(INTERNETFEATURELIST,DWORD dwFlags);")
+ cpp_quote("HRESULT WINAPI CoInternetIsFeatureEnabledForUrl(INTERNETFEATURELIST,DWORD,LPCWSTR,IInternetSecurityManager*);")
cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);")
cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrlEx(IUri*,IUri**,PSUACTION,DWORD_PTR);")
+ cpp_quote("HRESULT WINAPI AsyncInstallDistributionUnit(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPCWSTR,IBindCtx*,LPVOID,DWORD);")
cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);")
cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);")
cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);")
cpp_quote("HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);")
cpp_quote("HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);")
cpp_quote("HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);")
+ cpp_quote("HRESULT WINAPI CopyBindInfo(const BINDINFO*,BINDINFO*);")
cpp_quote("void WINAPI ReleaseBindInfo(BINDINFO*);")
cpp_quote("HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);")
cpp_quote("HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);")
cpp_quote("#define MKSYS_URLMONIKER 6")
cpp_quote("#define URL_MK_LEGACY 0")
cpp_quote("#define URL_MK_UNIFORM 1")
+ cpp_quote("#define URL_MK_NO_CANONICALIZE 2")
* Kernel Functions *
******************************************************************************/
$if (_WDMDDK_)
+ #if defined(_M_IX86)
+ $include(x86/ke.h)
+ #elif defined(_M_AMD64)
+ $include(amd64/ke.h)
+ #elif defined(_M_IA64)
+ $include(ia64/ke.h)
+ #elif defined(_M_PPC)
+ $include(ppc/ke.h)
+ #elif defined(_M_MIPS)
+ $include(mips/ke.h)
+ #elif defined(_M_ARM)
+ $include(arm/ke.h)
+ #else
+ #error Unknown Architecture
+ #endif
NTKERNELAPI
VOID
$endif (_NTIFS_)
- $if (_WDMDDK_)
- #if defined(_M_IX86)
- $include(x86/ke.h)
- #elif defined(_M_AMD64)
- $include(amd64/ke.h)
- #elif defined(_M_IA64)
- $include(ia64/ke.h)
- #elif defined(_M_PPC)
- $include(ppc/ke.h)
- #elif defined(_M_MIPS)
- $include(mips/ke.h)
- #elif defined(_M_ARM)
- $include(arm/ke.h)
- #else
- #error Unknown Architecture
- #endif
- $endif (_WDMDDK_)
-
//
// construct device name
//
- swprintf(CharDeviceName, L"\\Device\\USBFDO-%d", UsbDeviceNumber);
+ swprintf(CharDeviceName, L"\\Device\\USBFDO-%lu", UsbDeviceNumber);
//
// initialize device name
//
// create legacy link
//
- swprintf(LinkName, L"\\DosDevices\\HCD%d", m_FDODeviceNumber);
- swprintf(FDOName, L"\\Device\\USBFDO-%d", m_FDODeviceNumber);
+ swprintf(LinkName, L"\\DosDevices\\HCD%lu", m_FDODeviceNumber);
+ swprintf(FDOName, L"\\Device\\USBFDO-%lu", m_FDODeviceNumber);
RtlInitUnicodeString(&Link, LinkName);
RtlInitUnicodeString(&FDO, FDOName);
//
// create legacy link
//
- swprintf(LinkName, L"\\DosDevices\\HCD%d", m_FDODeviceNumber);
+ swprintf(LinkName, L"\\DosDevices\\HCD%lu", m_FDODeviceNumber);
RtlInitUnicodeString(&Link, LinkName);
//
{
m_Hardware->GetPortStatus(PortId, &PortStatus, &PortChange);
- DPRINT1("[%S] Port %d: Status %x, Change %x\n", m_USBType, PortId, PortStatus, PortChange);
+ DPRINT1("[%S] Port %lu: Status %x, Change %x\n", m_USBType, PortId, PortStatus, PortChange);
//
//
if (PortChange != 0)
{
- DPRINT1("[%S] Change state on port %d\n", m_USBType, PortId);
+ DPRINT1("[%S] Change state on port %lu\n", m_USBType, PortId);
// Set the value for the port number
*TransferBuffer = 1 << ((PortId + 1) & 7);
Changed = TRUE;
DPRINT1("URB_FUNCTION_CLASS_ENDPOINT\n");
DPRINT1("TransferFlags %x\n", Urb->UrbControlVendorClassRequest.TransferFlags);
DPRINT1("TransferBufferLength %x\n", Urb->UrbControlVendorClassRequest.TransferBufferLength);
- DPRINT1("TransferBuffer %x\n", Urb->UrbControlVendorClassRequest.TransferBuffer);
- DPRINT1("TransferBufferMDL %x\n", Urb->UrbControlVendorClassRequest.TransferBufferMDL);
+ DPRINT1("TransferBuffer %p\n", Urb->UrbControlVendorClassRequest.TransferBuffer);
+ DPRINT1("TransferBufferMDL %p\n", Urb->UrbControlVendorClassRequest.TransferBufferMDL);
DPRINT1("RequestTypeReservedBits %x\n", Urb->UrbControlVendorClassRequest.RequestTypeReservedBits);
DPRINT1("Request %x\n", Urb->UrbControlVendorClassRequest.Request);
DPRINT1("Value %x\n", Urb->UrbControlVendorClassRequest.Value);
DPRINT1("URB_FUNCTION_CLASS_INTERFACE\n");
DPRINT1("TransferFlags %x\n", Urb->UrbControlVendorClassRequest.TransferFlags);
DPRINT1("TransferBufferLength %x\n", Urb->UrbControlVendorClassRequest.TransferBufferLength);
- DPRINT1("TransferBuffer %x\n", Urb->UrbControlVendorClassRequest.TransferBuffer);
- DPRINT1("TransferBufferMDL %x\n", Urb->UrbControlVendorClassRequest.TransferBufferMDL);
+ DPRINT1("TransferBuffer %p\n", Urb->UrbControlVendorClassRequest.TransferBuffer);
+ DPRINT1("TransferBufferMDL %p\n", Urb->UrbControlVendorClassRequest.TransferBufferMDL);
DPRINT1("RequestTypeReservedBits %x\n", Urb->UrbControlVendorClassRequest.RequestTypeReservedBits);
DPRINT1("Request %x\n", Urb->UrbControlVendorClassRequest.Request);
DPRINT1("Value %x\n", Urb->UrbControlVendorClassRequest.Value);
//
// construct device name
//
- swprintf(CharDeviceName, L"\\Device\\USBPDO-%d", UsbDeviceNumber);
+ swprintf(CharDeviceName, L"\\Device\\USBPDO-%lu", UsbDeviceNumber);
//
// initialize device name
VOID
CUSBDevice::DumpDeviceDescriptor(PUSB_DEVICE_DESCRIPTOR DeviceDescriptor)
{
- DPRINT1("Dumping Device Descriptor %x\n", DeviceDescriptor);
+ DPRINT1("Dumping Device Descriptor %p\n", DeviceDescriptor);
DPRINT1("bLength %x\n", DeviceDescriptor->bLength);
DPRINT1("bDescriptorType %x\n", DeviceDescriptor->bDescriptorType);
DPRINT1("bcdUSB %x\n", DeviceDescriptor->bcdUSB);
VOID
CUSBDevice::DumpConfigurationDescriptor(PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor)
{
- DPRINT1("Dumping ConfigurationDescriptor %x\n", ConfigurationDescriptor);
+ DPRINT1("Dumping ConfigurationDescriptor %p\n", ConfigurationDescriptor);
DPRINT1("bLength %x\n", ConfigurationDescriptor->bLength);
DPRINT1("bDescriptorType %x\n", ConfigurationDescriptor->bDescriptorType);
DPRINT1("wTotalLength %x\n", ConfigurationDescriptor->wTotalLength);
// copy pipe handle
DPRINT1("PipeIndex %lu\n", PipeIndex);
DPRINT1("EndpointAddress %x\n", InterfaceInfo->Pipes[PipeIndex].EndpointAddress);
- DPRINT1("Interval %d\n", InterfaceInfo->Pipes[PipeIndex].Interval);
- DPRINT1("MaximumPacketSize %d\n", InterfaceInfo->Pipes[PipeIndex].MaximumPacketSize);
- DPRINT1("MaximumTransferSize %d\n", InterfaceInfo->Pipes[PipeIndex].MaximumTransferSize);
- DPRINT1("PipeFlags %d\n", InterfaceInfo->Pipes[PipeIndex].PipeFlags);
+ DPRINT1("Interval %c\n", InterfaceInfo->Pipes[PipeIndex].Interval);
+ DPRINT1("MaximumPacketSize %hu\n", InterfaceInfo->Pipes[PipeIndex].MaximumPacketSize);
+ DPRINT1("MaximumTransferSize %lu\n", InterfaceInfo->Pipes[PipeIndex].MaximumTransferSize);
+ DPRINT1("PipeFlags %lu\n", InterfaceInfo->Pipes[PipeIndex].PipeFlags);
DPRINT1("PipeType %d\n", InterfaceInfo->Pipes[PipeIndex].PipeType);
DPRINT1("UsbEndPoint %x\n", InterfaceInfo->Pipes[PipeIndex].EndpointAddress);
VOID
NTAPI
- RtlFreeActivationContextStack(PACTIVATION_CONTEXT_STACK Stack)
+ RtlFreeActivationContextStack(IN PACTIVATION_CONTEXT_STACK Stack)
{
PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame, PrevFrame;
}
VOID
- NTAPI RtlFreeThreadActivationContextStack(void)
+ NTAPI RtlFreeThreadActivationContextStack(VOID)
{
RtlFreeActivationContextStack(NtCurrentTeb()->ActivationContextStackPointer);
NtCurrentTeb()->ActivationContextStackPointer = NULL;
NTSTATUS
NTAPI
- RtlAllocateActivationContextStack(IN PVOID *Context)
+ RtlAllocateActivationContextStack(IN PACTIVATION_CONTEXT_STACK *Stack)
{
PACTIVATION_CONTEXT_STACK ContextStack;
/* Check if it's already allocated */
- if (*Context) return STATUS_SUCCESS;
+ if (*Stack) return STATUS_SUCCESS;
/* Allocate space for the context stack */
- ContextStack = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sizeof (ACTIVATION_CONTEXT_STACK) );
+ ContextStack = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ACTIVATION_CONTEXT_STACK));
if (!ContextStack)
{
return STATUS_NO_MEMORY;
ContextStack->NextCookieSequenceNumber = 1;
ContextStack->StackId = 1; //TODO: Timer-based
- *Context = ContextStack;
+ *Stack = ContextStack;
return STATUS_SUCCESS;
}
DEFINE_GUID(IID_IDsObjectPicker, 0x0c87e64e, 0x3b7a, 0x11d2, 0x00b9, 0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7);
DEFINE_GUID(CLSID_DsObjectPicker, 0x17d6ccd8, 0x3b7b, 0x11d2, 0x00b9, 0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7);
- DEFINE_GUID(IID_IDeskBarClient, 0xEB0FE175, 0x1A3A, 0x11D0, 0x89,0xB3, 0x00,0xA0,0xC9,0x0A,0x90,0xAC);
DEFINE_GUID(CLSID_StdPicture, 0x0BE35204, 0x8F91, 0x11CE, 0x9D,0xE3, 0x00,0xAA,0x00,0x4B,0xB8,0x51);
DEFINE_GUID(CLSID_StdFont, 0x0BE35203, 0x8F91, 0x11CE, 0x9D,0xE3, 0x00,0xAA,0x00,0x4B,0xB8,0x51);
reactos/dll/win32/msvidc32 # Autosync
reactos/dll/win32/msxml # Synced to Wine-1.5.19
reactos/dll/win32/msxml2 # Synced to Wine-1.5.19
- reactos/dll/win32/msxml3 # Synced to Wine-1.5.12
+ reactos/dll/win32/msxml3 # Synced to Wine-1.5.26
reactos/dll/win32/msxml4 # Synced to Wine-1.5.19
reactos/dll/win32/msxml6 # Synced to Wine-1.5.19
reactos/dll/win32/nddeapi # Synced to Wine-1.5.19
reactos/dll/win32/objsel # Synced to Wine-1.5.19
reactos/dll/win32/odbc32 # Out of sync. Depends on port of Linux ODBC.
reactos/dll/win32/odbccp32 # Synced to Wine-1.5.19
- reactos/dll/win32/ole32 # Synced to Wine-1.5.19
+ reactos/dll/win32/ole32 # Synced to Wine-1.5.26
reactos/dll/win32/oleacc # Autosync
- reactos/dll/win32/oleaut32 # Synced to Wine-1.5.19
+ reactos/dll/win32/oleaut32 # Synced to Wine-1.5.26
reactos/dll/win32/olecli32 # Synced to Wine-1.5.19
reactos/dll/win32/oledlg # Autosync
reactos/dll/win32/olepro32 # Autosync
reactos/dll/win32/pidgen # Synced to Wine-1.5.19
reactos/dll/win32/powrprof # Forked at Wine-1.0rc5
reactos/dll/win32/printui # Synced to Wine-1.5.4
+ reactos/dll/win32/propsys # Synced to Wine-1.5.26
reactos/dll/win32/pstorec # Synced to Wine-1.5.4
reactos/dll/win32/qmgr # Synced to Wine-1.2-rc5?
reactos/dll/win32/qmgrprxy # Synced to Wine-1.14?
reactos/dll/win32/shdocvw # Autosync
reactos/dll/win32/shell32 # Forked at Wine-20071011
reactos/dll/win32/shfolder # Autosync
- reactos/dll/win32/shlwapi # Synced to Wine-1.5.13
+ reactos/dll/win32/shlwapi # Synced to Wine-1.5.26
reactos/dll/win32/slbcsp # Synced to Wine-1.5.19
reactos/dll/win32/snmpapi # Synced to Wine-1.5.19
reactos/dll/win32/softpub # Synced to Wine-1.5.19
reactos/dll/win32/unicows # Synced to Wine-1.3.32 (Win9x only, why do we need this?!)
reactos/dll/win32/updspapi # Synced to Wine-1.5.4
reactos/dll/win32/url # Synced to Wine-1.5.19
- reactos/dll/win32/urlmon # Autosync
+ reactos/dll/win32/urlmon # Synced to Wine-1.5.26
reactos/dll/win32/usp10 # Synced to Wine-1.5.24
reactos/dll/win32/uxtheme # Forked
reactos/dll/win32/version # Autosync
#define FLOATOBJ_16 16.
#define FLOATOBJ_1_16 (1./16.)
- #define gef0 FLOATOBJ_0
- #define gef1 FLOATOBJ_1
- #define gef16 FLOATOBJ_16
+ static const FLOATOBJ gef0 = 0.;
+ static const FLOATOBJ gef1 = 1.;
+ static const FLOATOBJ gef16 = 16.;
#define FLOATOBJ_Set0(fo) *(fo) = 0;
#define FLOATOBJ_Set1(fo) *(fo) = 1;
PVOID pvBaseAddress;
NTSTATUS Status;
+ /* Check if the size is ok (for 64 bit) */
+ if (cjSize > ULONG_MAX)
+ {
+ DPRINT1("chSize out of range: 0x%Id\n", cjSize);
+ return NULL;
+ }
+
/* Align the offset at allocation granularity and compensate for the size */
liSectionOffset.QuadPart = cjOffset & ~(MM_ALLOCATION_GRANULARITY - 1);
cjSize += cjOffset & (MM_ALLOCATION_GRANULARITY - 1);
}
/* Secure the section memory */
- *phSecure = EngSecureMem(pvBaseAddress, cjSize);
+ *phSecure = EngSecureMem(pvBaseAddress, (ULONG)cjSize);
if (!*phSecure)
{
ZwUnmapViewOfSection(NtCurrentProcess(), pvBaseAddress);
/* Unmap the section view */
Status = MmUnmapViewOfSection(PsGetCurrentProcess(), pvBits);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("Could not unmap section view!\n");
- }
+ ASSERT(NT_SUCCESS(Status));
}
/*
* dllmain.c
- *
- * $Revision: 1.11 $
- * $Author: hbelusca $
- * $Date: 2013-01-28 23:45:53 +0100 (lun. 28 janv. 2013) $
- *
*/
#include <precomp.h>
IntLockFreeType;
/* Scaling transform */
- if (aveWidth)
+ /*if (aveWidth)*/
{
- FT_Matrix scaleMat;
- DPRINT("Scaling Trans!\n");
- scaleMat.xx = FT_FixedFromFloat(widthRatio);
- scaleMat.xy = 0;
- scaleMat.yx = 0;
- scaleMat.yy = (1 << 16);
- FT_Matrix_Multiply(&scaleMat, &transMat);
+
+ FT_Matrix ftmatrix;
+ FLOATOBJ efTemp;
+
+ PMATRIX pmx = DC_pmxWorldToDevice(dc);
+
+ /* Create a freetype matrix, by converting to 16.16 fixpoint format */
+ efTemp = pmx->efM11;
+ FLOATOBJ_MulLong(&efTemp, 0x00010000);
+ ftmatrix.xx = FLOATOBJ_GetLong(&efTemp);
+
+ efTemp = pmx->efM12;
+ FLOATOBJ_MulLong(&efTemp, 0x00010000);
+ ftmatrix.xy = FLOATOBJ_GetLong(&efTemp);
+
+ efTemp = pmx->efM21;
+ FLOATOBJ_MulLong(&efTemp, 0x00010000);
+ ftmatrix.yx = FLOATOBJ_GetLong(&efTemp);
+
+ efTemp = pmx->efM22;
+ FLOATOBJ_MulLong(&efTemp, 0x00010000);
+ ftmatrix.yy = FLOATOBJ_GetLong(&efTemp);
+
+ FT_Matrix_Multiply(&ftmatrix, &transMat);
needsTransform = TRUE;
}
{
goto cleanup;
}
+
+ if(pdc->dctype == DCTYPE_DIRECT)
+ {
+ UNIMPLEMENTED;
+ goto cleanup;
+ }
ppalSurf = pdc->dclevel.pSurface->ppal;
ppalDC = pdc->dclevel.ppal;
--- /dev/null
+#ifndef __WIN32K_NTUSER_H
+#define __WIN32K_NTUSER_H
+
+typedef struct _PROCESSINFO *PPROCESSINFO;
+typedef struct _THREADINFO *PTHREADINFO;
+struct _DESKTOP;
+struct _WND;
+
+#define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */
+#define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */
+
+#define HANDLEENTRY_INDESTROY 1
+
+typedef struct _USER_HANDLE_ENTRY
+{
+ void *ptr; /* pointer to object */
+ union
+ {
+ PVOID pi;
+ PTHREADINFO pti; // pointer to Win32ThreadInfo
+ PPROCESSINFO ppi; // pointer to W32ProcessInfo
+ };
+ unsigned char type; /* object type (0 if free) */
+ unsigned char flags;
+ unsigned short generation; /* generation counter */
+} USER_HANDLE_ENTRY, * PUSER_HANDLE_ENTRY;
+
+typedef struct _USER_HANDLE_TABLE
+{
+ PUSER_HANDLE_ENTRY handles;
+ PUSER_HANDLE_ENTRY freelist;
+ int nb_handles;
+ int allocated_handles;
+} USER_HANDLE_TABLE, * PUSER_HANDLE_TABLE;
+
+typedef enum _HANDLE_TYPE
+{
+ TYPE_FREE = 0,
+ TYPE_WINDOW = 1,
+ TYPE_MENU = 2,
+ TYPE_CURSOR = 3,
+ TYPE_SETWINDOWPOS = 4,
+ TYPE_HOOK = 5,
+ TYPE_CLIPDATA = 6,
+ TYPE_CALLPROC = 7,
+ TYPE_ACCELTABLE = 8,
+ TYPE_DDEACCESS = 9,
+ TYPE_DDECONV = 10,
+ TYPE_DDEXACT = 11,
+ TYPE_MONITOR = 12,
+ TYPE_KBDLAYOUT = 13,
+ TYPE_KBDFILE = 14,
+ TYPE_WINEVENTHOOK = 15,
+ TYPE_TIMER = 16,
+ TYPE_INPUTCONTEXT = 17,
+ TYPE_HIDDATA = 18,
+ TYPE_DEVICEINFO = 19,
+ TYPE_TOUCHINPUTINFO = 20,
+ TYPE_GESTUREINFOOBJ = 21,
+ TYPE_CTYPES,
+ TYPE_GENERIC = 255
+} HANDLE_TYPE, *PHANDLE_TYPE;
+
+typedef enum _USERTHREADINFOCLASS
+{
+ UserThreadShutdownInformation,
+ UserThreadFlags,
+ UserThreadTaskName,
+ UserThreadWOWInformation,
+ UserThreadHungStatus,
+ UserThreadInitiateShutdown,
+ UserThreadEndShutdown,
+ UserThreadUseActiveDesktop,
+ UserThreadUseDesktop,
+ UserThreadRestoreDesktop,
+ UserThreadCsrApiPort,
+} USERTHREADINFOCLASS;
+
+typedef struct _LARGE_UNICODE_STRING
+{
+ ULONG Length;
+ ULONG MaximumLength:31;
+ ULONG bAnsi:1;
+ PWSTR Buffer;
+} LARGE_UNICODE_STRING, *PLARGE_UNICODE_STRING;
+
+typedef struct _LARGE_STRING
+{
+ ULONG Length;
+ ULONG MaximumLength:31;
+ ULONG bAnsi:1;
+ PVOID Buffer;
+} LARGE_STRING, *PLARGE_STRING;
+//
+// Based on ANSI_STRING
+//
+typedef struct _LARGE_ANSI_STRING
+{
+ ULONG Length;
+ ULONG MaximumLength:31;
+ ULONG bAnsi:1;
+ PCHAR Buffer;
+} LARGE_ANSI_STRING, *PLARGE_ANSI_STRING;
+
+VOID NTAPI RtlInitLargeAnsiString(IN OUT PLARGE_ANSI_STRING,IN PCSZ,IN INT);
+VOID NTAPI RtlInitLargeUnicodeString(IN OUT PLARGE_UNICODE_STRING,IN PCWSTR,IN INT);
+BOOL NTAPI RtlLargeStringToUnicodeString( PUNICODE_STRING, PLARGE_STRING);
+
+#define NB_HOOKS (WH_MAXHOOK-WH_MINHOOK+1)
+
+typedef struct _DESKTOPINFO
+{
+ PVOID pvDesktopBase;
+ PVOID pvDesktopLimit;
+ struct _WND *spwnd;
+ DWORD fsHooks;
+ LIST_ENTRY aphkStart[NB_HOOKS];
+
+ HWND hTaskManWindow;
+ HWND hProgmanWindow;
+ HWND hShellWindow;
+
+ PPROCESSINFO ppiShellProcess;
+
+ union
+ {
+ UINT Dummy;
+ struct
+ {
+ UINT LastInputWasKbd : 1;
+ };
+ };
+
+ WCHAR szDesktopName[1];
+} DESKTOPINFO, *PDESKTOPINFO;
+
+#define CTI_THREADSYSLOCK 0x0001
+#define CTI_INSENDMESSAGE 0x0002
+
+typedef struct _CLIENTTHREADINFO
+{
+ DWORD CTI_flags;
+ WORD fsChangeBits;
+ WORD fsWakeBits;
+ WORD fsWakeBitsJournal;
+ WORD fsWakeMask;
+ ULONG tickLastMsgChecked;
+ DWORD dwcPumpHook;
+} CLIENTTHREADINFO, *PCLIENTTHREADINFO;
+
+typedef struct _HEAD
+{
+ HANDLE h;
+ DWORD cLockObj;
+} HEAD, *PHEAD;
+
+typedef struct _THROBJHEAD
+{
+ HEAD;
+ PTHREADINFO pti;
+} THROBJHEAD, *PTHROBJHEAD;
+
+typedef struct _THRDESKHEAD
+{
+ THROBJHEAD;
+ struct _DESKTOP *rpdesk;
+ PVOID pSelf;
+} THRDESKHEAD, *PTHRDESKHEAD;
+
+typedef struct _PROCDESKHEAD
+{
+ HEAD;
+ DWORD hTaskWow;
+ struct _DESKTOP *rpdesk;
+ PVOID pSelf;
+} PROCDESKHEAD, *PPROCDESKHEAD;
+
+typedef struct _PROCMARKHEAD
+{
+ HEAD;
+ ULONG hTaskWow;
+ PPROCESSINFO ppi;
+} PROCMARKHEAD, *PPROCMARKHEAD;
+
+#define UserHMGetHandle(obj) ((obj)->head.h)
+
+/* Window Client Information structure */
+struct _ETHREAD;
+
+#define WEF_SETBYWNDPTI 0x0001
+
+typedef struct tagHOOK
+{
+ THRDESKHEAD head;
+ struct tagHOOK *phkNext; /* This is for user space. */
+ int HookId; /* Hook table index */
+ ULONG_PTR offPfn;
+ ULONG flags; /* Some internal flags */
+ INT ihmod;
+ PTHREADINFO ptiHooked;
+ struct _DESKTOP *rpdesk;
+ /* ReactOS */
+ LIST_ENTRY Chain; /* Hook chain entry */
+ HOOKPROC Proc; /* Hook function */
+ BOOLEAN Ansi; /* Is it an Ansi hook? */
+ UNICODE_STRING ModuleName; /* Module name for global hooks */
+} HOOK, *PHOOK;
+
+typedef struct tagCLIPBOARDDATA
+{
+ HEAD head;
+ DWORD cbData;
+ BYTE Data[0];
+} CLIPBOARDDATA, *PCLIPBOARDDATA;
+
+/* THREADINFO Flags */
+#define TIF_INCLEANUP 0x00000001
+#define TIF_16BIT 0x00000002
+#define TIF_SYSTEMTHREAD 0x00000004
+#define TIF_CSRSSTHREAD 0x00000008
+#define TIF_TRACKRECTVISIBLE 0x00000010
+#define TIF_ALLOWFOREGROUNDACTIVATE 0x00000020
+#define TIF_DONTATTACHQUEUE 0x00000040
+#define TIF_DONTJOURNALATTACH 0x00000080
+#define TIF_WOW64 0x00000100
+#define TIF_INACTIVATEAPPMSG 0x00000200
+#define TIF_SPINNING 0x00000400
+#define TIF_PALETTEAWARE 0x00000800
+#define TIF_SHAREDWOW 0x00001000
+#define TIF_FIRSTIDLE 0x00002000
+#define TIF_WAITFORINPUTIDLE 0x00004000
+#define TIF_MOVESIZETRACKING 0x00008000
+#define TIF_VDMAPP 0x00010000
+#define TIF_DOSEMULATOR 0x00020000
+#define TIF_GLOBALHOOKER 0x00040000
+#define TIF_DELAYEDEVENT 0x00080000
+#define TIF_MSGPOSCHANGED 0x00100000
+#define TIF_SHUTDOWNCOMPLETE 0x00200000
+#define TIF_IGNOREPLAYBACKDELAY 0x00400000
+#define TIF_ALLOWOTHERACCOUNTHOOK 0x00800000
+#define TIF_GUITHREADINITIALIZED 0x02000000
+#define TIF_DISABLEIME 0x04000000
+#define TIF_INGETTEXTLENGTH 0x08000000
+#define TIF_ANSILENGTH 0x10000000
+#define TIF_DISABLEHOOKS 0x20000000
+
+typedef struct _CALLBACKWND
+{
+ HWND hWnd;
+ struct _WND *pWnd;
+ PVOID pActCtx;
+} CALLBACKWND, *PCALLBACKWND;
+
+#define CI_TRANSACTION 0x00000001
+#define CI_QUEUEMSG 0x00000002
+#define CI_WOW 0x00000004
+#define CI_INITTHREAD 0x00000008
+#define CI_CURTHPRHOOK 0x00000010
+#define CI_CLASSESREGISTERED 0x00000020
+#define CI_IMMACTIVATE 0x00000040
+
+typedef struct _CLIENTINFO
+{
+ ULONG_PTR CI_flags;
+ ULONG_PTR cSpins;
+ DWORD dwExpWinVer;
+ DWORD dwCompatFlags;
+ DWORD dwCompatFlags2;
+ DWORD dwTIFlags; // ThreadInfo TIF_Xxx flags for User space.
+ PDESKTOPINFO pDeskInfo;
+ ULONG_PTR ulClientDelta;
+ PHOOK phkCurrent;
+ ULONG fsHooks;
+ CALLBACKWND CallbackWnd;
+ DWORD dwHookCurrent;
+ INT cInDDEMLCallback;
+ PCLIENTTHREADINFO pClientThreadInfo;
+ ULONG_PTR dwHookData;
+ DWORD dwKeyCache;
+ BYTE afKeyState[8];
+ DWORD dwAsyncKeyCache;
+ BYTE afAsyncKeyState[8];
+ BYTE afAsyncKeyStateRecentDow[8];
+ HKL hKL;
+ USHORT CodePage;
+ UCHAR achDbcsCF[2];
+ MSG msgDbcsCB;
+ LPDWORD lpdwRegisteredClasses;
+ ULONG Win32ClientInfo3[26];
+/* It's just a pointer reference not to be used w the structure in user space. */
+ PPROCESSINFO ppi;
+} CLIENTINFO, *PCLIENTINFO;
+
+/* Make sure it fits into the TEB */
+C_ASSERT(sizeof(CLIENTINFO) <= sizeof(((PTEB)0)->Win32ClientInfo));
+
+#define GetWin32ClientInfo() ((PCLIENTINFO)(NtCurrentTeb()->Win32ClientInfo))
+
+#define HRGN_NULL ( (HRGN) 0) // NULL empty region
+#define HRGN_WINDOW ( (HRGN) 1) // region from window rcWindow
+#define HRGN_MONITOR ( (HRGN) 2) // region from monitor region.
+
+/* Menu Item fType. */
+#define MFT_RTOL 0x6000
+
+typedef struct tagITEM
+{
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ struct tagMENU* spSubMenu; /* Pop-up menu. */
+ HANDLE hbmpChecked;
+ HANDLE hbmpUnchecked;
+ USHORT* lpstr; /* Item text pointer. */
+ ULONG cch;
+ DWORD_PTR dwItemData;
+ ULONG xItem; /* Item position. left */
+ ULONG yItem; /* " top */
+ ULONG cxItem; /* Item Size Width */
+ ULONG cyItem; /* " Height */
+ ULONG dxTab; /* X position of text after Tab */
+ ULONG ulX; /* underline.. start position */
+ ULONG ulWidth; /* underline.. width */
+ HBITMAP hbmp; /* bitmap */
+ INT cxBmp; /* Width Maximum size of the bitmap items in MIIM_BITMAP state */
+ INT cyBmp; /* Height " */
+} ITEM, *PITEM;
+
+typedef struct tagMENULIST
+{
+ struct tagMENULIST* pNext;
+ struct tagMENU* pMenu;
+} MENULIST, *PMENULIST;
+
+/* Menu fFlags, upper byte is MNS_X style flags. */
+#define MNF_POPUP 0x0001
+#define MNF_UNDERLINE 0x0004
+#define MNF_INACTIVE 0x0010
+#define MNF_RTOL 0x0020
+#define MNF_DESKTOPMN 0x0040
+#define MNF_SYSDESKMN 0x0080
+#define MNF_SYSSUBMENU 0x0100
+
+typedef struct tagMENU
+{
+ PROCDESKHEAD head;
+ ULONG fFlags; /* [Style flags | Menu flags] */
+ INT iItem; /* nPos of selected item, if -1 not selected. */
+ UINT cAlloced; /* Number of allocated items. Inc's of 8 */
+ UINT cItems; /* Number of items in the menu */
+ ULONG cxMenu; /* Width of the whole menu */
+ ULONG cyMenu; /* Height of the whole menu */
+ ULONG cxTextAlign; /* Offset of text when items have both bitmaps and text */
+ struct _WND *spwndNotify; /* window receiving the messages for ownerdraw */
+ PITEM rgItems; /* Array of menu items */
+ struct tagMENULIST* pParentMenus; /* If this is SubMenu, list of parents. */
+ DWORD dwContextHelpId;
+ ULONG cyMax; /* max height of the whole menu, 0 is screen height */
+ DWORD_PTR dwMenuData; /* application defined value */
+ HBRUSH hbrBack; /* brush for menu background */
+ INT iTop; /* Current scroll position Top */
+ INT iMaxTop; /* Current scroll position Max Top */
+ DWORD dwArrowsOn:2; /* Arrows: 0 off, 1 on, 2 to the top, 3 to the bottom. */
+} MENU, *PMENU;
+
+typedef struct _REGISTER_SYSCLASS
+{
+ /* This is a reactos specific class used to initialize the
+ system window classes during user32 initialization */
+ PWSTR ClassName;
+ UINT Style;
+ WNDPROC ProcW;
+ UINT ExtraBytes;
+ HICON hCursor;
+ HBRUSH hBrush;
+ WORD fiId;
+ WORD iCls;
+} REGISTER_SYSCLASS, *PREGISTER_SYSCLASS;
+
+typedef struct _CLSMENUNAME
+{
+ LPSTR pszClientAnsiMenuName;
+ LPWSTR pwszClientUnicodeMenuName;
+ PUNICODE_STRING pusMenuName;
+} CLSMENUNAME, *PCLSMENUNAME;
+
+typedef struct tagSBDATA
+{
+ INT posMin;
+ INT posMax;
+ INT page;
+ INT pos;
+} SBDATA, *PSBDATA;
+
+typedef struct tagSBINFO
+{
+ INT WSBflags;
+ SBDATA Horz;
+ SBDATA Vert;
+} SBINFO, *PSBINFO;
+
+typedef struct tagSBCALC
+{
+ INT posMin;
+ INT posMax;
+ INT page;
+ INT pos;
+ INT pxTop;
+ INT pxBottom;
+ INT pxLeft;
+ INT pxRight;
+ INT cpxThumb;
+ INT pxUpArrow;
+ INT pxDownArrow;
+ INT pxStart;
+ INT pxThumbBottom;
+ INT pxThumbTop;
+ INT cpx;
+ INT pxMin;
+} SBCALC, *PSBCALC;
+
+typedef enum _GETCPD
+{
+ UserGetCPDA2U = 0x01, // " Unicode "
+ UserGetCPDU2A = 0X02, // " Ansi "
+ UserGetCPDClass = 0X10,
+ UserGetCPDWindow = 0X20,
+ UserGetCPDDialog = 0X40,
+ UserGetCPDWndtoCls = 0X80
+} GETCPD, *PGETCPD;
+
+typedef struct _CALLPROCDATA
+{
+ PROCDESKHEAD head;
+ struct _CALLPROCDATA *spcpdNext;
+ WNDPROC pfnClientPrevious;
+ GETCPD wType;
+} CALLPROCDATA, *PCALLPROCDATA;
+
+#define CSF_SERVERSIDEPROC 0x0001
+#define CSF_ANSIPROC 0x0002
+#define CSF_WOWDEFERDESTROY 0x0004
+#define CSF_SYSTEMCLASS 0x0008
+#define CSF_WOWCLASS 0x0010
+#define CSF_WOWEXTRA 0x0020
+#define CSF_CACHEDSMICON 0x0040
+#define CSF_WIN40COMPAT 0x0080
+
+typedef struct _CLS
+{
+ struct _CLS *pclsNext;
+ RTL_ATOM atomClassName;
+ ATOM atomNVClassName;
+ DWORD fnid;
+ struct _DESKTOP *rpdeskParent;
+ PVOID pdce;
+ DWORD CSF_flags;
+ PSTR lpszClientAnsiMenuName; // For client use
+ PWSTR lpszClientUnicodeMenuName; // " " "
+ PCALLPROCDATA spcpdFirst;
+ struct _CLS *pclsBase;
+ struct _CLS *pclsClone;
+ ULONG cWndReferenceCount;
+ UINT style;
+ WNDPROC lpfnWndProc;
+ INT cbclsExtra;
+ INT cbwndExtra;
+ HINSTANCE hModule;
+ HANDLE hIcon; /* FIXME - Use pointer! */
+ //PCURSOR spicn;
+ HANDLE hCursor; /* FIXME - Use pointer! */
+ //PCURSOR spcur;
+ HBRUSH hbrBackground;
+ PWSTR lpszMenuName; // kernel use
+ PSTR lpszAnsiClassName; // "
+ HANDLE hIconSm; /* FIXME - Use pointer! */
+ //PCURSOR spicnSm;
+
+ UINT Unicode : 1; // !CSF_ANSIPROC
+ UINT Global : 1; // CS_GLOBALCLASS or CSF_SERVERSIDEPROC
+ UINT MenuNameIsString : 1;
+ UINT NotUsed : 29;
+} CLS, *PCLS;
+
+
+typedef struct _SBINFOEX
+{
+ SCROLLBARINFO ScrollBarInfo;
+ SCROLLINFO ScrollInfo;
+} SBINFOEX, *PSBINFOEX;
+
+// State Flags !Not Implemented!
+#define WNDS_HASMENU 0X00000001
+#define WNDS_HASVERTICALSCROOLLBAR 0X00000002
+#define WNDS_HASHORIZONTALSCROLLBAR 0X00000004
+#define WNDS_HASCAPTION 0X00000008
+#define WNDS_SENDSIZEMOVEMSGS 0X00000010
+#define WNDS_MSGBOX 0X00000020
+#define WNDS_ACTIVEFRAME 0X00000040
+#define WNDS_HASSPB 0X00000080
+#define WNDS_NONCPAINT 0X00000100
+#define WNDS_SENDERASEBACKGROUND 0X00000200
+#define WNDS_ERASEBACKGROUND 0X00000400
+#define WNDS_SENDNCPAINT 0X00000800
+#define WNDS_INTERNALPAINT 0X00001000
+#define WNDS_UPDATEDIRTY 0X00002000
+#define WNDS_HIDDENPOPUP 0X00004000
+#define WNDS_FORCEMENUDRAW 0X00008000
+#define WNDS_DIALOGWINDOW 0X00010000
+#define WNDS_HASCREATESTRUCTNAME 0X00020000
+#define WNDS_SERVERSIDEWINDOWPROC 0x00040000 // Call proc inside win32k.
+#define WNDS_ANSIWINDOWPROC 0x00080000
+#define WNDS_BEINGACTIVATED 0x00100000
+#define WNDS_HASPALETTE 0x00200000
+#define WNDS_PAINTNOTPROCESSED 0x00400000
+#define WNDS_SYNCPAINTPENDING 0x00800000
+#define WNDS_RECIEVEDQUERYSUSPENDMSG 0x01000000
+#define WNDS_RECIEVEDSUSPENDMSG 0x02000000
+#define WNDS_TOGGLETOPMOST 0x04000000
+#define WNDS_REDRAWIFHUNG 0x08000000
+#define WNDS_REDRAWFRAMEIFHUNG 0x10000000
+#define WNDS_ANSICREATOR 0x20000000
+#define WNDS_MAXIMIZESTOMONITOR 0x40000000
+#define WNDS_DESTROYED 0x80000000
+
+#define WNDSACTIVEFRAME 0x00000006
+
+// State2 Flags !Not Implemented!
+#define WNDS2_WMPAINTSENT 0X00000001
+#define WNDS2_ENDPAINTINVALIDATE 0X00000002
+#define WNDS2_STARTPAINT 0X00000004
+#define WNDS2_OLDUI 0X00000008
+#define WNDS2_HASCLIENTEDGE 0X00000010
+#define WNDS2_BOTTOMMOST 0X00000020
+#define WNDS2_FULLSCREEN 0X00000040
+#define WNDS2_INDESTROY 0X00000080
+#define WNDS2_WIN31COMPAT 0X00000100
+#define WNDS2_WIN40COMPAT 0X00000200
+#define WNDS2_WIN50COMPAT 0X00000400
+#define WNDS2_MAXIMIZEDMONITORREGION 0X00000800
+#define WNDS2_CLOSEBUTTONDOWN 0X00001000
+#define WNDS2_MAXIMIZEBUTTONDOWN 0X00002000
+#define WNDS2_MINIMIZEBUTTONDOWN 0X00004000
+#define WNDS2_HELPBUTTONDOWN 0X00008000
+#define WNDS2_SCROLLBARLINEUPBTNDOWN 0X00010000
+#define WNDS2_SCROLLBARPAGEUPBTNDOWN 0X00020000
+#define WNDS2_SCROLLBARPAGEDOWNBTNDOWN 0X00040000
+#define WNDS2_SCROLLBARLINEDOWNBTNDOWN 0X00080000
+#define WNDS2_ANYSCROLLBUTTONDOWN 0X00100000
+#define WNDS2_SCROLLBARVERTICALTRACKING 0X00200000
+#define WNDS2_FORCENCPAINT 0X00400000
+#define WNDS2_FORCEFULLNCPAINTCLIPRGN 0X00800000
+#define WNDS2_FULLSCREENMODE 0X01000000
+#define WNDS2_CAPTIONTEXTTRUNCATED 0X08000000
+#define WNDS2_NOMINMAXANIMATERECTS 0X10000000
+#define WNDS2_SMALLICONFROMWMQUERYDRAG 0X20000000
+#define WNDS2_SHELLHOOKREGISTERED 0X40000000
+#define WNDS2_WMCREATEMSGPROCESSED 0X80000000
+
+/* ExStyles2 */
+#define WS_EX2_CLIPBOARDLISTENER 0X00000001
+#define WS_EX2_LAYEREDINVALIDATE 0X00000002
+#define WS_EX2_REDIRECTEDFORPRINT 0X00000004
+#define WS_EX2_LINKED 0X00000008
+#define WS_EX2_LAYEREDFORDWM 0X00000010
+#define WS_EX2_LAYEREDLIMBO 0X00000020
+#define WS_EX2_HIGHTDPI_UNAWAR 0X00000040
+#define WS_EX2_VERTICALLYMAXIMIZEDLEFT 0X00000080
+#define WS_EX2_VERTICALLYMAXIMIZEDRIGHT 0X00000100
+#define WS_EX2_HASOVERLAY 0X00000200
+#define WS_EX2_CONSOLEWINDOW 0X00000400
+#define WS_EX2_CHILDNOACTIVATE 0X00000800
+
+#define WPF_MININIT 0x0008
+#define WPF_MAXINIT 0x0010
+
+typedef struct _WND
+{
+ THRDESKHEAD head;
+ DWORD state;
+ DWORD state2;
+ /* Extended style. */
+ DWORD ExStyle;
+ /* Style. */
+ DWORD style;
+ /* Handle of the module that created the window. */
+ HINSTANCE hModule;
+ DWORD fnid;
+ struct _WND *spwndNext;
+ struct _WND *spwndPrev;
+ struct _WND *spwndParent;
+ struct _WND *spwndChild;
+ struct _WND *spwndOwner;
+ RECT rcWindow;
+ RECT rcClient;
+ WNDPROC lpfnWndProc;
+ /* Pointer to the window class. */
+ PCLS pcls;
+ HRGN hrgnUpdate;
+ /* Property list head.*/
+ LIST_ENTRY PropListHead;
+ ULONG PropListItems;
+ /* Scrollbar info */
+ PSBINFO pSBInfo;
+ /* system menu handle. */
+ HMENU SystemMenu;
+ //PMENU spmenuSys;
+ /* Window menu handle or window id */
+ UINT IDMenu; // Use spmenu
+ //PMENU spmenu;
+ HRGN hrgnClip;
+ HRGN hrgnNewFrame;
+ /* Window name. */
+ LARGE_UNICODE_STRING strName;
+ /* Size of the extra data associated with the window. */
+ ULONG cbwndExtra;
+ struct _WND *spwndLastActive;
+ //HIMC hImc; // Input context associated with this window.
+ LONG dwUserData;
+ PVOID pActCtx;
+ //PD3DMATRIX pTransForm;
+ struct _WND *spwndClipboardListener;
+ DWORD ExStyle2;
+
+ /* ReactOS */
+ struct
+ {
+ RECT NormalRect;
+ POINT IconPos;
+ POINT MaxPos;
+ UINT flags; // WPF_ flags.
+ } InternalPos;
+
+ UINT Unicode : 1; // !(WNDS_ANSICREATOR|WNDS_ANSIWINDOWPROC) ?
+ UINT InternalPosInitialized : 1;
+ UINT HideFocus : 1; // WS_EX_UISTATEFOCUSRECTHIDDEN ?
+ UINT HideAccel : 1; // WS_EX_UISTATEKBACCELHIDDEN ?
+
+ /* Scrollbar info */
+ PSBINFOEX pSBInfoex; // convert to PSBINFO
+ /* Entry in the list of thread windows. */
+ LIST_ENTRY ThreadListEntry;
+} WND, *PWND;
+
+#define PWND_BOTTOM ((PWND)1)
+
+typedef struct _SBWND
+{
+ WND wnd;
+ BOOL fVert;
+ UINT wDisableFlags;
+ SBCALC SBCalc;
+} SBWND, *PSBWND;
+
+typedef struct _PFNCLIENT
+{
+ WNDPROC pfnScrollBarWndProc;
+ WNDPROC pfnTitleWndProc;
+ WNDPROC pfnMenuWndProc;
+ WNDPROC pfnDesktopWndProc;
+ WNDPROC pfnDefWindowProc;
+ WNDPROC pfnMessageWindowProc;
+ WNDPROC pfnSwitchWindowProc;
+ WNDPROC pfnButtonWndProc;
+ WNDPROC pfnComboBoxWndProc;
+ WNDPROC pfnComboListBoxProc;
+ WNDPROC pfnDialogWndProc;
+ WNDPROC pfnEditWndProc;
+ WNDPROC pfnListBoxWndProc;
+ WNDPROC pfnMDIClientWndProc;
+ WNDPROC pfnStaticWndProc;
+ WNDPROC pfnImeWndProc;
+ WNDPROC pfnGhostWndProc;
+ WNDPROC pfnHkINLPCWPSTRUCT;
+ WNDPROC pfnHkINLPCWPRETSTRUCT;
+ WNDPROC pfnDispatchHook;
+ WNDPROC pfnDispatchDefWindowProc;
+ WNDPROC pfnDispatchMessage;
+ WNDPROC pfnMDIActivateDlgProc;
+} PFNCLIENT, *PPFNCLIENT;
+
+/*
+ Wine Common proc ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL Unicode );
+ Windows uses Ansi == TRUE, Wine uses Unicode == TRUE.
+ */
+
+typedef LRESULT(CALLBACK *WNDPROC_EX)(HWND,UINT,WPARAM,LPARAM,BOOL);
+
+typedef struct _PFNCLIENTWORKER
+{
+ WNDPROC_EX pfnButtonWndProc;
+ WNDPROC_EX pfnComboBoxWndProc;
+ WNDPROC_EX pfnComboListBoxProc;
+ WNDPROC_EX pfnDialogWndProc;
+ WNDPROC_EX pfnEditWndProc;
+ WNDPROC_EX pfnListBoxWndProc;
+ WNDPROC_EX pfnMDIClientWndProc;
+ WNDPROC_EX pfnStaticWndProc;
+ WNDPROC_EX pfnImeWndProc;
+ WNDPROC_EX pfnGhostWndProc;
+ WNDPROC_EX pfnCtfHookProc;
+} PFNCLIENTWORKER, *PPFNCLIENTWORKER;
+
+typedef LONG_PTR (NTAPI *PFN_FNID)(PWND, UINT, WPARAM, LPARAM, ULONG_PTR);
+
+// FNID's for NtUserSetWindowFNID, NtUserMessageCall
+#define FNID_FIRST 0x029A
+#define FNID_SCROLLBAR 0x029A
+#define FNID_ICONTITLE 0x029B
+#define FNID_MENU 0x029C
+#define FNID_DESKTOP 0x029D
+#define FNID_DEFWINDOWPROC 0x029E
+#define FNID_MESSAGEWND 0x029F
+#define FNID_SWITCH 0x02A0
+#define FNID_BUTTON 0x02A1
+#define FNID_COMBOBOX 0x02A2
+#define FNID_COMBOLBOX 0x02A3
+#define FNID_DIALOG 0x02A4
+#define FNID_EDIT 0x02A5
+#define FNID_LISTBOX 0x02A6
+#define FNID_MDICLIENT 0x02A7
+#define FNID_STATIC 0x02A8
+#define FNID_IME 0x02A9
+#define FNID_GHOST 0x02AA
+#define FNID_CALLWNDPROC 0x02AB
+#define FNID_CALLWNDPROCRET 0x02AC
+#define FNID_HKINLPCWPEXSTRUCT 0x02AD
+#define FNID_HKINLPCWPRETEXSTRUCT 0x02AE
+#define FNID_MB_DLGPROC 0x02AF
+#define FNID_MDIACTIVATEDLGPROC 0x02B0
+#define FNID_SENDMESSAGE 0x02B1
+#define FNID_SENDMESSAGEFF 0x02B2
+// Kernel has option to use TimeOut or normal msg send, based on type of msg.
+#define FNID_SENDMESSAGEWTOOPTION 0x02B3
+#define FNID_SENDMESSAGECALLPROC 0x02B4
+#define FNID_BROADCASTSYSTEMMESSAGE 0x02B5
+#define FNID_TOOLTIPS 0x02B6
+#define FNID_SENDNOTIFYMESSAGE 0x02B7
+#define FNID_SENDMESSAGECALLBACK 0x02B8
+#define FNID_LAST 0x02B9
+
+#define FNID_NUM FNID_LAST - FNID_FIRST + 1
+#define FNID_NUMSERVERPROC FNID_SWITCH - FNID_FIRST + 1
+
+#define FNID_DDEML 0x2000 // Registers DDEML
+#define FNID_DESTROY 0x4000 // This is sent when WM_NCDESTROY or in the support routine.
+ // Seen during WM_CREATE on error exit too.
+#define FNID_FREED 0x8000 // Window being Freed...
+
+#define ICLASS_TO_MASK(iCls) (1 << ((iCls)))
+
+#define GETPFNCLIENTA(fnid)\
+ (WNDPROC)(*(((ULONG_PTR *)&gpsi->apfnClientA) + (fnid - FNID_FIRST)))
+#define GETPFNCLIENTW(fnid)\
+ (WNDPROC)(*(((ULONG_PTR *)&gpsi->apfnClientW) + (fnid - FNID_FIRST)))
+
+#define GETPFNSERVER(fnid) gpsi->aStoCidPfn[fnid - FNID_FIRST]
+
+// ICLS's for NtUserGetClassName FNID to ICLS, NtUserInitializeClientPfnArrays
+#define ICLS_BUTTON 0
+#define ICLS_EDIT 1
+#define ICLS_STATIC 2
+#define ICLS_LISTBOX 3
+#define ICLS_SCROLLBAR 4
+#define ICLS_COMBOBOX 5
+#define ICLS_MDICLIENT 6
+#define ICLS_COMBOLBOX 7
+#define ICLS_DDEMLEVENT 8
+#define ICLS_DDEMLMOTHER 9
+#define ICLS_DDEML16BIT 10
+#define ICLS_DDEMLCLIENTA 11
+#define ICLS_DDEMLCLIENTW 12
+#define ICLS_DDEMLSERVERA 13
+#define ICLS_DDEMLSERVERW 14
+#define ICLS_IME 15
+#define ICLS_GHOST 16
+#define ICLS_DESKTOP 17
+#define ICLS_DIALOG 18
+#define ICLS_MENU 19
+#define ICLS_SWITCH 20
+#define ICLS_ICONTITLE 21
+#define ICLS_TOOLTIPS 22
+#if (_WIN32_WINNT <= 0x0501)
+#define ICLS_UNKNOWN 22
+#define ICLS_NOTUSED 23
+#else
+#define ICLS_SYSSHADOW 23
+#define ICLS_HWNDMESSAGE 24
+#define ICLS_NOTUSED 25
+#endif
+#define ICLS_END 31
+
+#define COLOR_LAST COLOR_MENUBAR
+#define MAX_MB_STRINGS 11
+
+#define SRVINFO_APIHOOK 0x0010
+#define SRVINFO_METRICS 0x0020
+#define SRVINFO_KBDPREF 0x0080
+
+#define NUM_SYSCOLORS 31
+
+typedef struct tagOEMBITMAPINFO
+{
+ INT x;
+ INT y;
+ INT cx;
+ INT cy;
+} OEMBITMAPINFO, *POEMBITMAPINFO;
+
+typedef struct tagMBSTRING
+{
+ WCHAR szName[16];
+ UINT uID;
+ UINT uStr;
+} MBSTRING, *PMBSTRING;
+
+typedef struct tagDPISERVERINFO
+{
+ INT gclBorder; /* 000 */
+ HFONT hCaptionFont; /* 004 */
+ HFONT hMsgFont; /* 008 */
+ INT cxMsgFontChar; /* 00C */
+ INT cyMsgFontChar; /* 010 */
+ UINT wMaxBtnSize; /* 014 */
+} DPISERVERINFO, *PDPISERVERINFO;
+
+// PUSIFlags:
+#define PUSIF_PALETTEDISPLAY 0x01
+#define PUSIF_SNAPTO 0x02
+#define PUSIF_COMBOBOXANIMATION 0x04
+#define PUSIF_LISTBOXSMOOTHSCROLLING 0x08
+#define PUSIF_KEYBOARDCUES 0x20
+
+typedef struct _PERUSERSERVERINFO
+{
+ INT aiSysMet[SM_CMETRICS];
+ ULONG argbSystemUnmatched[NUM_SYSCOLORS];
+ COLORREF argbSystem[NUM_SYSCOLORS];
+ HBRUSH ahbrSystem[NUM_SYSCOLORS];
+ HBRUSH hbrGray;
+ POINT ptCursor;
+ POINT ptCursorReal;
+ DWORD dwLastRITEventTickCount;
+ INT nEvents;
+ UINT dtScroll;
+ UINT dtLBSearch;
+ UINT dtCaretBlink;
+ UINT ucWheelScrollLines;
+ UINT ucWheelScrollChars;
+ INT wMaxLeftOverlapChars;
+ INT wMaxRightOverlapChars;
+ INT cxSysFontChar;
+ INT cySysFontChar;
+ TEXTMETRICW tmSysFont;
+ DPISERVERINFO dpiSystem;
+ HICON hIconSmWindows;
+ HICON hIcoWindows;
+ DWORD dwKeyCache;
+ DWORD dwAsyncKeyCache;
+ ULONG cCaptures;
+ OEMBITMAPINFO oembmi[93];
+ RECT rcScreenReal;
+ USHORT BitCount;
+ USHORT dmLogPixels;
+ BYTE Planes;
+ BYTE BitsPixel;
+ ULONG PUSIFlags;
+ UINT uCaretWidth;
+ USHORT UILangID;
+ DWORD dwLastSystemRITEventTickCountUpdate;
+ ULONG adwDBGTAGFlags[35];
+ DWORD dwTagCount;
+ DWORD dwRIPFlags;
+} PERUSERSERVERINFO, *PPERUSERSERVERINFO;
+
+typedef struct tagSERVERINFO
+{
+ DWORD dwSRVIFlags;
+ ULONG_PTR cHandleEntries;
+ PFN_FNID mpFnidPfn[FNID_NUM];
+ WNDPROC aStoCidPfn[FNID_NUMSERVERPROC];
+ USHORT mpFnid_serverCBWndProc[FNID_NUM];
+ PFNCLIENT apfnClientA;
+ PFNCLIENT apfnClientW;
+ PFNCLIENTWORKER apfnClientWorker;
+ ULONG cbHandleTable;
+ ATOM atomSysClass[ICLS_NOTUSED+1];
+ DWORD dwDefaultHeapBase;
+ DWORD dwDefaultHeapSize;
+ UINT uiShellMsg;
+ MBSTRING MBStrings[MAX_MB_STRINGS];
+ ATOM atomIconSmProp;
+ ATOM atomIconProp;
+ ATOM atomContextHelpIdProp;
+ ATOM atomFrostedWindowProp;
+ CHAR acOemToAnsi[256];
+ CHAR acAnsiToOem[256];
+ DWORD dwInstalledEventHooks;
+ PERUSERSERVERINFO;
+} SERVERINFO, *PSERVERINFO;
+
+
+// Server event activity bits.
+#define SRV_EVENT_MENU 0x0001
+#define SRV_EVENT_END_APPLICATION 0x0002
+#define SRV_EVENT_RUNNING 0x0004
+#define SRV_EVENT_NAMECHANGE 0x0008
+#define SRV_EVENT_VALUECHANGE 0x0010
+#define SRV_EVENT_STATECHANGE 0x0020
+#define SRV_EVENT_LOCATIONCHANGE 0x0040
+#define SRV_EVENT_CREATE 0x8000
+
+typedef struct _PROPLISTITEM
+{
+ ATOM Atom;
+ HANDLE Data;
+} PROPLISTITEM, *PPROPLISTITEM;
+
+typedef struct _PROPERTY
+{
+ LIST_ENTRY PropListEntry;
+ HANDLE Data;
+ ATOM Atom;
+} PROPERTY, *PPROPERTY;
+
+typedef struct _BROADCASTPARM
+{
+ DWORD flags;
+ DWORD recipients;
+ HDESK hDesk;
+ HWND hWnd;
+ LUID luid;
+} BROADCASTPARM, *PBROADCASTPARM;
+
+PTHREADINFO GetW32ThreadInfo(VOID);
+PPROCESSINFO GetW32ProcessInfo(VOID);
+
+typedef struct _WNDMSG
+{
+ DWORD maxMsgs;
+ PINT abMsgs;
+} WNDMSG, *PWNDMSG;
+
+typedef struct _SHAREDINFO
+{
+ PSERVERINFO psi; // global Server Info
+ PVOID aheList; // Handle Entry List
+ PVOID pDispInfo; // global PDISPLAYINFO pointer
+ ULONG_PTR ulSharedDelta; // Heap delta
+ WNDMSG awmControl[FNID_LAST - FNID_FIRST];
+ WNDMSG DefWindowMsgs;
+ WNDMSG DefWindowSpecMsgs;
+} SHAREDINFO, *PSHAREDINFO;
+
+typedef struct _USERCONNECT
+{
+ ULONG ulVersion;
+ ULONG ulCurrentVersion;
+ DWORD dwDispatchCount;
+ SHAREDINFO siClient;
+} USERCONNECT, *PUSERCONNECT;
+
+typedef struct tagGETCLIPBDATA
+{
+ UINT uFmtRet;
+ BOOL fGlobalHandle;
+ union
+ {
+ HANDLE hLocale;
+ HANDLE hPalette;
+ };
+} GETCLIPBDATA, *PGETCLIPBDATA;
+
+typedef struct tagSETCLIPBDATA
+{
+ BOOL fGlobalHandle;
+ BOOL fIncSerialNumber;
+} SETCLIPBDATA, *PSETCLIPBDATA;
+
+// Used with NtUserSetCursorIconData, last parameter.
+typedef struct tagCURSORDATA
+{
+ LPWSTR lpName;
+ LPWSTR lpModName;
+ USHORT rt;
+ USHORT dummy;
+ ULONG CURSORF_flags;
+ SHORT xHotspot;
+ SHORT yHotspot;
+ HBITMAP hbmMask;
+ HBITMAP hbmColor;
+ HBITMAP hbmAlpha;
+ RECT rcBounds;
+ HBITMAP hbmUserAlpha; // Could be in W7U, not in W2k
+ ULONG bpp;
+ ULONG cx;
+ ULONG cy;
+ INT cpcur;
+ INT cicur;
+ struct tagCURSORDATA * aspcur;
+ DWORD * aicur;
+ INT * ajifRate;
+ INT iicur;
+} CURSORDATA, *PCURSORDATA; /* !dso CURSORDATA */
+
+// CURSORF_flags:
+#define CURSORF_FROMRESOURCE 0x0001
+#define CURSORF_GLOBAL 0x0002
+#define CURSORF_LRSHARED 0x0004
+#define CURSORF_ACON 0x0008
+#define CURSORF_WOWCLEANUP 0x0010
+#define CURSORF_ACONFRAME 0x0040
+#define CURSORF_SECRET 0x0080
+#define CURSORF_LINKED 0x0100
+#define CURSORF_CURRENT 0x0200
+
+DWORD
+NTAPI
+NtUserAssociateInputContext(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3);
+
+DWORD
+NTAPI
+NtUserBuildHimcList(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4);
+
+DWORD
+NTAPI
+NtUserCalcMenuBar(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4,
+ DWORD dwUnknown5);
+
+DWORD
+NTAPI
+NtUserCheckMenuItem(
+ HMENU hmenu,
+ UINT uIDCheckItem,
+ UINT uCheck);
+
+DWORD
+NTAPI
+NtUserCtxDisplayIOCtl(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3);
+
+BOOL
+NTAPI
+NtUserDeleteMenu(
+ HMENU hMenu,
+ UINT uPosition,
+ UINT uFlags);
+
+BOOL
+NTAPI
+NtUserDestroyMenu(
+ HMENU hMenu);
+
+DWORD
+NTAPI
+NtUserDrawMenuBarTemp(
+ HWND hWnd,
+ HDC hDC,
+ PRECT hRect,
+ HMENU hMenu,
+ HFONT hFont);
+
+UINT
+NTAPI
+NtUserEnableMenuItem(
+ HMENU hMenu,
+ UINT uIDEnableItem,
+ UINT uEnable);
+
+BOOL
+NTAPI
+NtUserEndMenu(VOID);
+
+BOOL
+NTAPI
+NtUserGetMenuBarInfo(
+ HWND hwnd,
+ LONG idObject,
+ LONG idItem,
+ PMENUBARINFO pmbi);
+
+UINT
+NTAPI
+NtUserGetMenuIndex(
+ HMENU hMenu,
+ HMENU hSubMenu);
+
+BOOL
+NTAPI
+NtUserGetMenuItemRect(
+ HWND hWnd,
+ HMENU hMenu,
+ UINT uItem,
+ LPRECT lprcItem);
+
+HMENU
+NTAPI
+NtUserGetSystemMenu(
+ HWND hWnd,
+ BOOL bRevert);
+
+BOOL
+NTAPI
+NtUserHiliteMenuItem(
+ HWND hWnd,
+ HMENU hMenu,
+ UINT uItemHilite,
+ UINT uHilite);
+
+int
+NTAPI
+NtUserMenuItemFromPoint(
+ HWND hWnd,
+ HMENU hMenu,
+ DWORD X,
+ DWORD Y);
+
+BOOL
+NTAPI
+NtUserRemoveMenu(
+ HMENU hMenu,
+ UINT uPosition,
+ UINT uFlags);
+
+BOOL
+NTAPI
+NtUserSetMenu(
+ HWND hWnd,
+ HMENU hMenu,
+ BOOL bRepaint);
+
+BOOL
+NTAPI
+NtUserSetMenuContextHelpId(
+ HMENU hmenu,
+ DWORD dwContextHelpId);
+
+BOOL
+NTAPI
+NtUserSetMenuDefaultItem(
+ HMENU hMenu,
+ UINT uItem,
+ UINT fByPos);
+
+BOOL
+NTAPI
+NtUserSetMenuFlagRtoL(
+ HMENU hMenu);
+
+BOOL
+NTAPI
+NtUserSetSystemMenu(
+ HWND hWnd,
+ HMENU hMenu);
+
+BOOL
+NTAPI
+NtUserThunkedMenuInfo(
+ HMENU hMenu,
+ LPCMENUINFO lpcmi);
+
+BOOL
+NTAPI
+NtUserThunkedMenuItemInfo(
+ HMENU hMenu,
+ UINT uItem,
+ BOOL fByPosition,
+ BOOL bInsert,
+ LPMENUITEMINFOW lpmii,
+ PUNICODE_STRING lpszCaption);
+
+BOOL
+NTAPI
+NtUserTrackPopupMenuEx(
+ HMENU hmenu,
+ UINT fuFlags,
+ int x,
+ int y,
+ HWND hwnd,
+ LPTPMPARAMS lptpm);
+
+HKL
+NTAPI
+NtUserActivateKeyboardLayout(
+ HKL hKl,
+ ULONG Flags);
+
+DWORD
+NTAPI
+NtUserAlterWindowStyle(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2);
+
+BOOL
+NTAPI
+NtUserAttachThreadInput(
+ IN DWORD idAttach,
+ IN DWORD idAttachTo,
+ IN BOOL fAttach);
+
+HDC NTAPI
+NtUserBeginPaint(HWND hWnd, PAINTSTRUCT* lPs);
+
+BOOL
+NTAPI
+NtUserBitBltSysBmp(
+ HDC hdc,
+ INT nXDest,
+ INT nYDest,
+ INT nWidth,
+ INT nHeight,
+ INT nXSrc,
+ INT nYSrc,
+ DWORD dwRop );
+
+BOOL
+NTAPI
+NtUserBlockInput(
+ BOOL BlockIt);
+
+NTSTATUS
+NTAPI
+NtUserBuildHwndList(
+ HDESK hDesktop,
+ HWND hwndParent,
+ BOOLEAN bChildren,
+ ULONG dwThreadId,
+ ULONG lParam,
+ HWND* pWnd,
+ ULONG* pBufSize);
+
+NTSTATUS NTAPI
+NtUserBuildNameList(
+ HWINSTA hWinSta,
+ ULONG dwSize,
+ PVOID lpBuffer,
+ PULONG pRequiredSize);
+
+NTSTATUS
+NTAPI
+NtUserBuildPropList(
+ HWND hWnd,
+ LPVOID Buffer,
+ DWORD BufferSize,
+ DWORD *Count);
+
+/* apfnSimpleCall indices from Windows XP SP 2 */
+/* TODO: Check for differences in Windows 2000, 2003 and 2008 */
+#define WIN32K_VERSION NTDDI_WINXPSP2 // FIXME: this should go somewhere else
+
+enum SimpleCallRoutines
+{
+ NOPARAM_ROUTINE_CREATEMENU,
+ NOPARAM_ROUTINE_CREATEMENUPOPUP,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
+ NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
+ NOPARAM_ROUTINE_CREATESYSTEMTHREADS,
+ NOPARAM_ROUTINE_DESTROY_CARET,
+#endif
+ NOPARAM_ROUTINE_ENABLEPROCWNDGHSTING,
+#if (WIN32K_VERSION < NTDDI_VISTA)
+ NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
+ NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
+ NOPARAM_ROUTINE_DESTROY_CARET,
+#endif
+ NOPARAM_ROUTINE_GETDEVICECHANGEINFO,
+ NOPARAM_ROUTINE_GETIMESHOWSTATUS,
+ NOPARAM_ROUTINE_GETINPUTDESKTOP,
+ NOPARAM_ROUTINE_GETMSESSAGEPOS,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ NOPARAM_ROUTINE_HANDLESYSTHRDCREATFAIL,
+#else
+ NOPARAM_ROUTINE_GETREMOTEPROCID,
+#endif
+ NOPARAM_ROUTINE_HIDECURSORNOCAPTURE,
+ NOPARAM_ROUTINE_LOADCURSANDICOS,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ NOPARAM_ROUTINE_LOADUSERAPIHOOK,
+ NOPARAM_ROUTINE_PREPAREFORLOGOFF, /* 0x0f */
+#endif
+ NOPARAM_ROUTINE_RELEASECAPTURE,
+ NOPARAM_ROUTINE_RESETDBLCLICK,
+ NOPARAM_ROUTINE_ZAPACTIVEANDFOUS,
+ NOPARAM_ROUTINE_REMOTECONSHDWSTOP,
+ NOPARAM_ROUTINE_REMOTEDISCONNECT,
+ NOPARAM_ROUTINE_REMOTELOGOFF,
+ NOPARAM_ROUTINE_REMOTENTSECURITY,
+ NOPARAM_ROUTINE_REMOTESHDWSETUP,
+ NOPARAM_ROUTINE_REMOTESHDWSTOP,
+ NOPARAM_ROUTINE_REMOTEPASSTHRUENABLE,
+ NOPARAM_ROUTINE_REMOTEPASSTHRUDISABLE,
+ NOPARAM_ROUTINE_REMOTECONNECTSTATE,
+ NOPARAM_ROUTINE_UPDATEPERUSERIMMENABLING,
+ NOPARAM_ROUTINE_USERPWRCALLOUTWORKER,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ NOPARAM_ROUTINE_WAKERITFORSHTDWN,
+#endif
+ NOPARAM_ROUTINE_INIT_MESSAGE_PUMP,
+ NOPARAM_ROUTINE_UNINIT_MESSAGE_PUMP,
+#if (WIN32K_VERSION < NTDDI_VISTA)
+ NOPARAM_ROUTINE_LOADUSERAPIHOOK,
+#endif
+ ONEPARAM_ROUTINE_BEGINDEFERWNDPOS,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ ONEPARAM_ROUTINE_GETSENDMSGRECVR,
+#endif
+ ONEPARAM_ROUTINE_WINDOWFROMDC,
+ ONEPARAM_ROUTINE_ALLOWSETFOREGND,
+ ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT,
+#if (WIN32K_VERSION < NTDDI_VISTA)
+ ONEPARAM_ROUTINE_CREATESYSTEMTHREADS,
+#endif
+ ONEPARAM_ROUTINE_CSDDEUNINITIALIZE,
+ ONEPARAM_ROUTINE_DIRECTEDYIELD,
+ ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS,
+#if (WIN32K_VERSION < NTDDI_VISTA)
+ ONEPARAM_ROUTINE_GETCURSORPOS,
+#endif
+ ONEPARAM_ROUTINE_GETINPUTEVENT,
+ ONEPARAM_ROUTINE_GETKEYBOARDLAYOUT,
+ ONEPARAM_ROUTINE_GETKEYBOARDTYPE,
+ ONEPARAM_ROUTINE_GETPROCDEFLAYOUT,
+ ONEPARAM_ROUTINE_GETQUEUESTATUS,
+ ONEPARAM_ROUTINE_GETWINSTAINFO,
+#if (WIN32K_VERSION < NTDDI_VISTA)
+ ONEPARAM_ROUTINE_HANDLESYSTHRDCREATFAIL,
+#endif
+ ONEPARAM_ROUTINE_LOCKFOREGNDWINDOW,
+ ONEPARAM_ROUTINE_LOADFONTS,
+ ONEPARAM_ROUTINE_MAPDEKTOPOBJECT,
+ ONEPARAM_ROUTINE_MESSAGEBEEP,
+ ONEPARAM_ROUTINE_PLAYEVENTSOUND,
+ ONEPARAM_ROUTINE_POSTQUITMESSAGE,
+#if (WIN32K_VERSION < NTDDI_VISTA)
+ ONEPARAM_ROUTINE_PREPAREFORLOGOFF,
+#endif
+ ONEPARAM_ROUTINE_REALIZEPALETTE,
+ ONEPARAM_ROUTINE_REGISTERLPK,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ ONEPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
+#endif
+ ONEPARAM_ROUTINE_REMOTERECONNECT,
+ ONEPARAM_ROUTINE_REMOTETHINWIRESTATUS,
+ ONEPARAM_ROUTINE_RELEASEDC,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ ONEPARAM_ROUTINE_REMOTENOTIFY,
+#endif
+ ONEPARAM_ROUTINE_REPLYMESSAGE,
+ ONEPARAM_ROUTINE_SETCARETBLINKTIME,
+ ONEPARAM_ROUTINE_SETDBLCLICKTIME,
+#if (WIN32K_VERSION < NTDDI_VISTA)
+ ONEPARAM_ROUTINE_SETIMESHOWSTATUS,
+#endif
+ ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO,
+ ONEPARAM_ROUTINE_SETPROCDEFLAYOUT,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ ONEPARAM_ROUTINE_SETWATERMARKSTRINGS,
+#endif
+ ONEPARAM_ROUTINE_SHOWCURSOR,
+ ONEPARAM_ROUTINE_SHOWSTARTGLASS,
+ ONEPARAM_ROUTINE_SWAPMOUSEBUTTON,
+ X_ROUTINE_WOWMODULEUNLOAD,
+#if (WIN32K_VERSION < NTDDI_VISTA)
+ X_ROUTINE_REMOTENOTIFY,
+#endif
+ HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW,
+ HWND_ROUTINE_DWP_GETENABLEDPOPUP,
+ HWND_ROUTINE_GETWNDCONTEXTHLPID,
+ HWND_ROUTINE_REGISTERSHELLHOOKWINDOW,
+ HWND_ROUTINE_SETMSGBOX,
+ HWNDOPT_ROUTINE_SETPROGMANWINDOW,
+ HWNDOPT_ROUTINE_SETTASKMANWINDOW,
+ HWNDPARAM_ROUTINE_GETCLASSICOCUR,
+ HWNDPARAM_ROUTINE_CLEARWINDOWSTATE,
+ HWNDPARAM_ROUTINE_KILLSYSTEMTIMER,
+ HWNDPARAM_ROUTINE_SETDIALOGPOINTER,
+ HWNDPARAM_ROUTINE_SETVISIBLE,
+ HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID,
+ HWNDPARAM_ROUTINE_SETWINDOWSTATE,
+ HWNDLOCK_ROUTINE_WINDOWHASSHADOW, /* correct prefix ? */
+ HWNDLOCK_ROUTINE_ARRANGEICONICWINDOWS,
+ HWNDLOCK_ROUTINE_DRAWMENUBAR,
+ HWNDLOCK_ROUTINE_CHECKIMESHOWSTATUSINTHRD,
+ HWNDLOCK_ROUTINE_GETSYSMENUHANDLE,
+ HWNDLOCK_ROUTINE_REDRAWFRAME,
+ HWNDLOCK_ROUTINE_REDRAWFRAMEANDHOOK,
+ HWNDLOCK_ROUTINE_SETDLGSYSMENU,
+ HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW,
+ HWNDLOCK_ROUTINE_SETSYSMENU,
+ HWNDLOCK_ROUTINE_UPDATECKIENTRECT,
+ HWNDLOCK_ROUTINE_UPDATEWINDOW,
+ X_ROUTINE_IMESHOWSTATUSCHANGE,
+ TWOPARAM_ROUTINE_ENABLEWINDOW,
+ TWOPARAM_ROUTINE_REDRAWTITLE,
+ TWOPARAM_ROUTINE_SHOWOWNEDPOPUPS,
+ TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW,
+ TWOPARAM_ROUTINE_UPDATEWINDOWS,
+ TWOPARAM_ROUTINE_VALIDATERGN,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ TWOPARAM_ROUTINE_CHANGEWNDMSGFILTER,
+ TWOPARAM_ROUTINE_GETCURSORPOS,
+#endif
+ TWOPARAM_ROUTINE_GETHDEVNAME,
+ TWOPARAM_ROUTINE_INITANSIOEM,
+ TWOPARAM_ROUTINE_NLSSENDIMENOTIFY,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ TWOPARAM_ROUTINE_REGISTERGHSTWND,
+#endif
+ TWOPARAM_ROUTINE_REGISTERLOGONPROCESS,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ TWOPARAM_ROUTINE_REGISTERSBLFROSTWND,
+#else
+ TWOPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
+#endif
+ TWOPARAM_ROUTINE_REGISTERUSERHUNGAPPHANDLERS,
+ TWOPARAM_ROUTINE_SHADOWCLEANUP,
+ TWOPARAM_ROUTINE_REMOTESHADOWSTART,
+ TWOPARAM_ROUTINE_SETCARETPOS,
+ TWOPARAM_ROUTINE_SETCURSORPOS,
+#if (WIN32K_VERSION >= NTDDI_VISTA)
+ TWOPARAM_ROUTINE_SETPHYSCURSORPOS,
+#endif
+ TWOPARAM_ROUTINE_UNHOOKWINDOWSHOOK,
+ TWOPARAM_ROUTINE_WOWCLEANUP
+};
+
+DWORD
+NTAPI
+NtUserCallHwnd(
+ HWND hWnd,
+ DWORD Routine);
+
+BOOL
+NTAPI
+NtUserCallHwndLock(
+ HWND hWnd,
+ DWORD Routine);
+
+HWND
+NTAPI
+NtUserCallHwndOpt(
+ HWND hWnd,
+ DWORD Routine);
+
+DWORD
+NTAPI
+NtUserCallHwndParam(
+ HWND hWnd,
+ DWORD Param,
+ DWORD Routine);
+
+DWORD
+NTAPI
+NtUserCallHwndParamLock(
+ HWND hWnd,
+ DWORD Param,
+ DWORD Routine);
+
+BOOL
+NTAPI
+NtUserCallMsgFilter(
+ LPMSG msg,
+ INT code);
+
+LRESULT
+NTAPI
+NtUserCallNextHookEx(
+ int Code,
+ WPARAM wParam,
+ LPARAM lParam,
+ BOOL Ansi);
+
+DWORD_PTR
+NTAPI
+NtUserCallNoParam(
+ DWORD Routine);
+
+DWORD_PTR
+NTAPI
+NtUserCallOneParam(
+ DWORD_PTR Param,
+ DWORD Routine);
+
+DWORD_PTR
+NTAPI
+NtUserCallTwoParam(
+ DWORD_PTR Param1,
+ DWORD_PTR Param2,
+ DWORD Routine);
+
+BOOL
+NTAPI
+NtUserChangeClipboardChain(
+ HWND hWndRemove,
+ HWND hWndNewNext);
+
+LONG
+NTAPI
+NtUserChangeDisplaySettings(
+ PUNICODE_STRING lpszDeviceName,
+ LPDEVMODEW lpDevMode,
+ HWND hwnd,
+ DWORD dwflags,
+ LPVOID lParam);
+
+BOOL
+NTAPI
+NtUserCheckDesktopByThreadId(
+ DWORD dwThreadId);
+
+BOOL
+NTAPI
+NtUserCheckWindowThreadDesktop(
+ HWND hwnd,
+ DWORD dwThreadId,
+ ULONG ReturnValue);
+
+DWORD
+NTAPI
+NtUserCheckImeHotKey(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2);
+
+HWND NTAPI
+NtUserChildWindowFromPointEx(
+ HWND Parent,
+ LONG x,
+ LONG y,
+ UINT Flags);
+
+BOOL
+NTAPI
+NtUserClipCursor(
+ RECT *lpRect);
+
+BOOL
+NTAPI
+NtUserCloseClipboard(VOID);
+
+BOOL
+NTAPI
+NtUserCloseDesktop(
+ HDESK hDesktop);
+
+BOOL
+NTAPI
+NtUserCloseWindowStation(
+ HWINSTA hWinSta);
+
+/* Console commands for NtUserConsoleControl */
+typedef enum _CONSOLECONTROL
+{
+ GuiConsoleWndClassAtom,
+ TuiConsoleWndClassAtom,
+} CONSOLECONTROL, *PCONSOLECONTROL;
+
+NTSTATUS
+APIENTRY
+NtUserConsoleControl(
+ IN CONSOLECONTROL ConsoleCtrl,
+ IN PVOID ConsoleCtrlInfo,
+ IN DWORD ConsoleCtrlInfoLength);
+
+HANDLE
+NTAPI
+NtUserConvertMemHandle(
+ PVOID pData,
+ DWORD cbData);
+
+ULONG
+NTAPI
+NtUserCopyAcceleratorTable(
+ HACCEL Table,
+ LPACCEL Entries,
+ ULONG EntriesCount);
+
+DWORD
+NTAPI
+NtUserCountClipboardFormats(VOID);
+
+HACCEL
+NTAPI
+NtUserCreateAcceleratorTable(
+ LPACCEL Entries,
+ ULONG EntriesCount);
+
+BOOL
+NTAPI
+NtUserCreateCaret(
+ HWND hWnd,
+ HBITMAP hBitmap,
+ int nWidth,
+ int nHeight);
+
+HDESK
+NTAPI
+NtUserCreateDesktop(
+ POBJECT_ATTRIBUTES poa,
+ PUNICODE_STRING lpszDesktopDevice,
+ LPDEVMODEW lpdmw,
+ DWORD dwFlags,
+ ACCESS_MASK dwDesiredAccess);
+
+DWORD
+NTAPI
+NtUserCreateInputContext(
+ DWORD dwUnknown1);
+
+NTSTATUS
+NTAPI
+NtUserCreateLocalMemHandle(
+ HANDLE hMem,
+ PVOID pData,
+ DWORD cbData,
+ DWORD *pcbData);
+
+HWND
+NTAPI
+NtUserCreateWindowEx(
+ DWORD dwExStyle,
+ PLARGE_STRING plstrClassName,
+ PLARGE_STRING plstrClsVersion,
+ PLARGE_STRING plstrWindowName,
+ DWORD dwStyle,
+ int x,
+ int y,
+ int nWidth,
+ int nHeight,
+ HWND hWndParent,
+ HMENU hMenu,
+ HINSTANCE hInstance,
+ LPVOID lpParam,
+ DWORD dwFlags,
+ PVOID acbiBuffer);
+
+HWINSTA
+NTAPI
+NtUserCreateWindowStation(
+ POBJECT_ATTRIBUTES ObjectAttributes,
+ ACCESS_MASK dwDesiredAccess,
+ DWORD Unknown2,
+ DWORD Unknown3,
+ DWORD Unknown4,
+ DWORD Unknown5,
+ DWORD Unknown6);
+
+BOOL
+NTAPI
+NtUserDdeGetQualityOfService(
+ IN HWND hwndClient,
+ IN HWND hWndServer,
+ OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
+
+DWORD
+NTAPI
+NtUserDdeInitialize(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2,
+ DWORD Unknown3,
+ DWORD Unknown4);
+
+BOOL
+NTAPI
+NtUserDdeSetQualityOfService(
+ IN HWND hwndClient,
+ IN PSECURITY_QUALITY_OF_SERVICE pqosNew,
+ OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
+
+HDWP NTAPI
+NtUserDeferWindowPos(
+ HDWP WinPosInfo,
+ HWND Wnd,
+ HWND WndInsertAfter,
+ int x,
+ int y,
+ int cx,
+ int cy,
+ UINT Flags);
+
+BOOL NTAPI
+NtUserDefSetText(HWND WindowHandle, PLARGE_STRING WindowText);
+
+BOOLEAN
+NTAPI
+NtUserDestroyAcceleratorTable(
+ HACCEL Table);
+
+BOOL
+NTAPI
+NtUserDestroyCursor(
+ _In_ HANDLE Handle,
+ _In_ BOOL bForce);
+
+DWORD
+NTAPI
+NtUserDestroyInputContext(
+ DWORD dwUnknown1);
+
+BOOLEAN NTAPI
+NtUserDestroyWindow(HWND Wnd);
+
+DWORD
+NTAPI
+NtUserDisableThreadIme(
+ DWORD dwUnknown1);
+
+LRESULT
+NTAPI
+NtUserDispatchMessage(PMSG pMsg);
+
+BOOL
+NTAPI
+NtUserDragDetect(
+ HWND hWnd,
+ POINT pt);
+
+DWORD
+NTAPI
+NtUserDragObject(
+ HWND hwnd1,
+ HWND hwnd2,
+ UINT u1,
+ DWORD dw1,
+ HCURSOR hc1);
+
+BOOL
+NTAPI
+NtUserDrawAnimatedRects(
+ HWND hwnd,
+ INT idAni,
+ RECT *lprcFrom,
+ RECT *lprcTo);
+
+BOOL
+NTAPI
+NtUserDrawCaption(
+ HWND hWnd,
+ HDC hDc,
+ LPCRECT lpRc,
+ UINT uFlags);
+
+BOOL
+NTAPI
+NtUserDrawCaptionTemp(
+ HWND hWnd,
+ HDC hDC,
+ LPCRECT lpRc,
+ HFONT hFont,
+ HICON hIcon,
+ const PUNICODE_STRING str,
+ UINT uFlags);
+
+// Used with NtUserDrawIconEx, last parameter.
+typedef struct _DRAWICONEXDATA
+{
+ HBITMAP hbmMask;
+ HBITMAP hbmColor;
+ int cx;
+ int cy;
+} DRAWICONEXDATA, *PDRAWICONEXDATA;
+
+BOOL
+NTAPI
+NtUserDrawIconEx(
+ HDC hdc,
+ int xLeft,
+ int yTop,
+ HICON hIcon,
+ int cxWidth,
+ int cyWidth,
+ UINT istepIfAniCur,
+ HBRUSH hbrFlickerFreeDraw,
+ UINT diFlags,
+ BOOL bMetaHDC,
+ PVOID pDIXData);
+
+BOOL
+NTAPI
+NtUserEmptyClipboard(VOID);
+
+BOOL
+NTAPI
+NtUserEnableScrollBar(
+ HWND hWnd,
+ UINT wSBflags,
+ UINT wArrows);
+
+BOOL
+NTAPI
+NtUserEndDeferWindowPosEx(
+ HDWP WinPosInfo,
+ DWORD Unknown1);
+
+BOOL NTAPI
+NtUserEndPaint(HWND hWnd, CONST PAINTSTRUCT* lPs);
+
+BOOL
+NTAPI
+NtUserEnumDisplayDevices (
+ PUNICODE_STRING lpDevice, /* device name */
+ DWORD iDevNum, /* display device */
+ PDISPLAY_DEVICEW lpDisplayDevice, /* device information */
+ DWORD dwFlags ); /* reserved */
+
+/*BOOL
+NTAPI
+NtUserEnumDisplayMonitors (
+ HDC hdc,
+ LPCRECT lprcClip,
+ MONITORENUMPROC lpfnEnum,
+ LPARAM dwData );*/
+/* FIXME: The call below is ros-specific and should be rewritten to use the same params as the correct call above. */
+INT
+NTAPI
+NtUserEnumDisplayMonitors(
+ OPTIONAL IN HDC hDC,
+ OPTIONAL IN LPCRECT pRect,
+ OPTIONAL OUT HMONITOR *hMonitorList,
+ OPTIONAL OUT LPRECT monitorRectList,
+ OPTIONAL IN DWORD listSize );
+
+
+NTSTATUS
+NTAPI
+NtUserEnumDisplaySettings(
+ PUNICODE_STRING lpszDeviceName,
+ DWORD iModeNum,
+ LPDEVMODEW lpDevMode, /* FIXME is this correct? */
+ DWORD dwFlags );
+
+DWORD
+NTAPI
+NtUserEvent(
+ DWORD Unknown0);
+
+DWORD
+NTAPI
+NtUserExcludeUpdateRgn(
+ HDC hDC,
+ HWND hWnd);
+
+BOOL
+NTAPI
+NtUserFillWindow(
+ HWND hWndPaint,
+ HWND hWndPaint1,
+ HDC hDC,
+ HBRUSH hBrush);
+
+HWND
+NTAPI
+NtUserFindWindowEx(
+ HWND hwndParent,
+ HWND hwndChildAfter,
+ PUNICODE_STRING ucClassName,
+ PUNICODE_STRING ucWindowName,
+ DWORD dwUnknown
+ );
+
+BOOL
+NTAPI
+NtUserFlashWindowEx(
+ IN PFLASHWINFO pfwi);
+
+BOOL
+NTAPI
+NtUserGetAltTabInfo(
+ HWND hwnd,
+ INT iItem,
+ PALTTABINFO pati,
+ LPWSTR pszItemText,
+ UINT cchItemText,
+ BOOL Ansi);
+
+HWND NTAPI
+NtUserGetAncestor(HWND hWnd, UINT Flags);
+
+DWORD
+NTAPI
+NtUserGetAppImeLevel(
+ DWORD dwUnknown1);
+
+SHORT
+NTAPI
+NtUserGetAsyncKeyState(
+ INT Key);
+
+_Success_(return!=0)
+_At_(pustrName->Buffer, _Out_z_bytecap_post_bytecount_(pustrName->MaximumLength, return*2+2))
+ULONG
+APIENTRY
+NtUserGetAtomName(
+ _In_ ATOM atom,
+ _Inout_ PUNICODE_STRING pustrName);
+
+UINT
+NTAPI
+NtUserGetCaretBlinkTime(VOID);
+
+BOOL
+NTAPI
+NtUserGetCaretPos(
+ LPPOINT lpPoint);
+
+BOOL NTAPI
+NtUserGetClassInfo(HINSTANCE hInstance,
+ PUNICODE_STRING ClassName,
+ LPWNDCLASSEXW wcex,
+ LPWSTR *ppszMenuName,
+ BOOL Ansi);
+
+INT
+NTAPI
+NtUserGetClassName(HWND hWnd,
+ BOOL Real, // 0 GetClassNameW, 1 RealGetWindowClassA/W
+ PUNICODE_STRING ClassName);
+
+HANDLE
+NTAPI
+NtUserGetClipboardData(
+ UINT fmt,
+ PGETCLIPBDATA pgcd);
+
+INT
+NTAPI
+NtUserGetClipboardFormatName(
+ UINT uFormat,
+ LPWSTR lpszFormatName,
+ INT cchMaxCount);
+
+HWND
+NTAPI
+NtUserGetClipboardOwner(VOID);
+
+DWORD
+NTAPI
+NtUserGetClipboardSequenceNumber(VOID);
+
+HWND
+NTAPI
+NtUserGetClipboardViewer(VOID);
+
+BOOL
+NTAPI
+NtUserGetClipCursor(
+ RECT *lpRect);
+
+BOOL
+NTAPI
+NtUserGetComboBoxInfo(
+ HWND hWnd,
+ PCOMBOBOXINFO pcbi);
+
+HBRUSH
+NTAPI
+NtUserGetControlBrush(
+ HWND hwnd,
+ HDC hdc,
+ UINT ctlType);
+
+HBRUSH
+NTAPI
+NtUserGetControlColor(
+ HWND hwndParent,
+ HWND hwnd,
+ HDC hdc,
+ UINT CtlMsg);
+
+ULONG_PTR
+NTAPI
+NtUserGetCPD(
+ HWND hWnd,
+ GETCPD Flags,
+ ULONG_PTR Proc);
+
+HCURSOR
+NTAPI
+NtUserGetCursorFrameInfo(
+ HCURSOR hCursor,
+ DWORD istep,
+ PDWORD rate_jiffies,
+ INT *num_steps);
+
+BOOL
+NTAPI
+NtUserGetCursorInfo(
+ PCURSORINFO pci);
+
+HDC
+NTAPI
+NtUserGetDC(
+ HWND hWnd);
+
+HDC
+NTAPI
+NtUserGetDCEx(
+ HWND hWnd,
+ HANDLE hRegion,
+ ULONG Flags);
+
+UINT
+NTAPI
+NtUserGetDoubleClickTime(VOID);
+
+HWND
+NTAPI
+NtUserGetForegroundWindow(VOID);
+
+DWORD
+NTAPI
+NtUserGetGuiResources(
+ HANDLE hProcess,
+ DWORD uiFlags);
+
+BOOL
+NTAPI
+NtUserGetGUIThreadInfo(
+ DWORD idThread,
+ LPGUITHREADINFO lpgui);
+
+_Success_(return!=FALSE)
+BOOL
+NTAPI
+NtUserGetIconInfo(
+ _In_ HANDLE hCurIcon,
+ _Out_opt_ PICONINFO IconInfo,
+ _Inout_opt_ PUNICODE_STRING lpInstName,
+ _Inout_opt_ PUNICODE_STRING lpResName,
+ _Out_opt_ LPDWORD pbpp,
+ _In_ BOOL bInternal);
+
+BOOL
+NTAPI
+NtUserGetIconSize(
+ HANDLE Handle,
+ UINT istepIfAniCur,
+ LONG *plcx,
+ LONG *plcy);
+
+DWORD
+NTAPI
+NtUserGetImeHotKey(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2,
+ DWORD Unknown3);
+
+DWORD
+NTAPI
+NtUserGetImeInfoEx(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2);
+
+DWORD
+NTAPI
+NtUserGetInternalWindowPos(
+ HWND hwnd,
+ LPRECT rectWnd,
+ LPPOINT ptIcon);
+
+HKL
+NTAPI
+NtUserGetKeyboardLayout(
+ DWORD dwThreadid);
+
+UINT
+NTAPI
+NtUserGetKeyboardLayoutList(
+ ULONG nItems,
+ HKL *pHklBuff);
+
+BOOL
+NTAPI
+NtUserGetKeyboardLayoutName(
+ LPWSTR lpszName);
+
+DWORD
+NTAPI
+NtUserGetKeyboardState(
+ LPBYTE Unknown0);
+
+DWORD
+NTAPI
+NtUserGetKeyboardType(
+ DWORD TypeFlag);
+
+DWORD
+NTAPI
+NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize );
+
+SHORT
+NTAPI
+NtUserGetKeyState(
+ INT VirtKey);
+
+BOOL
+NTAPI
+NtUserGetLayeredWindowAttributes(
+ HWND hwnd,
+ COLORREF *pcrKey,
+ BYTE *pbAlpha,
+ DWORD *pdwFlags);
+
+DWORD
+NTAPI
+NtUserGetListBoxInfo(
+ HWND hWnd);
+
+BOOL APIENTRY
+NtUserGetMessage(PMSG pMsg,
+ HWND hWnd,
+ UINT MsgFilterMin,
+ UINT MsgFilterMax);
+
+DWORD
+NTAPI
+NtUserGetMouseMovePointsEx(
+ UINT cbSize,
+ LPMOUSEMOVEPOINT lppt,
+ LPMOUSEMOVEPOINT lpptBuf,
+ int nBufPoints,
+ DWORD resolution);
+
+BOOL
+NTAPI
+NtUserGetObjectInformation(
+ HANDLE hObject,
+ DWORD nIndex,
+ PVOID pvInformation,
+ DWORD nLength,
+ PDWORD nLengthNeeded);
+
+HWND
+NTAPI
+NtUserGetOpenClipboardWindow(VOID);
+
+INT
+NTAPI
+NtUserGetPriorityClipboardFormat(
+ UINT *paFormatPriorityList,
+ INT cFormats);
+
+HWINSTA
+NTAPI
+NtUserGetProcessWindowStation(VOID);
+
+DWORD
+NTAPI
+NtUserGetRawInputBuffer(
+ PRAWINPUT pData,
+ PUINT pcbSize,
+ UINT cbSizeHeader);
+
+DWORD
+NTAPI
+NtUserGetRawInputData(
+ HRAWINPUT hRawInput,
+ UINT uiCommand,
+ LPVOID pData,
+ PUINT pcbSize,
+ UINT cbSizeHeader);
+
+DWORD
+NTAPI
+NtUserGetRawInputDeviceInfo(
+ HANDLE hDevice,
+ UINT uiCommand,
+ LPVOID pData,
+ PUINT pcbSize);
+
+DWORD
+NTAPI
+NtUserGetRawInputDeviceList(
+ PRAWINPUTDEVICELIST pRawInputDeviceList,
+ PUINT puiNumDevices,
+ UINT cbSize);
+
+DWORD
+NTAPI
+NtUserGetRegisteredRawInputDevices(
+ PRAWINPUTDEVICE pRawInputDevices,
+ PUINT puiNumDevices,
+ UINT cbSize);
+
+BOOL
+NTAPI
+NtUserGetScrollBarInfo(
+ HWND hWnd,
+ LONG idObject,
+ PSCROLLBARINFO psbi);
+
+HDESK
+NTAPI
+NtUserGetThreadDesktop(
+ DWORD dwThreadId,
+ DWORD Unknown1);
+
+
+enum ThreadStateRoutines
+{
+ THREADSTATE_GETTHREADINFO,
+ THREADSTATE_INSENDMESSAGE,
+ THREADSTATE_FOCUSWINDOW,
+ THREADSTATE_ACTIVEWINDOW,
+ THREADSTATE_CAPTUREWINDOW,
+ THREADSTATE_PROGMANWINDOW,
+ THREADSTATE_TASKMANWINDOW,
+ THREADSTATE_GETMESSAGETIME,
+ THREADSTATE_GETINPUTSTATE,
+ THREADSTATE_UPTIMELASTREAD,
+ THREADSTATE_FOREGROUNDTHREAD,
+ THREADSTATE_GETCURSOR
+};
+
+DWORD_PTR
+NTAPI
+NtUserGetThreadState(
+ DWORD Routine);
+
+BOOLEAN
+NTAPI
+NtUserGetTitleBarInfo(
+ HWND hwnd,
+ PTITLEBARINFO pti);
+
+BOOL NTAPI
+NtUserGetUpdateRect(HWND hWnd, LPRECT lpRect, BOOL fErase);
+
+int
+NTAPI
+NtUserGetUpdateRgn(
+ HWND hWnd,
+ HRGN hRgn,
+ BOOL bErase);
+
+HDC
+NTAPI
+NtUserGetWindowDC(
+ HWND hWnd);
+
+BOOL
+NTAPI
+NtUserGetWindowPlacement(
+ HWND hWnd,
+ WINDOWPLACEMENT *lpwndpl);
+
+PCLS
+NTAPI
+NtUserGetWOWClass(
+ HINSTANCE hInstance,
+ PUNICODE_STRING ClassName);
+
+DWORD
+NTAPI
+NtUserHardErrorControl(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3);
+
+BOOL
+NTAPI
+NtUserImpersonateDdeClientWindow(
+ HWND hWndClient,
+ HWND hWndServer);
+
+NTSTATUS
+NTAPI
+NtUserInitialize(
+ DWORD dwWinVersion,
+ HANDLE hPowerRequestEvent,
+ HANDLE hMediaRequestEvent);
+
+NTSTATUS
+NTAPI
+NtUserInitializeClientPfnArrays(
+ PPFNCLIENT pfnClientA,
+ PPFNCLIENT pfnClientW,
+ PPFNCLIENTWORKER pfnClientWorker,
+ HINSTANCE hmodUser);
+
+DWORD
+NTAPI
+NtUserInitTask(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2,
+ DWORD Unknown3,
+ DWORD Unknown4,
+ DWORD Unknown5,
+ DWORD Unknown6,
+ DWORD Unknown7,
+ DWORD Unknown8,
+ DWORD Unknown9,
+ DWORD Unknown10,
+ DWORD Unknown11);
+
+INT
+NTAPI
+NtUserInternalGetWindowText(
+ HWND hWnd,
+ LPWSTR lpString,
+ INT nMaxCount);
+
+BOOL
+NTAPI
+NtUserInvalidateRect(
+ HWND hWnd,
+ CONST RECT *lpRect,
+ BOOL bErase);
+
+BOOL
+NTAPI
+NtUserInvalidateRgn(
+ HWND hWnd,
+ HRGN hRgn,
+ BOOL bErase);
+
+BOOL
+NTAPI
+NtUserIsClipboardFormatAvailable(
+ UINT format);
+
+BOOL
+NTAPI
+NtUserKillTimer
+(
+ HWND hWnd,
+ UINT_PTR uIDEvent
+);
+
+HKL
+NTAPI
+NtUserLoadKeyboardLayoutEx(
+ IN HANDLE Handle,
+ IN DWORD offTable,
+ IN PUNICODE_STRING puszKeyboardName,
+ IN HKL hKL,
+ IN PUNICODE_STRING puszKLID,
+ IN DWORD dwKLID,
+ IN UINT Flags);
+
+BOOL
+NTAPI
+NtUserLockWindowStation(
+ HWINSTA hWindowStation);
+
+BOOL
+NTAPI
+NtUserLockWindowUpdate(
+ HWND hWnd);
+
+BOOL
+NTAPI
+NtUserLockWorkStation(VOID);
+
+UINT
+NTAPI
+NtUserMapVirtualKeyEx( UINT keyCode,
+ UINT transType,
+ DWORD keyboardId,
+ HKL dwhkl );
+
+typedef struct tagDOSENDMESSAGE
+{
+ UINT uFlags;
+ UINT uTimeout;
+ ULONG_PTR Result;
+}
+DOSENDMESSAGE, *PDOSENDMESSAGE;
+
+BOOL
+NTAPI
+NtUserMessageCall(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam,
+ ULONG_PTR ResultInfo,
+ DWORD dwType, // FNID_XX types
+ BOOL Ansi);
+
+DWORD
+NTAPI
+NtUserMinMaximize(
+ HWND hWnd,
+ UINT cmd, // Wine SW_ commands
+ BOOL Hide);
+
+DWORD
+NTAPI
+NtUserMNDragLeave(VOID);
+
+DWORD
+NTAPI
+NtUserMNDragOver(
+ DWORD Unknown0,
+ DWORD Unknown1);
+
+DWORD
+NTAPI
+NtUserModifyUserStartupInfoFlags(
+ DWORD Unknown0,
+ DWORD Unknown1);
+
+BOOL
+NTAPI
+NtUserMoveWindow(
+ HWND hWnd,
+ int X,
+ int Y,
+ int nWidth,
+ int nHeight,
+ BOOL bRepaint
+);
+
+DWORD
+NTAPI
+NtUserNotifyIMEStatus(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2);
+
+DWORD
+NTAPI
+NtUserNotifyProcessCreate(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4);
+
+VOID
+NTAPI
+NtUserNotifyWinEvent(
+ DWORD Event,
+ HWND hWnd,
+ LONG idObject,
+ LONG idChild);
+
+BOOL
+NTAPI
+NtUserOpenClipboard(
+ HWND hWnd,
+ DWORD Unknown1);
+
+HDESK
+NTAPI
+NtUserOpenDesktop(
+ POBJECT_ATTRIBUTES ObjectAttributes,
+ DWORD dwFlags,
+ ACCESS_MASK dwDesiredAccess);
+
+HDESK
+NTAPI
+NtUserOpenInputDesktop(
+ DWORD dwFlags,
+ BOOL fInherit,
+ ACCESS_MASK dwDesiredAccess);
+
+HWINSTA
+NTAPI
+NtUserOpenWindowStation(
+ POBJECT_ATTRIBUTES ObjectAttributes,
+ ACCESS_MASK dwDesiredAccess);
+
+BOOL
+NTAPI
+NtUserPaintDesktop(
+ HDC hDC);
+
+DWORD
+NTAPI
+NtUserPaintMenuBar(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4,
+ DWORD dwUnknown5,
+ DWORD dwUnknown6);
+
+BOOL APIENTRY
+NtUserPeekMessage( PMSG pMsg,
+ HWND hWnd,
+ UINT MsgFilterMin,
+ UINT MsgFilterMax,
+ UINT RemoveMsg);
+
+BOOL
+NTAPI
+NtUserPostMessage(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+BOOL
+NTAPI
+NtUserPostThreadMessage(
+ DWORD idThread,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+BOOL
+NTAPI
+NtUserPrintWindow(
+ HWND hwnd,
+ HDC hdcBlt,
+ UINT nFlags);
+
+NTSTATUS
+NTAPI
+NtUserProcessConnect(
+ IN HANDLE Process,
+ OUT PUSERCONNECT pUserConnect,
+ IN DWORD dwSize); // sizeof(USERCONNECT)
+
+DWORD
+NTAPI
+NtUserQueryInformationThread(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4,
+ DWORD dwUnknown5);
+
+DWORD
+NTAPI
+NtUserQueryInputContext(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2);
+
+DWORD
+NTAPI
+NtUserQuerySendMessage(
+ DWORD Unknown0);
+
+DWORD
+NTAPI
+NtUserQueryUserCounters(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2,
+ DWORD Unknown3,
+ DWORD Unknown4);
+
+#define QUERY_WINDOW_UNIQUE_PROCESS_ID 0x00
+#define QUERY_WINDOW_UNIQUE_THREAD_ID 0x01
+#define QUERY_WINDOW_ACTIVE 0x02
+#define QUERY_WINDOW_FOCUS 0x03
+#define QUERY_WINDOW_ISHUNG 0x04
+#define QUERY_WINDOW_REAL_ID 0x05
+#define QUERY_WINDOW_FOREGROUND 0x06
+DWORD
+NTAPI
+NtUserQueryWindow(
+ HWND hWnd,
+ DWORD Index);
+
+BOOL
+NTAPI
+NtUserRealInternalGetMessage(
+ LPMSG lpMsg,
+ HWND hWnd,
+ UINT wMsgFilterMin,
+ UINT wMsgFilterMax,
+ UINT wRemoveMsg,
+ BOOL bGMSG);
+
+HWND
+NTAPI
+NtUserRealChildWindowFromPoint(
+ HWND Parent,
+ LONG x,
+ LONG y);
+
+BOOL
+NTAPI
+NtUserRealWaitMessageEx(
+ DWORD dwWakeMask,
+ UINT uTimeout);
+
+BOOL
+NTAPI
+NtUserRedrawWindow
+(
+ HWND hWnd,
+ CONST RECT *lprcUpdate,
+ HRGN hrgnUpdate,
+ UINT flags
+);
+
+RTL_ATOM
+NTAPI
+NtUserRegisterClassExWOW(
+ WNDCLASSEXW* lpwcx,
+ PUNICODE_STRING pustrClassName,
+ PUNICODE_STRING pustrCNVersion,
+ PCLSMENUNAME pClassMenuName,
+ DWORD fnID,
+ DWORD Flags,
+ LPDWORD pWow);
+
+BOOL
+NTAPI
+NtUserRegisterRawInputDevices(
+ IN PCRAWINPUTDEVICE pRawInputDevices,
+ IN UINT uiNumDevices,
+ IN UINT cbSize);
+
+BOOL
+NTAPI
+NtUserRegisterUserApiHook(
+ PUNICODE_STRING m_dllname1,
+ PUNICODE_STRING m_funname1,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4);
+
+BOOL
+NTAPI
+NtUserRegisterHotKey(HWND hWnd,
+ int id,
+ UINT fsModifiers,
+ UINT vk);
+
+DWORD
+NTAPI
+NtUserRegisterTasklist(
+ DWORD Unknown0);
+
+UINT NTAPI
+NtUserRegisterWindowMessage(PUNICODE_STRING MessageName);
+
+DWORD
+NTAPI
+NtUserRemoteConnect(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3);
+
+DWORD
+NTAPI
+NtUserRemoteRedrawRectangle(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4);
+
+DWORD
+NTAPI
+NtUserRemoteRedrawScreen(VOID);
+
+DWORD
+NTAPI
+NtUserRemoteStopScreenUpdates(VOID);
+
+HANDLE NTAPI
+NtUserRemoveProp(HWND hWnd, ATOM Atom);
+
+DWORD
+NTAPI
+NtUserResolveDesktop(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4);
+
+DWORD
+NTAPI
+NtUserResolveDesktopForWOW(
+ DWORD Unknown0);
+
+BOOL
+NTAPI
+NtUserSBGetParms(
+ HWND hwnd,
+ int fnBar,
+ PSBDATA pSBData,
+ LPSCROLLINFO lpsi);
+
+BOOL
+NTAPI
+NtUserScrollDC(
+ HDC hDC,
+ int dx,
+ int dy,
+ CONST RECT *lprcScroll,
+ CONST RECT *lprcClip ,
+ HRGN hrgnUpdate,
+ LPRECT lprcUpdate);
+
+DWORD NTAPI
+NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *rect,
+ const RECT *clipRect, HRGN hrgnUpdate, LPRECT rcUpdate, UINT flags);
+
+UINT
+NTAPI
+NtUserSendInput(
+ UINT nInputs,
+ LPINPUT pInput,
+ INT cbSize);
+
+HWND NTAPI
+NtUserSetActiveWindow(HWND Wnd);
+
+DWORD
+NTAPI
+NtUserSetAppImeLevel(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2);
+
+HWND NTAPI
+NtUserSetCapture(HWND Wnd);
+
+ULONG_PTR NTAPI
+NtUserSetClassLong(
+ HWND hWnd,
+ INT Offset,
+ ULONG_PTR dwNewLong,
+ BOOL Ansi );
+
+WORD
+NTAPI
+NtUserSetClassWord(
+ HWND hWnd,
+ INT nIndex,
+ WORD wNewWord);
+
+HANDLE
+NTAPI
+NtUserSetClipboardData(
+ UINT fmt,
+ HANDLE hMem,
+ PSETCLIPBDATA scd);
+
+HWND
+NTAPI
+NtUserSetClipboardViewer(
+ HWND hWndNewViewer);
+
+HPALETTE
+NTAPI
+NtUserSelectPalette(
+ HDC hDC,
+ HPALETTE hpal,
+ BOOL ForceBackground
+);
+
+DWORD
+NTAPI
+NtUserSetConsoleReserveKeys(
+ DWORD Unknown0,
+ DWORD Unknown1);
+
+HCURSOR
+NTAPI
+NtUserSetCursor(
+ HCURSOR hCursor);
+
+BOOL
+NTAPI
+NtUserSetCursorContents(
+ HANDLE Handle,
+ PICONINFO IconInfo);
+
+#ifdef NEW_CURSORICON
+BOOL
+NTAPI
+NtUserSetCursorIconData(
+ _In_ HCURSOR hCursor,
+ _In_ PUNICODE_STRING pustrModule,
+ _In_ PUNICODE_STRING puSrcName,
+ _In_ PCURSORDATA pCursorData);
+
+typedef struct _tagFINDEXISTINGCURICONPARAM
+{
+ BOOL bIcon;
+ LONG cx;
+ LONG cy;
+} FINDEXISTINGCURICONPARAM;
+
+HICON
+NTAPI
+NtUserFindExistingCursorIcon(
+ _In_ PUNICODE_STRING pustrModule,
+ _In_ PUNICODE_STRING pustrRsrc,
+ _In_ FINDEXISTINGCURICONPARAM* param);
+#else
+BOOL
+NTAPI
+NtUserSetCursorIconData(
+ HANDLE Handle,
+ PBOOL fIcon,
+ POINT *Hotspot,
+ HMODULE hModule,
+ HRSRC hRsrc,
+ HRSRC hGroupRsrc);
+
+HICON
+NTAPI
+NtUserFindExistingCursorIcon(
+ HMODULE hModule,
+ HRSRC hRsrc,
+ LONG cx,
+ LONG cy);
+#endif
+
+DWORD
+NTAPI
+NtUserSetDbgTag(
+ DWORD Unknown0,
+ DWORD Unknown1);
+
+HWND
+NTAPI
+NtUserSetFocus(
+ HWND hWnd);
+
+DWORD
+NTAPI
+NtUserSetImeHotKey(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2,
+ DWORD Unknown3,
+ DWORD Unknown4);
+
+DWORD
+NTAPI
+NtUserSetImeInfoEx(
+ DWORD dwUnknown1);
+
+DWORD
+NTAPI
+NtUserSetImeOwnerWindow(
+ DWORD Unknown0,
+ DWORD Unknown1);
+
+DWORD
+NTAPI
+NtUserSetInformationProcess(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2,
+ DWORD dwUnknown3,
+ DWORD dwUnknown4);
+
+NTSTATUS
+NTAPI
+NtUserSetInformationThread(
+ IN HANDLE ThreadHandle,
+ IN USERTHREADINFOCLASS ThreadInformationClass,
+ IN PVOID ThreadInformation,
+ IN ULONG ThreadInformationLength
+);
+
+DWORD
+NTAPI
+NtUserSetInternalWindowPos(
+ HWND hwnd,
+ UINT showCmd,
+ LPRECT rect,
+ LPPOINT pt);
+
+BOOL
+NTAPI
+NtUserSetKeyboardState(
+ LPBYTE lpKeyState);
+
+BOOL
+NTAPI
+NtUserSetLayeredWindowAttributes(
+ HWND hwnd,
+ COLORREF crKey,
+ BYTE bAlpha,
+ DWORD dwFlags);
+
+BOOL
+NTAPI
+NtUserSetLogonNotifyWindow(
+ HWND hWnd);
+
+BOOL
+NTAPI
+NtUserSetObjectInformation(
+ HANDLE hObject,
+ DWORD nIndex,
+ PVOID pvInformation,
+ DWORD nLength);
+
+HWND
+NTAPI
+NtUserSetParent(
+ HWND hWndChild,
+ HWND hWndNewParent);
+
+BOOL
+NTAPI
+NtUserSetProcessWindowStation(
+ HWINSTA hWindowStation);
+
+BOOL NTAPI
+NtUserSetProp(HWND hWnd, ATOM Atom, HANDLE Data);
+
+DWORD
+NTAPI
+NtUserSetRipFlags(
+ DWORD Unknown0,
+ DWORD Unknown1);
+
+DWORD
+NTAPI
+NtUserSetScrollInfo(
+ HWND hwnd,
+ int fnBar,
+ LPCSCROLLINFO lpsi,
+ BOOL bRedraw);
+
+BOOL
+NTAPI
+NtUserSetShellWindowEx(
+ HWND hwndShell,
+ HWND hwndShellListView);
+
+BOOL
+NTAPI
+NtUserSetSysColors(
+ int cElements,
+ IN CONST INT *lpaElements,
+ IN CONST COLORREF *lpaRgbValues,
+ FLONG Flags);
+
+BOOL
+NTAPI
+NtUserSetSystemCursor(
+ HCURSOR hcur,
+ DWORD id);
+
+BOOL
+NTAPI
+NtUserSetThreadDesktop(
+ HDESK hDesktop);
+
+DWORD
+NTAPI
+NtUserSetThreadState(
+ DWORD Unknown0,
+ DWORD Unknown1);
+
+UINT_PTR
+NTAPI
+NtUserSetSystemTimer
+(
+ HWND hWnd,
+ UINT_PTR nIDEvent,
+ UINT uElapse,
+ TIMERPROC lpTimerFunc
+);
+
+DWORD
+NTAPI
+NtUserSetThreadLayoutHandles(
+ DWORD dwUnknown1,
+ DWORD dwUnknown2);
+
+UINT_PTR
+NTAPI
+NtUserSetTimer
+(
+ HWND hWnd,
+ UINT_PTR nIDEvent,
+ UINT uElapse,
+ TIMERPROC lpTimerFunc
+);
+
+BOOL
+NTAPI
+NtUserSetWindowFNID(
+ HWND hWnd,
+ WORD fnID);
+
+LONG
+NTAPI
+NtUserSetWindowLong(
+ HWND hWnd,
+ DWORD Index,
+ LONG NewValue,
+ BOOL Ansi);
+
+BOOL
+NTAPI
+NtUserSetWindowPlacement(
+ HWND hWnd,
+ WINDOWPLACEMENT *lpwndpl);
+
+BOOL
+NTAPI NtUserSetWindowPos(
+ HWND hWnd,
+ HWND hWndInsertAfter,
+ int X,
+ int Y,
+ int cx,
+ int cy,
+ UINT uFlags
+);
+
+INT
+NTAPI
+NtUserSetWindowRgn(
+ HWND hWnd,
+ HRGN hRgn,
+ BOOL bRedraw);
+
+HHOOK
+NTAPI
+NtUserSetWindowsHookAW(
+ int idHook,
+ HOOKPROC lpfn,
+ BOOL Ansi);
+
+HHOOK
+NTAPI
+NtUserSetWindowsHookEx(
+ HINSTANCE Mod,
+ PUNICODE_STRING ModuleName,
+ DWORD ThreadId,
+ int HookId,
+ HOOKPROC HookProc,
+ BOOL Ansi);
+
+DWORD
+NTAPI
+NtUserSetWindowStationUser(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2,
+ DWORD Unknown3);
+
+WORD NTAPI
+NtUserSetWindowWord(HWND hWnd, INT Index, WORD NewVal);
+
+HWINEVENTHOOK
+NTAPI
+NtUserSetWinEventHook(
+ UINT eventMin,
+ UINT eventMax,
+ HMODULE hmodWinEventProc,
+ PUNICODE_STRING puString,
+ WINEVENTPROC lpfnWinEventProc,
+ DWORD idProcess,
+ DWORD idThread,
+ UINT dwflags);
+
+BOOL
+NTAPI
+NtUserShowCaret(
+ HWND hWnd);
+
+BOOL
+NTAPI
+NtUserHideCaret(
+ HWND hWnd);
+
+DWORD
+NTAPI
+NtUserShowScrollBar(HWND hWnd, int wBar, DWORD bShow);
+
+BOOL
+NTAPI
+NtUserShowWindow(
+ HWND hWnd,
+ LONG nCmdShow);
+
+BOOL
+NTAPI
+NtUserShowWindowAsync(
+ HWND hWnd,
+ LONG nCmdShow);
+
+BOOL
+NTAPI
+NtUserSoundSentry(VOID);
+
+BOOL
+NTAPI
+NtUserSwitchDesktop(
+ HDESK hDesktop);
+
+BOOL
+NTAPI
+NtUserSystemParametersInfo(
+ UINT uiAction,
+ UINT uiParam,
+ PVOID pvParam,
+ UINT fWinIni);
+
+DWORD
+NTAPI
+NtUserTestForInteractiveUser(
+ DWORD dwUnknown1);
+
+INT
+NTAPI
+NtUserToUnicodeEx(
+ UINT wVirtKey,
+ UINT wScanCode,
+ PBYTE lpKeyState,
+ LPWSTR pwszBuff,
+ int cchBuff,
+ UINT wFlags,
+ HKL dwhkl );
+
+BOOL
+NTAPI
+NtUserTrackMouseEvent(
+ LPTRACKMOUSEEVENT lpEventTrack);
+
+int
+NTAPI
+NtUserTranslateAccelerator(
+ HWND Window,
+ HACCEL Table,
+ LPMSG Message);
+
+BOOL
+NTAPI
+NtUserTranslateMessage(
+ LPMSG lpMsg,
+ UINT flags );
+
+BOOL
+NTAPI
+NtUserUnhookWindowsHookEx(
+ HHOOK Hook);
+
+BOOL
+NTAPI
+NtUserUnhookWinEvent(
+ HWINEVENTHOOK hWinEventHook);
+
+BOOL
+NTAPI
+NtUserUnloadKeyboardLayout(
+ HKL hKl);
+
+BOOL
+NTAPI
+NtUserUnlockWindowStation(
+ HWINSTA hWindowStation);
+
+BOOL
+NTAPI
+NtUserUnregisterClass(
+ PUNICODE_STRING ClassNameOrAtom,
+ HINSTANCE hInstance,
+ PCLSMENUNAME pClassMenuName);
+
+BOOL
+NTAPI
+NtUserUnregisterHotKey(HWND hWnd,
+ int id);
+
+BOOL
+NTAPI
+NtUserUnregisterUserApiHook(VOID);
+
+DWORD
+NTAPI
+NtUserUpdateInputContext(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2);
+
+DWORD
+NTAPI
+NtUserUpdateInstance(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2);
+
+BOOL
+NTAPI
+NtUserUpdateLayeredWindow(
+ HWND hwnd,
+ HDC hdcDst,
+ POINT *pptDst,
+ SIZE *psize,
+ HDC hdcSrc,
+ POINT *pptSrc,
+ COLORREF crKey,
+ BLENDFUNCTION *pblend,
+ DWORD dwFlags,
+ RECT *prcDirty);
+
+BOOL
+NTAPI
+NtUserUpdatePerUserSystemParameters(
+ DWORD dwReserved,
+ BOOL bEnable);
+
+BOOL
+NTAPI
+NtUserUserHandleGrantAccess(
+ IN HANDLE hUserHandle,
+ IN HANDLE hJob,
+ IN BOOL bGrant);
+
+BOOL
+NTAPI
+NtUserValidateHandleSecure(
+ HANDLE hHdl,
+ BOOL Restricted);
+
+BOOL
+NTAPI
+NtUserValidateRect(
+ HWND hWnd,
+ CONST RECT *lpRect);
+
+BOOL
+APIENTRY
+NtUserValidateTimerCallback(
+ HWND hWnd,
+ WPARAM wParam,
+ LPARAM lParam);
+
+DWORD
+NTAPI
+NtUserVkKeyScanEx(
+ WCHAR wChar,
+ HKL KeyboardLayout,
+ BOOL bUsehHK);
+
+DWORD
+NTAPI
+NtUserWaitForInputIdle(
+ IN HANDLE hProcess,
+ IN DWORD dwMilliseconds,
+ IN BOOL Unknown2); // Always FALSE
+
+DWORD
+NTAPI
+NtUserWaitForMsgAndEvent(
+ DWORD Unknown0);
+
+BOOL
+NTAPI
+NtUserWaitMessage(VOID);
+
+DWORD
+NTAPI
+NtUserWin32PoolAllocationStats(
+ DWORD Unknown0,
+ DWORD Unknown1,
+ DWORD Unknown2,
+ DWORD Unknown3,
+ DWORD Unknown4,
+ DWORD Unknown5);
+
+HWND
+NTAPI
+NtUserWindowFromPhysicalPoint(
+ POINT Point);
+
+HWND
+NTAPI
+NtUserWindowFromPoint(
+ LONG X,
+ LONG Y);
+
+DWORD
+NTAPI
+NtUserYieldTask(VOID);
+
+/* lParam of DDE messages */
+typedef struct tagKMDDEEXECUTEDATA
+{
+ HWND Sender;
+ HGLOBAL ClientMem;
+ /* BYTE Data[DataSize] */
+} KMDDEEXECUTEDATA, *PKMDDEEXECUTEDATA;
+
+typedef struct tagKMDDELPARAM
+{
+ UINT_PTR uiLo;
+ UINT_PTR uiHi;
+} KMDDELPARAM, *PKMDDELPARAM;
+
+
+
+
+
+/* NtUserBad
+ * ReactOS-specific NtUser calls and their related structures, both which shouldn't exist.
+ */
+
+#define NOPARAM_ROUTINE_ISCONSOLEMODE 0xffff0001
+#define NOPARAM_ROUTINE_GETMESSAGEEXTRAINFO 0xffff0005
+#define ONEPARAM_ROUTINE_CSRSS_GUICHECK 0xffff0008
+#define ONEPARAM_ROUTINE_SWITCHCARETSHOWING 0xfffe0008
+#define ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING 0xfffe000d
+#define ONEPARAM_ROUTINE_GETDESKTOPMAPPING 0xfffe000e
+#define TWOPARAM_ROUTINE_SETMENUBARHEIGHT 0xfffd0050
+#define TWOPARAM_ROUTINE_EXITREACTOS 0xfffd0051
+#define TWOPARAM_ROUTINE_SETGUITHRDHANDLE 0xfffd0052
++#define HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE 0xfffd0053
+ #define MSQ_STATE_CAPTURE 0x1
+ #define MSQ_STATE_ACTIVE 0x2
+ #define MSQ_STATE_FOCUS 0x3
+ #define MSQ_STATE_MENUOWNER 0x4
+ #define MSQ_STATE_MOVESIZE 0x5
+ #define MSQ_STATE_CARET 0x6
+#define TWOPARAM_ROUTINE_SETCARETPOS 0xfffd0060
+#define TWOPARAM_ROUTINE_ROS_UPDATEUISTATE 0x1004
+#define HWNDPARAM_ROUTINE_ROS_NOTIFYWINEVENT 0x1005
+
+DWORD
+NTAPI
+NtUserBuildMenuItemList(
+ HMENU hMenu,
+ PVOID Buffer,
+ ULONG nBufSize,
+ DWORD Reserved);
+
+UINT
+NTAPI
+NtUserGetMenuDefaultItem(
+ HMENU hMenu,
+ UINT fByPos,
+ UINT gmdiFlags);
+
+BOOL
+NTAPI
+NtUserGetMonitorInfo(
+ IN HMONITOR hMonitor,
+ OUT LPMONITORINFO pMonitorInfo);
+
+/* Should be done in usermode */
+
+/* (other FocusedItem values give the position of the focused item) */
+#define NO_SELECTED_ITEM 0xffff
+
+typedef struct tagROSMENUINFO
+{
+ /* ----------- MENUINFO ----------- */
+ DWORD cbSize;
+ DWORD fMask;
+ DWORD dwStyle;
+ UINT cyMax;
+ HBRUSH hbrBack;
+ DWORD dwContextHelpID;
+ ULONG_PTR dwMenuData;
+ /* ----------- Extra ----------- */
+ HMENU Self; /* Handle of this menu */
+ WORD Flags; /* Menu flags (MF_POPUP, MF_SYSMENU) */
+ UINT FocusedItem; /* Currently focused item */
+ UINT MenuItemCount; /* Number of items in the menu */
+ HWND Wnd; /* Window containing the menu */
+ WORD Width; /* Width of the whole menu */
+ WORD Height; /* Height of the whole menu */
+ HWND WndOwner; /* window receiving the messages for ownerdraw */
+ BOOL TimeToHide; /* Request hiding when receiving a second click in the top-level menu item */
+ SIZE maxBmpSize; /* Maximum size of the bitmap items in MIIM_BITMAP state */
+} ROSMENUINFO, *PROSMENUINFO;
+
+BOOL
+NTAPI
+NtUserMenuInfo(
+ HMENU hmenu,
+ PROSMENUINFO lpmi,
+ BOOL fsog
+);
+
+typedef struct tagROSMENUITEMINFO
+{
+ /* ----------- MENUITEMINFOW ----------- */
+ UINT cbSize;
+ UINT fMask;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HMENU hSubMenu;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ LPWSTR dwTypeData;
+ UINT cch;
+ HBITMAP hbmpItem;
+ /* ----------- Extra ----------- */
+ RECT Rect; /* Item area (relative to menu window) */
+ UINT dxTab; /* X position of text after Tab */
+ LPWSTR lpstr; /* Copy of the text pointer in MenuItem->Text */
+} ROSMENUITEMINFO, *PROSMENUITEMINFO;
+
+BOOL
+NTAPI
+NtUserMenuItemInfo(
+ HMENU hMenu,
+ UINT uItem,
+ BOOL fByPosition,
+ PROSMENUITEMINFO lpmii,
+ BOOL fsog
+);
+
+HMONITOR
+NTAPI
+NtUserMonitorFromPoint(
+ IN POINT point,
+ IN DWORD dwFlags);
+
+HMONITOR
+NTAPI
+NtUserMonitorFromRect(
+ IN LPCRECT pRect,
+ IN DWORD dwFlags);
+
+HMONITOR
+NTAPI
+NtUserMonitorFromWindow(
+ IN HWND hWnd,
+ IN DWORD dwFlags);
+
+typedef struct _SETSCROLLBARINFO
+{
+ int nTrackPos;
+ int reserved;
+ DWORD rgstate[CCHILDREN_SCROLLBAR+1];
+} SETSCROLLBARINFO, *PSETSCROLLBARINFO;
+
+BOOL
+NTAPI
+NtUserSetScrollBarInfo(
+ HWND hwnd,
+ LONG idObject,
+ SETSCROLLBARINFO *info);
+
+
+
+#endif /* __WIN32K_NTUSER_H */
+
+/* EOF */
return co_IntSetForegroundAndFocusWindow(Window, FALSE);
}
+ /*
+ API Call
+ */
+ BOOL FASTCALL
+ co_IntSetForegroundWindowMouse(PWND Window)
+ {
+ if (Window) ASSERT_REFS_CO(Window);
+
+ return co_IntSetForegroundAndFocusWindow(Window, TRUE);
+ }
+
/*
API Call
*/
BOOL FASTCALL co_IntMouseActivateWindow(PWND Window);
BOOL FASTCALL co_IntSetForegroundWindow(PWND Window);
BOOL FASTCALL co_IntSetActiveWindow(PWND,HWND *,BOOL,BOOL,BOOL);
+ BOOL FASTCALL co_IntSetForegroundWindowMouse(PWND Window);
BOOL FASTCALL IntLockSetForegroundWindow(UINT uLockCode);
BOOL FASTCALL IntAllowSetForegroundWindow(DWORD dwProcessId);
{
if (Win32Thread->TIF_flags & TIF_INCLEANUP) RETURN( FALSE);
- ERR("SMWCB: Internal Message!\n");
+ TRACE("SMWCB: Internal Message!\n");
Result = (ULONG_PTR)handle_internal_message( Window, Msg, wParam, lParam );
if (uResult) *uResult = Result;
RETURN( TRUE);
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * PURPOSE: NtUserCallXxx call stubs
+ * FILE: subsystem/win32/win32k/ntuser/simplecall.c
+ * PROGRAMER: Ge van Geldorp (ge@gse.nl)
+ */
+
+#include <win32k.h>
+DBG_DEFAULT_CHANNEL(UserMisc);
+
+/* registered Logon process */
+PPROCESSINFO LogonProcess = NULL;
+
+BOOL FASTCALL
+co_IntRegisterLogonProcess(HANDLE ProcessId, BOOL Register)
+{
+ NTSTATUS Status;
+ PEPROCESS Process;
+
+ Status = PsLookupProcessByProcessId(ProcessId,
+ &Process);
+ if (!NT_SUCCESS(Status))
+ {
+ EngSetLastError(RtlNtStatusToDosError(Status));
+ return FALSE;
+ }
+
+ if (Register)
+ {
+ /* Register the logon process */
+ if (LogonProcess != NULL)
+ {
+ ObDereferenceObject(Process);
+ return FALSE;
+ }
+
+ LogonProcess = (PPROCESSINFO)Process->Win32Process;
+ }
+ else
+ {
+ /* Deregister the logon process */
+ if (LogonProcess != (PPROCESSINFO)Process->Win32Process)
+ {
+ ObDereferenceObject(Process);
+ return FALSE;
+ }
+
+ LogonProcess = NULL;
+ }
+
+ ObDereferenceObject(Process);
+
+ return TRUE;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD_PTR
+APIENTRY
+NtUserCallNoParam(DWORD Routine)
+{
+ DWORD_PTR Result = 0;
+ DECLARE_RETURN(DWORD_PTR);
+
+ TRACE("Enter NtUserCallNoParam\n");
+ UserEnterExclusive();
+
+ switch(Routine)
+ {
+ case NOPARAM_ROUTINE_CREATEMENU:
+ Result = (DWORD_PTR)UserCreateMenu(FALSE);
+ break;
+
+ case NOPARAM_ROUTINE_CREATEMENUPOPUP:
+ Result = (DWORD_PTR)UserCreateMenu(TRUE);
+ break;
+
+ case NOPARAM_ROUTINE_DESTROY_CARET:
+ Result = (DWORD_PTR)co_IntDestroyCaret(PsGetCurrentThread()->Tcb.Win32Thread);
+ break;
+
+ case NOPARAM_ROUTINE_INIT_MESSAGE_PUMP:
+ Result = (DWORD_PTR)IntInitMessagePumpHook();
+ break;
+
+ case NOPARAM_ROUTINE_UNINIT_MESSAGE_PUMP:
+ Result = (DWORD_PTR)IntUninitMessagePumpHook();
+ break;
+
+ case NOPARAM_ROUTINE_GETMESSAGEEXTRAINFO:
+ Result = (DWORD_PTR)MsqGetMessageExtraInfo();
+ break;
+
+ case NOPARAM_ROUTINE_MSQCLEARWAKEMASK:
+ RETURN( (DWORD_PTR)IntMsqClearWakeMask());
+
+ case NOPARAM_ROUTINE_GETMSESSAGEPOS:
+ {
+ PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
+ RETURN( (DWORD_PTR)MAKELONG(pti->ptLast.x, pti->ptLast.y));
+ }
+
+ case NOPARAM_ROUTINE_RELEASECAPTURE:
+ RETURN( (DWORD_PTR)IntReleaseCapture());
+
+ case NOPARAM_ROUTINE_LOADUSERAPIHOOK:
+ RETURN(UserLoadApiHook());
+
+ case NOPARAM_ROUTINE_ZAPACTIVEANDFOUS:
+ {
+ PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
+ TRACE("Zapping the Active and Focus window out of the Queue!\n");
+ pti->MessageQueue->spwndFocus = NULL;
+ pti->MessageQueue->spwndActive = NULL;
+ RETURN(0);
+ }
+
+ /* this is a Reactos only case and is needed for gui-on-demand */
+ case NOPARAM_ROUTINE_ISCONSOLEMODE:
+ RETURN( ScreenDeviceContext == NULL );
+
+ default:
+ ERR("Calling invalid routine number 0x%x in NtUserCallNoParam\n", Routine);
+ EngSetLastError(ERROR_INVALID_PARAMETER);
+ break;
+ }
+ RETURN(Result);
+
+CLEANUP:
+ TRACE("Leave NtUserCallNoParam, ret=%p\n",(PVOID)_ret_);
+ UserLeave();
+ END_CLEANUP;
+}
+
+
+/*
+ * @implemented
+ */
+DWORD_PTR
+APIENTRY
+NtUserCallOneParam(
+ DWORD_PTR Param,
+ DWORD Routine)
+{
+ DECLARE_RETURN(DWORD_PTR);
+
+ TRACE("Enter NtUserCallOneParam\n");
+
+ UserEnterExclusive();
+
+ switch(Routine)
+ {
+ case ONEPARAM_ROUTINE_POSTQUITMESSAGE:
+ {
+ PTHREADINFO pti;
+ pti = PsGetCurrentThreadWin32Thread();
+ MsqPostQuitMessage(pti->MessageQueue, Param);
+ RETURN(TRUE);
+ }
+
+ case ONEPARAM_ROUTINE_BEGINDEFERWNDPOS:
+ {
+ PSMWP psmwp;
+ HDWP hDwp = NULL;
+ INT count = (INT)Param;
+
+ if (count < 0)
+ {
+ EngSetLastError(ERROR_INVALID_PARAMETER);
+ RETURN(0);
+ }
+ /* Windows allows zero count, in which case it allocates context for 8 moves */
+ if (count == 0) count = 8;
+
+ psmwp = (PSMWP) UserCreateObject( gHandleTable,
+ NULL,
+ NULL,
+ (PHANDLE)&hDwp,
+ TYPE_SETWINDOWPOS,
+ sizeof(SMWP));
+ if (!psmwp) RETURN(0);
+ psmwp->acvr = ExAllocatePoolWithTag(PagedPool, count * sizeof(CVR), USERTAG_SWP);
+ if (!psmwp->acvr)
+ {
+ UserDeleteObject(hDwp, TYPE_SETWINDOWPOS);
+ RETURN(0);
+ }
+ RtlZeroMemory(psmwp->acvr, count * sizeof(CVR));
+ psmwp->bHandle = TRUE;
+ psmwp->ccvr = 0; // actualCount
+ psmwp->ccvrAlloc = count; // suggestedCount
+ RETURN((DWORD_PTR)hDwp);
+ }
+
+ case ONEPARAM_ROUTINE_SHOWCURSOR:
+ RETURN( (DWORD_PTR)UserShowCursor((BOOL)Param) );
+
+ case ONEPARAM_ROUTINE_GETDESKTOPMAPPING:
+ {
+ PTHREADINFO ti;
+ ti = GetW32ThreadInfo();
+ if (ti != NULL)
+ {
+ /* Try convert the pointer to a user mode pointer if the desktop is
+ mapped into the process */
+ RETURN((DWORD_PTR)DesktopHeapAddressToUser((PVOID)Param));
+ }
+ else
+ {
+ RETURN(0);
+ }
+ }
+
+ case ONEPARAM_ROUTINE_WINDOWFROMDC:
+ RETURN( (DWORD_PTR)IntWindowFromDC((HDC)Param));
+
+ case ONEPARAM_ROUTINE_SWAPMOUSEBUTTON:
+ {
+ DWORD_PTR Result;
+
+ Result = gspv.bMouseBtnSwap;
+ gspv.bMouseBtnSwap = Param ? TRUE : FALSE;
+ gpsi->aiSysMet[SM_SWAPBUTTON] = gspv.bMouseBtnSwap;
+ RETURN(Result);
+ }
+
+ case ONEPARAM_ROUTINE_SWITCHCARETSHOWING:
+ RETURN( (DWORD_PTR)IntSwitchCaretShowing((PVOID)Param));
+
+ case ONEPARAM_ROUTINE_SETCARETBLINKTIME:
+ RETURN( (DWORD_PTR)IntSetCaretBlinkTime((UINT)Param));
+
+ case ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO:
+ RETURN( (DWORD_PTR)MsqSetMessageExtraInfo((LPARAM)Param));
+
+ case ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT:
+ {
+ PCURICON_OBJECT CurIcon;
+ DWORD_PTR Result ;
+
+ if (!(CurIcon = IntCreateCurIconHandle((DWORD)Param)))
+ {
+ EngSetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ RETURN(0);
+ }
+
+ Result = (DWORD_PTR)CurIcon->Self;
+ UserDereferenceObject(CurIcon);
+ RETURN(Result);
+ }
+
+ case ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING:
+ {
+ BOOL Enable;
+ PPROCESSINFO Process = PsGetCurrentProcessWin32Process();
+
+ if(Process != NULL)
+ {
+ Enable = (BOOL)(Param != 0);
+
+ if(Enable)
+ {
+ Process->W32PF_flags &= ~W32PF_NOWINDOWGHOSTING;
+ }
+ else
+ {
+ Process->W32PF_flags |= W32PF_NOWINDOWGHOSTING;
+ }
+
+ RETURN( TRUE);
+ }
+
+ RETURN( FALSE);
+ }
+
+ case ONEPARAM_ROUTINE_GETINPUTEVENT:
+ RETURN( (DWORD_PTR)IntMsqSetWakeMask(Param));
+
+ case ONEPARAM_ROUTINE_GETKEYBOARDTYPE:
+ RETURN( UserGetKeyboardType(Param));
+
+ case ONEPARAM_ROUTINE_GETKEYBOARDLAYOUT:
+ RETURN( (DWORD_PTR)UserGetKeyboardLayout(Param));
+
+ case ONEPARAM_ROUTINE_RELEASEDC:
+ RETURN (UserReleaseDC(NULL, (HDC) Param, FALSE));
+
+ case ONEPARAM_ROUTINE_REALIZEPALETTE:
+ RETURN (UserRealizePalette((HDC) Param));
+
+ case ONEPARAM_ROUTINE_GETQUEUESTATUS:
+ {
+ RETURN (IntGetQueueStatus((DWORD)Param));
+ }
+ case ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS:
+ /* FIXME: Should use UserEnterShared */
+ RETURN(UserEnumClipboardFormats(Param));
+
+ case ONEPARAM_ROUTINE_CSRSS_GUICHECK:
+ IntUserManualGuiCheck(Param);
+ RETURN(TRUE);
+
+ case ONEPARAM_ROUTINE_GETCURSORPOS:
+ {
+ BOOL Ret = TRUE;
+ PPOINTL pptl;
+ PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
+ if (pti->rpdesk != IntGetActiveDesktop()) RETURN(FALSE);
+ _SEH2_TRY
+ {
+ ProbeForWrite((POINT*)Param,sizeof(POINT),1);
+ pptl = (PPOINTL)Param;
+ *pptl = gpsi->ptCursor;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Ret = FALSE;
+ }
+ _SEH2_END;
+ RETURN(Ret);
+ }
+ case ONEPARAM_ROUTINE_SETPROCDEFLAYOUT:
+ {
+ PPROCESSINFO ppi;
+ if (Param & LAYOUT_ORIENTATIONMASK)
+ {
+ ppi = PsGetCurrentProcessWin32Process();
+ ppi->dwLayout = Param;
+ RETURN(TRUE);
+ }
+ EngSetLastError(ERROR_INVALID_PARAMETER);
+ RETURN(FALSE);
+ }
+ case ONEPARAM_ROUTINE_GETPROCDEFLAYOUT:
+ {
+ BOOL Ret = TRUE;
+ PPROCESSINFO ppi;
+ PDWORD pdwLayout;
+ if ( PsGetCurrentProcess() == gpepCSRSS)
+ {
+ EngSetLastError(ERROR_INVALID_ACCESS);
+ RETURN(FALSE);
+ }
+ ppi = PsGetCurrentProcessWin32Process();
+ _SEH2_TRY
+ {
+ pdwLayout = (PDWORD)Param;
+ *pdwLayout = ppi->dwLayout;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ SetLastNtError(_SEH2_GetExceptionCode());
+ Ret = FALSE;
+ }
+ _SEH2_END;
+ RETURN(Ret);
+ }
+ case ONEPARAM_ROUTINE_REPLYMESSAGE:
+ RETURN (co_MsqReplyMessage((LRESULT) Param));
+ case ONEPARAM_ROUTINE_MESSAGEBEEP:
+ RETURN ( UserPostMessage(hwndSAS, WM_LOGONNOTIFY, LN_MESSAGE_BEEP, Param) );
+ /* TODO: Implement sound sentry */
+ case ONEPARAM_ROUTINE_CREATESYSTEMTHREADS:
+ RETURN(CreateSystemThreads(Param));
+ case ONEPARAM_ROUTINE_LOCKFOREGNDWINDOW:
+ RETURN( (DWORD_PTR)IntLockSetForegroundWindow(Param));
+ case ONEPARAM_ROUTINE_ALLOWSETFOREGND:
+ RETURN( (DWORD_PTR)IntAllowSetForegroundWindow(Param));
+ }
+ ERR("Calling invalid routine number 0x%x in NtUserCallOneParam(), Param=0x%x\n",
+ Routine, Param);
+ EngSetLastError(ERROR_INVALID_PARAMETER);
+ RETURN( 0);
+
+CLEANUP:
+ TRACE("Leave NtUserCallOneParam, ret=%p\n", (PVOID)_ret_);
+ UserLeave();
+ END_CLEANUP;
+}
+
+
+/*
+ * @implemented
+ */
+DWORD_PTR
+APIENTRY
+NtUserCallTwoParam(
+ DWORD_PTR Param1,
+ DWORD_PTR Param2,
+ DWORD Routine)
+{
+ PWND Window;
+ DECLARE_RETURN(DWORD_PTR);
+
+ TRACE("Enter NtUserCallTwoParam\n");
+ UserEnterExclusive();
+
+ switch(Routine)
+ {
+ case TWOPARAM_ROUTINE_SETMENUBARHEIGHT:
+ {
+ DWORD_PTR Ret;
+ PMENU_OBJECT MenuObject = IntGetMenuObject((HMENU)Param1);
+ if(!MenuObject)
+ RETURN( 0);
+
+ if(Param2 > 0)
+ {
+ Ret = (MenuObject->MenuInfo.Height == (int)Param2);
+ MenuObject->MenuInfo.Height = (int)Param2;
+ }
+ else
+ Ret = (DWORD_PTR)MenuObject->MenuInfo.Height;
+ IntReleaseMenuObject(MenuObject);
+ RETURN( Ret);
+ }
+
+ case TWOPARAM_ROUTINE_SETGUITHRDHANDLE:
+ {
+ PUSER_MESSAGE_QUEUE MsgQueue = ((PTHREADINFO)PsGetCurrentThread()->Tcb.Win32Thread)->MessageQueue;
+
+ ASSERT(MsgQueue);
+ RETURN( (DWORD_PTR)MsqSetStateWindow(MsgQueue, (ULONG)Param1, (HWND)Param2));
+ }
+
+ case TWOPARAM_ROUTINE_ENABLEWINDOW:
+ RETURN( IntEnableWindow((HWND)Param1, (BOOL)Param2));
+
+ case TWOPARAM_ROUTINE_SHOWOWNEDPOPUPS:
+ {
+ Window = UserGetWindowObject((HWND)Param1);
+ if (!Window) RETURN(0);
+
+ RETURN( (DWORD_PTR)IntShowOwnedPopups(Window, (BOOL) Param2));
+ }
+
+ case TWOPARAM_ROUTINE_ROS_UPDATEUISTATE:
+ {
+ WPARAM wParam;
+ Window = UserGetWindowObject((HWND)Param1);
+ if (!Window) RETURN(0);
+
+ /* Unpack wParam */
+ wParam = MAKEWPARAM((Param2 >> 3) & 0x3,
+ Param2 & (UISF_HIDEFOCUS | UISF_HIDEACCEL | UISF_ACTIVE));
+
+ RETURN( UserUpdateUiState(Window, wParam) );
+ }
+
+ case TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW:
+ STUB
+ RETURN( 0);
+
+
+ case TWOPARAM_ROUTINE_SETCARETPOS:
+ RETURN( (DWORD_PTR)co_IntSetCaretPos((int)Param1, (int)Param2));
+
+ case TWOPARAM_ROUTINE_REGISTERLOGONPROCESS:
+ RETURN( (DWORD_PTR)co_IntRegisterLogonProcess((HANDLE)Param1, (BOOL)Param2));
+
+ case TWOPARAM_ROUTINE_SETCURSORPOS:
+ RETURN( (DWORD_PTR)UserSetCursorPos((int)Param1, (int)Param2, 0, 0, FALSE));
+
+ case TWOPARAM_ROUTINE_UNHOOKWINDOWSHOOK:
+ RETURN( IntUnhookWindowsHook((int)Param1, (HOOKPROC)Param2));
+ case TWOPARAM_ROUTINE_EXITREACTOS:
+ if(hwndSAS == NULL)
+ {
+ ASSERT(hwndSAS);
+ RETURN(STATUS_NOT_FOUND);
+ }
+ RETURN( co_IntSendMessage (hwndSAS, PM_WINLOGON_EXITWINDOWS, (WPARAM) Param1, (LPARAM)Param2));
+ }
+ ERR("Calling invalid routine number 0x%x in NtUserCallTwoParam(), Param1=0x%x Parm2=0x%x\n",
+ Routine, Param1, Param2);
+ EngSetLastError(ERROR_INVALID_PARAMETER);
+ RETURN( 0);
+
+CLEANUP:
+ TRACE("Leave NtUserCallTwoParam, ret=%p\n", (PVOID)_ret_);
+ UserLeave();
+ END_CLEANUP;
+}
+
+
+/*
+ * @unimplemented
+ */
+BOOL
+APIENTRY
+NtUserCallHwndLock(
+ HWND hWnd,
+ DWORD Routine)
+{
+ BOOL Ret = 0;
+ PWND Window;
+ USER_REFERENCE_ENTRY Ref;
+ DECLARE_RETURN(BOOLEAN);
+
+ TRACE("Enter NtUserCallHwndLock\n");
+ UserEnterExclusive();
+
+ if (!(Window = UserGetWindowObject(hWnd)))
+ {
+ RETURN( FALSE);
+ }
+ UserRefObjectCo(Window, &Ref);
+
+ /* FIXME: Routine can be 0x53 - 0x5E */
+ switch (Routine)
+ {
+ case HWNDLOCK_ROUTINE_ARRANGEICONICWINDOWS:
+ co_WinPosArrangeIconicWindows(Window);
+ break;
+
+ case HWNDLOCK_ROUTINE_DRAWMENUBAR:
+ {
+ TRACE("HWNDLOCK_ROUTINE_DRAWMENUBAR\n");
+ Ret = TRUE;
+ if ((Window->style & (WS_CHILD | WS_POPUP)) != WS_CHILD)
+ co_WinPosSetWindowPos( Window,
+ HWND_DESKTOP,
+ 0,0,0,0,
+ SWP_NOSIZE|
+ SWP_NOMOVE|
+ SWP_NOZORDER|
+ SWP_NOACTIVATE|
+ SWP_FRAMECHANGED );
+ break;
+ }
+
+ case HWNDLOCK_ROUTINE_REDRAWFRAME:
+ co_WinPosSetWindowPos( Window,
+ HWND_DESKTOP,
+ 0,0,0,0,
+ SWP_NOSIZE|
+ SWP_NOMOVE|
+ SWP_NOZORDER|
+ SWP_NOACTIVATE|
+ SWP_FRAMECHANGED );
+ Ret = TRUE;
+ break;
+
+ case HWNDLOCK_ROUTINE_REDRAWFRAMEANDHOOK:
+ co_WinPosSetWindowPos( Window,
+ HWND_DESKTOP,
+ 0,0,0,0,
+ SWP_NOSIZE|
+ SWP_NOMOVE|
+ SWP_NOZORDER|
+ SWP_NOACTIVATE|
+ SWP_FRAMECHANGED );
+ if (!Window->spwndOwner && !IntGetParent(Window))
+ {
+ co_IntShellHookNotify(HSHELL_REDRAW, (WPARAM) hWnd, FALSE); // FIXME Flashing?
+ }
+ Ret = TRUE;
+ break;
+
+ case HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW:
+ TRACE("co_IntSetForegroundWindow 1 %p\n",hWnd);
+ Ret = co_IntSetForegroundWindow(Window);
+ TRACE("co_IntSetForegroundWindow 2 \n");
+ break;
+
++ case HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE:
++ TRACE("co_IntSetForegroundWindow 1 0x%p\n",hWnd);
++ Ret = co_IntSetForegroundWindowMouse(Window);
++ TRACE("co_IntSetForegroundWindow 2 0x%p\n",hWnd);
++ break;
++
+ case HWNDLOCK_ROUTINE_UPDATEWINDOW:
+ Ret = co_UserRedrawWindow( Window, NULL, 0, RDW_UPDATENOW | RDW_ALLCHILDREN);
+ break;
+ }
+
+ UserDerefObjectCo(Window);
+
+ RETURN( Ret);
+
+CLEANUP:
+ TRACE("Leave NtUserCallHwndLock, ret=%u\n",_ret_);
+ UserLeave();
+ END_CLEANUP;
+}
+
+/*
+ * @unimplemented
+ */
+HWND
+APIENTRY
+NtUserCallHwndOpt(
+ HWND hWnd,
+ DWORD Routine)
+{
+ switch (Routine)
+ {
+ case HWNDOPT_ROUTINE_SETPROGMANWINDOW:
+ GetW32ThreadInfo()->pDeskInfo->hProgmanWindow = hWnd;
+ break;
+
+ case HWNDOPT_ROUTINE_SETTASKMANWINDOW:
+ GetW32ThreadInfo()->pDeskInfo->hTaskManWindow = hWnd;
+ break;
+ }
+
+ return hWnd;
+}
+
+DWORD
+APIENTRY
+NtUserCallHwnd(
+ HWND hWnd,
+ DWORD Routine)
+{
+ switch (Routine)
+ {
+ case HWND_ROUTINE_GETWNDCONTEXTHLPID:
+ {
+ PWND Window;
+ PPROPERTY HelpId;
+ USER_REFERENCE_ENTRY Ref;
+
+ UserEnterExclusive();
+
+ if (!(Window = UserGetWindowObject(hWnd)))
+ {
+ UserLeave();
+ return 0;
+ }
+ UserRefObjectCo(Window, &Ref);
+
+ HelpId = IntGetProp(Window, gpsi->atomContextHelpIdProp);
+
+ UserDerefObjectCo(Window);
+ UserLeave();
+ return (DWORD)HelpId->Data;
+ }
+ case HWND_ROUTINE_REGISTERSHELLHOOKWINDOW:
+ if (IntIsWindow(hWnd))
+ return IntRegisterShellHookWindow(hWnd);
+ return FALSE;
+ break;
+ case HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW:
+ if (IntIsWindow(hWnd))
+ return IntDeRegisterShellHookWindow(hWnd);
+ return FALSE;
+ case HWND_ROUTINE_SETMSGBOX:
+ {
+ PWND Window;
+ UserEnterExclusive();
+ if ((Window = UserGetWindowObject(hWnd)))
+ {
+ Window->state |= WNDS_MSGBOX;
+ }
+ UserLeave();
+ return FALSE;
+ }
+ }
+ STUB;
+
+ return 0;
+}
+
+DWORD
+APIENTRY
+NtUserCallHwndParam(
+ HWND hWnd,
+ DWORD Param,
+ DWORD Routine)
+{
+
+ switch (Routine)
+ {
+ case HWNDPARAM_ROUTINE_KILLSYSTEMTIMER:
+ return IntKillTimer(UserGetWindowObject(hWnd), (UINT_PTR)Param, TRUE);
+
+ case HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID:
+ {
+ PWND Window;
+
+ UserEnterExclusive();
+ if(!(Window = UserGetWindowObject(hWnd)))
+ {
+ UserLeave();
+ return FALSE;
+ }
+
+ if ( Param )
+ IntSetProp(Window, gpsi->atomContextHelpIdProp, (HANDLE)Param);
+ else
+ IntRemoveProp(Window, gpsi->atomContextHelpIdProp);
+
+ UserLeave();
+ return TRUE;
+ }
+
+ case HWNDPARAM_ROUTINE_SETDIALOGPOINTER:
+ {
+ PWND pWnd;
+ USER_REFERENCE_ENTRY Ref;
+
+ UserEnterExclusive();
+
+ if (!(pWnd = UserGetWindowObject(hWnd)))
+ {
+ UserLeave();
+ return 0;
+ }
+ UserRefObjectCo(pWnd, &Ref);
+
+ if (pWnd->head.pti->ppi == PsGetCurrentProcessWin32Process() &&
+ pWnd->cbwndExtra == DLGWINDOWEXTRA &&
+ !(pWnd->state & WNDS_SERVERSIDEWINDOWPROC))
+ {
+ if (Param)
+ {
+ if (!pWnd->fnid) pWnd->fnid = FNID_DIALOG;
+ pWnd->state |= WNDS_DIALOGWINDOW;
+ }
+ else
+ {
+ pWnd->fnid |= FNID_DESTROY;
+ pWnd->state &= ~WNDS_DIALOGWINDOW;
+ }
+ }
+
+ UserDerefObjectCo(pWnd);
+ UserLeave();
+ return 0;
+ }
+
+ case HWNDPARAM_ROUTINE_ROS_NOTIFYWINEVENT:
+ {
+ PWND pWnd;
+ PNOTIFYEVENT pne;
+ UserEnterExclusive();
+ pne = (PNOTIFYEVENT)Param;
+ if (hWnd)
+ pWnd = UserGetWindowObject(hWnd);
+ else
+ pWnd = NULL;
+ IntNotifyWinEvent(pne->event, pWnd, pne->idObject, pne->idChild, pne->flags);
+ UserLeave();
+ return 0;
+ }
+ case HWNDPARAM_ROUTINE_CLEARWINDOWSTATE:
+ {
+ PWND pWnd;
+ UserEnterExclusive();
+ pWnd = UserGetWindowObject(hWnd);
+ if (pWnd) IntClearWindowState(pWnd, (UINT)Param);
+ UserLeave();
+ return 0;
+ }
+ case HWNDPARAM_ROUTINE_SETWINDOWSTATE:
+ {
+ PWND pWnd;
+ UserEnterExclusive();
+ pWnd = UserGetWindowObject(hWnd);
+ if (pWnd) IntSetWindowState(pWnd, (UINT)Param);
+ UserLeave();
+ return 0;
+ }
+ }
+
+ STUB;
+
+ return 0;
+}
+
+DWORD
+APIENTRY
+NtUserCallHwndParamLock(
+ HWND hWnd,
+ DWORD Param,
+ DWORD Routine)
+{
+ DWORD Ret = 0;
+ PWND Window;
+ USER_REFERENCE_ENTRY Ref;
+ DECLARE_RETURN(DWORD);
+
+ TRACE("Enter NtUserCallHwndParamLock\n");
+ UserEnterExclusive();
+
+ if (!(Window = UserGetWindowObject(hWnd)))
+ {
+ RETURN( FALSE);
+ }
+ UserRefObjectCo(Window, &Ref);
+
+ switch (Routine)
+ {
+ case TWOPARAM_ROUTINE_VALIDATERGN:
+ Ret = (DWORD)co_UserRedrawWindow( Window, NULL, (HRGN)Param, RDW_VALIDATE);
+ break;
+ }
+
+ UserDerefObjectCo(Window);
+
+ RETURN( Ret);
+
+CLEANUP:
+ TRACE("Leave NtUserCallHwndParamLock, ret=%lu\n",_ret_);
+ UserLeave();
+ END_CLEANUP;
+
+}
+
+/* EOF */
MENUITEM "Mi&nimize", SC_MINIMIZE
MENUITEM "Ma&ximize", SC_MAXIMIZE
MENUITEM SEPARATOR
- MENUITEM "&Close\tAlt-F4", SC_CLOSE
+ MENUITEM "&Close\tAlt+F4", SC_CLOSE
END
/////////////////////////////////////////////////////////////////////////////
--- /dev/null
+ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+
+ /////////////////////////////////////////////////////////////////////////////
+ //
+ // Dialogs
+ //
+
+ SELWINDOW DIALOGEX DISCARDABLE 20, 20, 220, 140
+ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION |
+ WS_SYSMENU
+ FONT 8, "MS Shell Dlg"
+ CAPTION "选择窗口"
+ BEGIN
+ LISTBOX 100, 5, 5, 210, 110, LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL
+ PUSHBUTTON "确定(&O)", 1, 60, 120, 40, 15, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP
+ PUSHBUTTON "取消(&C)", 2, 120, 120, 40, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP
+ END
+
+ /////////////////////////////////////////////////////////////////////////////
+ //
+ // Menus
+ //
+
+ EDITMENU MENU LOADONCALL MOVEABLE DISCARDABLE
+ BEGIN
+ POPUP "DUMMY"
+ BEGIN
+ MENUITEM "撤销(&U)", EM_UNDO
+ MENUITEM SEPARATOR
+ MENUITEM "剪切(&t)", WM_CUT
+ MENUITEM "复制(&C)", WM_COPY
+ MENUITEM "粘贴(&P)", WM_PASTE
+ MENUITEM "删除(&D)", WM_CLEAR
+ MENUITEM SEPARATOR
+ MENUITEM "全选(&A)", EM_SETSEL
+ END
+ END
+
+
+ SYSMENU MENU LOADONCALL MOVEABLE DISCARDABLE
+ BEGIN
+ MENUITEM "还原(&R)", SC_RESTORE
+ MENUITEM "移动(&M)", SC_MOVE
+ MENUITEM "大小(&S)", SC_SIZE
+ MENUITEM "最小化(&n)", SC_MINIMIZE
+ MENUITEM "最大化(&x)", SC_MAXIMIZE
+ MENUITEM SEPARATOR
+ MENUITEM "关闭(&C)\tAlt+F4", SC_CLOSE
+ END
+
+ /////////////////////////////////////////////////////////////////////////////
+ //
+ // Strings
+ //
+
+ STRINGTABLE
+ BEGIN
+ IDS_ERROR, "错误"
+ IDS_OK, "确定"
+ IDS_CANCEL, "取消"
+ IDS_ABORT, "中止(&A)"
+ IDS_RETRY, "重试(&R)"
+ IDS_IGNORE, "忽略(&I)"
+ IDS_YES, "是(&Y)"
+ IDS_NO, "否(&N)"
+ IDS_HELP, "帮助"
+ IDS_TRYAGAIN, "重试(&T)"
+ IDS_CONTINUE, "继续(&C)"
+ END
+
+ STRINGTABLE
+ BEGIN
+ IDS_MDI_MOREWINDOWS, "更多窗口(&M)..."
+ END
+
#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
- #ifdef LANGUAGE_TR_TR
- #include "lang/tr-TR.rc"
+ #ifdef LANGUAGE_ZH_CN
+ #include "lang/zh-CN.rc"
#endif
case HTCAPTION:
{
HWND hTopWnd = GetAncestor(hWnd, GA_ROOT);
- if (SetActiveWindow(hTopWnd) || GetActiveWindow() == hTopWnd)
+ if ( NtUserCallHwndLock(hTopWnd, HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE) ||
+ GetActiveWindow() == hTopWnd)
{
SendMessageW(hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, lParam);
}