最近遇見了乙個問題,如下:
乙個32位程序a,通過呼叫如下**瀏覽檔案,
openfilename ofn; // common dialog box structure
tchar szfile[max_path * 100] = ; // buffer for file name
// initialize openfilename
zeromemory(&ofn, sizeof(ofn));
ofn.lstructsize = sizeof(ofn);
ofn.hwndowner = null;
ofn.lpstrfile = szfile;
// set lpstrfile[0] to '\0' so that getopenfilename does not
// use the contents of szfile to initialize itself.
ofn.lpstrfile[0] = l'\0';
ofn.nmaxfile = sizeof(szfile);
cstring sfilter;
ofn.lpstrfilter = sfilter.getbuffer(0);
ofn.nfilterindex = 1;
ofn.lpstrfiletitle = null;
ofn.nmaxfiletitle = 0;
ofn.lpstrinitialdir = null;
ofn.flags = ofn_pathmustexist | ofn_filemustexist | ofn_allowmultiselect | ofn_explorer;
// display the open dialog box.
int index = 0;
auto_restore_curworkdir;
if (getopenfilename(&ofn) == true)
在選擇框中,選擇我的電腦,然後右鍵--「管理」,提示找不到檔案。
做如下實驗,啟動64位notepad.exe。執行同樣的操作就可以開啟,32為notepad.exe卻不行,看來與wow有關係。
用procmon過濾64位的notepad.exe發現他是啟動了c:\windows\system32\compmgmtlauncher.exe 程序,然而syswow64下卻沒有這個檔案,原因很明顯了。
然後用promon過濾32位的notepad.exe發現 ,他在尋找c:\windows\syswow64\compmgmtlauncher.exe時候失敗,syswow64下沒有這個檔案。
我們的32位程序也是這樣,所以使用下面**關閉重定向
pvoid oldvalue = 0;
bool disablewow64 = false;
disablewow64 = disablewowfsredirection(&oldvalue);
//file operation
if (disablewow64)
revertwow64fsredirection(oldvalue);
再次嘗試,發現可以工作了。
32位程序注入64位程序
include include define makerex w,r,x,b asm emit 0100 w r x b b define rep asm emit 0xf3 pragma pack 1 typedef struct stubargs stubargs,pstubargs pragm...
32位系統和64位系統
前言 眾所周知,我們通常說作業系統是32位還是64位說的其實是32位處理器 cpu 還是64位處理器 cpu windows系統有32位和64位之分,下面我們來總結一下32位系統和64位系統的原理 區別以及如何判斷。我們現在所稱的計算機系統是32位或64位主要依據的是cpu解析的字組大小 字組大小 ...
在32位系統下,安裝64位系統(詳細)
7068x64一出來,我就下上了,可是一直不會裝,找了好多例子,總成功不了,現在總算裝好了。拿出來和大家分享一下,首先,要講幾個小知識點,用業餘的水準來講,請高手不要拍磚,只是為了讓大家更容易明白。好了,開始 1.32位系統和64位系統中有幾個檔案專門來驗證這個版本,那就是系統盤下的boot資料夾和...