32位程序在64位系統中的檔案重定向

2021-08-09 07:17:34 字數 1634 閱讀 8705

最近遇見了乙個問題,如下:

乙個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資料夾和...