[英]How does Windows pass the ANSI command line when creating a process?
在進程初始化期間,Windows設置PEB結構 ,該結構除其他外包括結構RTL_USER_PROCESS_PARAMETERS
,該結構又指向命令行的UNICODE版本。
您也可以使用GetCommandLineW
訪問它。
GetCommandLineA
返回ANSI版本,並且(顯然)指向其他地址。
我的問題是,Windows是否在進程創建過程中初始化兩個版本,並且哪個數據結構(如果有的話)指向命令行的ANSI版本? 另外,除了調用GetCommandLineA之外,還有其他方法嗎?
謝謝
我在Windows 7上反匯編了Kernel32,發現在進程啟動期間,它訪問進程的PEB
的Unicode命令行,並將指向該字符數據的指針存儲在GetCommandLineW()
返回的變量中。 還將Unicode數據轉換為單獨的Ansi緩沖區, GetCommandLineA()
返回該緩沖區到該Ansi緩沖區的指針。 據我所知,Ansi緩沖區是內核模塊專用的,它不存儲在PEB
,因此您不太可能像使用Unicode緩沖區那樣跨進程邊界訪問Ansi緩沖區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.