锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
openssl婧愪唬鐮侊紝涓嬭澆鍦板潃http://www.openssl.org/source/openssl-1.0.0.tar.gz
浠嶸C2008鍛戒護琛岃繘鍏penssl婧愪唬鐮佺洰褰曪細
寮濮嬭彍鍗?>鎵鏈夌▼搴?>Microsoft Visual Studio 2008->Visual Studio Tools->Visual Studio 2008 Command Prompt
cd /d c:\openssl-1.0.0
榪愯Configure錛?br>perl Configure VC-WIN32 no-asm --prefix=c:/openssl
鍒涘緩Makefile鏂囦歡:
ms\do_ms
緙栬瘧鍔ㄦ佸簱錛?br>nmake -f ms\ntdll.mak
緙栬瘧闈欐佸簱錛?br>nmake -f ms\nt.mak
嫻嬭瘯鍔ㄦ佸簱錛?br>nmake -f ms\ntdll.mak test
嫻嬭瘯闈欐佸簱錛?br>nmake -f ms\nt.mak test
瀹夎鍔ㄦ佸簱錛?br>nmake -f ms\ntdll.mak install
瀹夎闈欐佸簱錛?br>nmake -f ms\nt.mak install
娓呴櫎涓婃鍔ㄦ佸簱鐨勭紪璇戯紝浠ヤ究閲嶆柊緙栬瘧錛?br>nmake -f ms\ntdll.mak clean
娓呴櫎涓婃闈欐佸簱鐨勭紪璇戯紝浠ヤ究閲嶆柊緙栬瘧錛?br>nmake -f ms\nt.mak clean
錛?/span>1錛夊湪Win32緋葷粺涓瘡涓涓繘紼嬮兘鎷ユ湁4GB鐨勫湴鍧絀洪棿銆?/span>Win32榪涚▼浠涔堜篃涓嶆墽琛岋紝瀹冨彧鏄嫢鏈?/span>4GB鐨勫湴鍧絀洪棿鏉ュ瓨鏀懼簲鐢ㄧ▼搴?/span>EXE鏂囦歡鎵闇瑕佺殑浠g爜鍜屾暟鎹傞櫎鍦板潃絀洪棿澶栵紝榪涚▼榪樻嫢鏈夋枃浠躲佸姩鎬佸唴瀛樸佺嚎紼嬬瓑璧勬簮銆傜敱綰跨▼璐熻矗鎵ц鍖呭惈鍦ㄨ繘紼嬪湴鍧絀洪棿閲岀殑浠g爜銆傛瘡涓涓嚎紼嬫湁瀹冭嚜宸辯殑CPU瀵勫瓨鍣ㄧ粍鍜岃嚜宸辯殑鏍堛傛瘡涓涓繘紼嬭嚦灝戞湁涓涓嚎紼嬫潵鎵ц鍖呭惈鍦ㄥ湴鍧絀洪棿涓殑浠g爜銆傚鏋滃湴鍧絀洪棿涓病鏈夌嚎紼嬪湪鎵ц浠g爜錛岄偅涔堢郴緇熷氨浼氶噴鏀捐繘紼嬪拰瀹冪殑鍦板潃絀洪棿銆?/span>
(2)鍔犺澆鍣細Win32鏀寔涓ょ被搴旂敤紼嬪簭錛屾帶鍒跺彴搴旂敤紼嬪簭CUI鍜屽浘褰㈢敤鎴風晫闈㈠簲鐢ㄧ▼搴?/span>GUI銆?/span>Exe鏂囦歡涓殑涓涓瓙緋葷粺鍊兼寚鍑鴻繖涓簲鐢ㄧ▼搴忔槸鎺у埗鍙板簲鐢ㄧ▼搴忚繕鏄浘褰㈢敤鎴風晫闈㈠簲鐢ㄧ▼搴忋?/span>
(3)VC緙栧啓鐨?/span>Win32鎺у埗鍙板簲鐢ㄧ▼搴忛兘鏈変竴涓?/span>main鍑芥暟錛岃屽浘褰㈢晫闈㈠簲鐢ㄧ▼搴忛兘鏈変竴涓?/span>WinMain鍑芥暟銆?/span>
(4)C/C++鐨勫惎鍔ㄥ嚱鏁幫細_WinMainCRTStartup鍑芥暟銆傚畠璐熻矗鎵ц錛?/span>
1.寰楀埌涓涓柊榪涚▼鐨勫叏閮ㄥ懡浠よ鎸囬拡銆?/span>
2.寰楀埌涓涓柊榪涚▼鐨勭幆澧冨彉閲忔寚閽堛?/span>
3.閫氳繃鍖呭惈Stdlib.h鏉ュ垵濮嬪寲鑳借搴旂敤紼嬪簭璁塊棶鐨?/span>C榪愯鏃跺叏灞鍙橀噺銆?/span>
4.鍒濆鍖栫敱C榪愯鏃跺唴瀛樺垎閰嶅嚱鏁頒嬌鐢ㄧ殑鍫嗗拰鍏跺畠鐨勪綆綰ц緭鍏ヨ緭鍑轟緥紼嬨?/span>
5璋冪敤WinMain鍑芥暟銆?/span>
6.褰?/span>WinMain榪斿洖鍚庯紝鍚姩浠g爜璋冪敤C榪愯鏃剁殑exit鍑芥暟錛屼紶緇欏畠WinMain鐨勮繑鍥炲箋?/span>Exit鍑芥暟鎵ц涓浜涙竻鐞嗗伐浣滐紝鐒跺悗璋冪敤Win32鐨?/span>ExitProcess鍑芥暟錛屼紶緇欏畠WinMain鍑芥暟鐨勮繑鍥炲箋?/span>
(5)瀹炰緥鍙ユ焺錛氭瘡涓涓姞杞藉埌榪涚▼鍦板潃絀洪棿鐨?/span>Exe鎴?/span>DLL鏂囦歡閮芥湁涓涓敮涓鐨勫疄渚嬪彞鏌勩?/span>WinMain鐨勭涓涓弬鏁?/span>hinstExe鏄?/span>Exe鏂囦歡鐨勫疄渚嬨傚湪鍔犺澆璧勬簮鏃舵墍浣跨敤鐨勫嚱鏁拌浣跨敤榪欎釜瀹炰緥鍙ユ焺銆?/span>
(6)鍩烘湰鍐呭瓨鍦板潃錛?/span>WinMain鐨勫弬鏁?/span>hinstExe鐨勫疄闄呭煎氨鏄竴涓熀鏈唴瀛樺湴鍧銆傚畠鎸囧嚭緋葷粺鏄湪浠涔堝湴鏂規妸EXE鏂囦歡鐨勬槧璞¤鍏ヨ繘紼嬬殑鍦板潃絀洪棿鐨勩傚熀鏈唴瀛樺湴鍧鐢遍摼鎺ュ櫒鍐沖畾銆?/span>
(7)HANDLE GetModuleHandle(LPCTSTR lpszModule)鍑芥暟錛氳繑鍥炵殑鍙ユ焺鏄?/span>EXE鎴?/span>DLL鏂囦歡鍦ㄥ湴鍧絀洪棿閲岀殑鍩烘湰鍦板潃銆傚弬鏁版槸Exe鎴?/span>DLL鏂囦歡鐨勫悕瀛椼傝鍑芥暟鐨勪袱涓渶瑕佹敞鎰忕殑鍦版柟錛氫竴銆佽鍑芥暟鍙煡鐪嬭皟鐢ㄨ繘紼嬬殑鍦板潃絀洪棿銆備簩銆佸弬鏁頒負NULL鏃惰繑鍥炵殑鏄?/span>EXE鏂囦歡鐨勫熀鏈唴瀛樺湴鍧銆?/span>
(8)鍦?/span>Win32涓?/span>hinstExe鍜?/span>hmodExe鏄竴涓箋?/span>WinMain鐨勫弬鏁?/span>hinstExePrev瀵逛簬Win32鏃犳剰涔夛紝瀹冪殑鍊兼諱負NULL銆傚湪Win32涓嬶紝搴旂敤紼嬪簭鐨勬瘡涓涓疄渚嬮兘蹇呴』娉ㄥ唽瀹冭嚜宸辯獥鍙g被錛岃繖鏄洜涓虹獥鍙g被涓嶈兘琚悓涓搴旂敤紼嬪簭涓殑鎵鏈夊疄渚嬪叡浜傚彧鏈?/span>hinstExePrev鍊間負NULL鏃訛紝鍦?/span>Win32涓嬪簲鐢ㄧ▼搴忕殑姣忎竴涓疄渚嬫墠浼氭敞鍐屽畠鑷繁鐨勭獥鍙g被銆?/span>
(9)榪涚▼鐨勭幆澧冨彉閲忓嚱鏁幫細BOOL SetEnviromentVariable(LPCTSTR lpszName,LPCTSTR lpszValue);璇ュ嚱鏁版妸鐢?/span>lpszName鏍囪瘑鐨勫艱緗負鐢?/span>lpszValue鏍囪瘑鐨勫箋傚鏋滄寚瀹氱殑鍙橀噺鍚嶅凡緇忓瓨鍦紝灝變慨鏀瑰畠鐨勫箋傚鏋滀笉瀛樺湪錛屽氨澧炲姞璇ュ彉閲忋傚鏋?/span>lpszValue鐨勫間負NULL錛屽彉閲忓氨琚粠鐜鍙橀噺涓垹闄ゃ?/span>
(10)榪涚▼鐨勫懡浠よ
(11)榪涚▼鐨勯敊璇ā寮忥細褰撹繘紼嬪嚭鐜伴敊璇椂, 瀹冪敤鏉ュ憡璇夌郴緇熷簲褰撲互浣曠妯″紡鍘誨鐞嗚閿欒銆備嬌鐢ㄧ殑鍑芥暟鏄細UINT SetErrorMode(UINT fuErrorMode);鍏朵腑鍙傛暟fuErrorMode鏄互涓嬪洓涓肩殑浠繪剰緇勫悎錛屽畠浠槸錛?/span>SEM_FAILCRITICALERRORS(緋葷粺涓嶆樉紺轟弗閲嶉敊璇鐞嗘秷鎭錛屾妸閿欒榪斿洖璋冪敤鐨勮繘紼?/span>)銆?/span>SEM_NOGPFAULTERRORBOX(緋葷粺涓嶆樉紺烘櫘閫氫繚鎶ら敊璇秷鎭銆傝鏍囪瘑鍙兘琚皟璇曞簲鐢ㄧ▼搴忚緗潵鐢ㄥ紓甯稿彞鏌勮嚜宸卞鐞嗘櫘閫氫繚鎶ら敊璇?/span>GP)銆?/span>SEM_NOOPENFILEERRORBOX(緋葷粺鍦ㄦ壘涓嶅埌鏂囦歡鏃朵笉鏄劇ず娑堟伅妗?/span>)銆?/span>SEM_NOALIGNMENTFAULTEXCEPT(緋葷粺鑷姩淇鍐呭湪鎺掑垪閿欒錛屼嬌瀹冧滑瀵瑰簲鐢ㄤ笉鍙銆傝鏍囪瘑瀵?/span>x86鎴?/span>Alpha澶勭悊鍣ㄦ棤鐢?/span>)銆?/span>
娉細緙虹渷鎯呭喌涓嬪瓙榪涚▼浼氱戶鎵跨埗榪涚▼鐨勯敊璇ā寮忋備絾鏄埗榪涚▼鍙互閫氳繃鍦ㄨ皟鐢?/span>CreateProcess鏃惰緗?/span>CREATE_DEFAULT_ERROR_MODE鏍囪瘑鏉ラ槻姝㈠瓙榪涚▼緇ф壙銆?/span>
(12)榪涚▼鐨勫綋鍓嶉┍鍔ㄥ櫒鍜岀洰褰曪細鍙互浣跨敤涓嬪垪鍑芥暟鏉ュ緱鍒板拰璁劇疆榪涚▼鐨勫綋鍓嶉┍鍔ㄥ櫒鍜岀洰褰曪細DWORD GetCurrentDirectory(DWORD cchCurDir,LPCTSTR lpszCurDir);
BOOL SetCurrentDirectory(LPCTSTR lpszCurDir);
(13)緋葷粺鐗堟湰鍙鳳細涓鑸嬌鐢?/span> BOOL GetVersionEx(LPOSVERSIONINFO lpVersionInformation);鏉ュ緱鍒扮郴緇熺増鏈彿錛屽叾涓弬鏁?/span>lpVersionInformation鏄竴涓?/span>LPOSVERSIONINFO緇撴瀯錛岃緇撴瀯鐨勫畾涔夊涓嬶細
typedef struct{
DWORD dwOSVersionInfoSize;//鍦ㄨ皟鐢?/span>GetVersionEx鍑芥暟鍓嶅繀欏昏璁劇疆涓猴細SizeOf(OSVERSIONINFO);
DWORD dwMajorVersion;//緋葷粺涓葷増鏈彿
DWORD dwMinorVersion;//緋葷粺嬈$増鏈彿
DWORD dwBuildNumber;
DWORD dwPlatformID;//鏍囪瘑褰撳墠緋葷粺鏀寔鐨勫鉤鍙?/span>
TCHAR szCSDVersion[128];
}OSVERSIONINFO,*LPOSVERSIONINFO;
(14)CreateProcess鍑芥暟錛氬簲鐢ㄧ▼搴忚皟鐢?/span>CreateProcess鍑芥暟鏉ュ垱寤轟竴涓繘紼嬨?/span>
BOOL CreateProcess(
LPCTSTR lpszApplicationName,
LPCTSTR lpszCommandLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION lppiProcInfo
);
褰撳簲鐢ㄧ▼搴忎腑鏌愪釜綰跨▼璋冪敤榪欎釜鍑芥暟鏃訛紝緋葷粺鍒涘緩浜嗕竴涓紩鐢ㄨ鏁頒負1鐨勮繘紼嬪唴鏍稿璞°傝鍐呮牳瀵硅薄涓嶆槸榪涚▼錛岃屾槸鎿嶄綔緋葷粺鐢ㄦ潵綆$悊榪涚▼鐨勪竴灝忓潡鏁版嵁緇撴瀯銆傜郴緇熺劧鍚庝負鏂拌繘紼嬪垱寤轟竴涓?/span>4GB鐨勮櫄鎷熷湴鍧絀洪棿錛屾妸鍙墽琛屾枃浠跺拰DLL鍙婃暟鎹兘瑁呭叆璇ュ湴鍧絀洪棿銆傜郴緇熶箣鍚庝負鏂拌繘紼嬬殑涓葷嚎紼嬪垱寤轟竴涓嬌鐢ㄨ鏁頒負1鐨勭嚎紼嬪唴鏍稿璞★紝涔嬪悗涓葷嚎紼嬪紑濮嬫墽琛?/span>C榪愯鏃剁殑鍚姩浠g爜錛屾渶緇堜細璋冪敤WinMain鍑芥暟銆傚鏋滅郴緇熸垚鍔熷湴鍒涘緩浜嗘柊榪涚▼鍜屼富綰跨▼錛?/span>CreateProcess鍑芥暟榪斿洖True銆?/span>
鍚勪釜鍙傛暟璇存槑錛?/span>
lpszCommandLine錛氳鍙傛暟鍙互鐢ㄦ潵鎸囧畾CreateProcess鐢ㄦ潵鍒涘緩鏂拌繘紼嬬殑瀹屾暣鍛戒護琛岋紝榪欎釜鍛戒護琛岄噷鍙互鍖呭惈“鍙墽琛屾枃浠跺悕”錛堝鏋滆繖涓彲鎵ц鏂囦歡娌℃湁鎸囧畾鎵╁睍鍚嶇殑璇濓紝緋葷粺浼氳涓哄叾鎵╁睍鍚嶄負exe錛夋敞錛氬彲浠ュ寘鍚彲鎵ц鏂囦歡鍚?/span>+榪欎釜鍙墽琛屾枃浠剁殑瀹屾暣璺緞錛屽鏋滄湭鎸囧畾瀹屾暣璺緞錛岄偅涔?/span>CreateProcess浼氫互涓嬮潰鐨勯『搴忔煡鎵懼彲鎵ц鏂囦歡錛?/span>1.鍚湁璋冪敤榪涚▼鐨?/span>Exe鏂囦歡鐩綍2璋冪敤榪涚▼鐨勫綋鍓嶇洰褰?/span>3 Windows緋葷粺鐩綍4Windows鐩綍5鍒楀湪PATH鐜鍙橀噺涓殑鐩綍銆傚鏋滅郴緇熸壘鍒頒簡鍙墽琛屾枃浠訛紝灝卞垱寤轟竴涓繘紼嬶紝鎶婂彲鎵ц鏂囦歡鐨勪唬鐮佸拰DLL鍙婃暟鎹鍏ユ柊榪涚▼鐨勫湴鍧絀洪棿銆傜郴緇熺劧鍚庤皟鐢?/span>C榪愯鏃剁殑鍚姩渚嬬▼銆備箣鍚?/span>C榪愯鏃剁殑鍚姩渚嬬▼浼氭煡鐪嬭繘紼嬬殑鍛戒護琛岋紝鎶婂彲鎵ц鏂囦歡鍚嶅悗鐨勭涓涓弬鏁板湴鍧浼犻掍負WinMain鐨?/span>lpszCmdLine鍙傛暟銆備笂闈㈣榪扮殑鎯呭喌鏄湪鍙傛暟lpszApplicationName涓?/span>NULL鏃躲?/span>
lpszApplicationName錛氬彲鎵ц鏂囦歡鐨勫悕縐板強鍏舵墿灞曞悕銆傚鏋滀笉鎸囧畾鎵╁睍鍚嶉偅涔堢郴緇熷皢涓嶄細璁や負鍏舵墿灞曞悕涓?/span>exe銆傚鏋滀笉鎸囧畾鍙墽琛屾枃浠剁殑璺緞錛岄偅涔?/span>CreateProcess鍙湪褰撳墠鐩綍涓嬫煡鎵懼彲鎵ц鏂囦歡錛屽鏋滄壘涓嶅埌瀹冨皢榪斿洖澶辮觸銆?/span>
涓嬮潰鍒椾婦涓渚嬭鏄庝笂闈㈣鐨勪袱涓弬鏁幫紝CreateProcess(“C:WINNTSYSTEM32NOTEPAD.EXE”,”WORDPAD README.TXT”…..);
緋葷粺灝嗗惎鍔?/span>NotePad錛屼絾鏄?/span>NotePad鐨勫懡浠よ鏄?/span>WORDPAD README.TXT榪欐牱鍐欎富瑕佹槸涓轟簡鏀寔Windows NT鐨?/span>POSIX瀛愮郴緇熴?/span>
1.windows95涓婇儴鍒哤in32瀹為檯涓婁笉鍙敤錛屽:CreateRemoteThread鍑芥暟錛屽湪Windows95涓婅皟鐢ㄨ鍑芥暟鏃惰繑鍥炵粨鏋滄槸NULL銆?涓轟粈涔堜細鏈夐儴鍒嗗嚱鏁頒笉鍙敤鍛紵絳旀錛?/font>涓轟簡浣縒indows95閫傚悎4MB鐨勫唴瀛樼殑璁$畻鏈恒俉indows95鍏蜂綋涓嶆敮鎸佺殑Win32鏈夛細Win32鐨勪竴浜涘紓姝ユ枃浠禝/O鍑芥暟銆侀珮搴﹀嚱鏁般佹敞鍐屽嚱鏁般佸畨鍏ㄥ嚱鏁板拰浜嬩歡璁板綍鍑芥暟錛?/font>榪欎簺鍑芥暟铏界劧鍦╓indows95涓婃湁錛屼絾鏄畠浠槸鏈夐檺鍒跺湴瀹炵幇鐨?
2.鍐呮牳瀵硅薄錛氬唴鏍稿璞$殑鏁版嵁緇撴瀯鍙兘鐢卞唴鏍歌闂紝搴旂敤紼嬪簭涓嶈兘鍦ㄥ唴瀛樹腑瀹氫綅榪欎簺鏁版嵁緇撴瀯鍜岀洿鎺ユ敼鍙樺畠浠殑鍐呭銆?/span>(鍐呮牳瀵硅薄閫氳繃璋冪敤鐩稿簲鐨?/span>Win32鍑芥暟浜х敓,騫惰繑鍥炰竴涓爣璇嗚瀵硅薄鐨勫彞鏌勶紝娉細璇ュ彞鏌勮繘紼嬬浉鍏熾傛瘡涓涓唴鏍稿璞″疄闄呬笂鏄敱鍐呮牳鍒嗛厤鐨勪竴鍧楀唴瀛橈紝鑰屽彧鑳界敱鍐呮牳璁塊棶銆傝繖鍧楀唴瀛樺氨鏄竴鍧楁暟鎹粨鏋勶紝瀹冨寘鍚殑鎴愬憳鏄叧浜庤瀵硅薄鐨勪俊鎭傚唴鏍稿璞$敱鍐呮牳鎺у埗浣曟椂閲婃斁錛岃屼笉鏄敱璋冪敤瀹冪殑榪涚▼錛屾瘡涓涓唴鏍稿璞$殑鏁版嵁涓兘鏈変竴涓繘紼嬪紩鐢ㄨ鏁幫紝褰撴煇榪涜鍒涘緩浜嗕竴涓唴鏍稿璞℃椂錛岃鍐呮牳瀵硅薄涓殑寮曠敤璁℃暟琚疆涓?/span>1錛屼箣鍚庤鏄湁鍏跺畠榪涚▼璁塊棶璇ュ唴鏍稿璞℃椂錛屽紩鐢ㄨ鏁板姞1錛屽綋鎵鏈夎闂唴鏍稿璞$殑榪涚▼閮介噴鏀撅紝寮曠敤璁℃暟涓?/span>0鏃訛紝璇ュ唴鏍稿璞$敱鍐呮牳閲婃斁)
3.鐢ㄦ埛鍙婂浘褰㈡帴鍙e璞?/span>錛氳彍鍗曘佺獥鍙c侀紶鏍囥佸厜鏍囥佸埛瀛愩佸瓧浣撶瓑瀵硅薄銆傚彲浠ヤ嬌鐢ㄥ垱寤哄璞$殑鍑芥暟鏉ュ尯鍒嗗摢涓槸鍐呮牳瀵硅薄錛屽摢涓槸鐢ㄦ埛鍙婂浘褰㈡帴鍙e璞★紝鍦ㄥ唴鏍稿璞″垱寤哄嚱鏁扮殑鍙傛暟涓ぇ澶氶兘鏈?/span>LPSECURITY_ATTRIBUTES綾誨瀷鐨勫弬鏁幫紝鐩稿弽鐢ㄦ埛瀵硅薄鍥懼艦鎺ュ彛瀵硅薄鏃犳綾誨瀷鍙傛暟銆?/span>
4.鍐呮牳瀵硅薄鍏變韓錛?/span>
(1)鍐呮牳瀵硅薄鐨勫叡緇ф壙錛?/span>涓涓瓙榪涚▼緇ф壙鐖惰繘紼嬩腑(鍙戶鎵跨殑)鍐呮牳瀵硅薄銆傚鏋滅埗榪涚▼鎯蟲寚瀹氭煇涓瓙榪涚▼緇ф壙瀹冪殑鍐呮牳瀵硅薄璇ユ庝箞鍔炲憿錛熷彲浠ラ氳繃鍑芥暟SetHandleInformation(HANDLE hObject,DWORD dwMask,DWORD dwFlags);鏉ュ疄鐜般?/span>
鍏蜂綋鏂規硶錛?/span>
1.浣垮瓙榪涚▼鍙互緇ф壙鐖惰繘紼嬬殑鍐呮牳瀵硅薄錛?/span>SetHandleInformation(hObj,HANDLE_F
LAG_INHERIT,HANDLE_FLAG_INHERIT);//娉細榪欑鎿嶄綔涔熷彲浠ョО涓烘墦寮鍐呮牳瀵硅薄
鍙ユ焺緇ф壙鏍囧織銆?/font>
2.瀛愯繘紼嬩笉鑳界戶鎵跨埗榪涚▼鐨勫唴鏍稿璞℃柟娉曪細SetHandleInformation(hObj,HANDLE
_FLAG_INHERIT,0);//娉細榪欎釜鎿嶄綔涔熷彲浠ョО涓哄叧闂唴鏍稿璞$戶鎵挎爣蹇?/span>
鍙︽敞錛氬垽鏂煇涓彞鏌勬槸鍚﹀彲緇ф壙鏂規硶錛?/font>
DWORD dwFlags;
GetHandleInformation(hObj,&dwFlags);
BOOL fHandleIsInheritable = (0!=(dwFlags &HANDLE_FLAG_INHERITABLE));
鍏朵腑鍑芥暟GetHandleInformation(HANDLE hObj,LPDWORD lpdwFlags)鍑芥暟鏄敤鏉ヨ繑鍥炲綋鍓嶅彞鏌勬爣蹇楀埌lpdwFlags鎸囧悜鐨?/span>DWORD涓?/span>
(2)鍛藉悕瀵硅薄錛氫嬌鐢ㄤ笅鍒楀嚱鏁板彲浠ュ垱寤轟竴涓懡鍚嶇殑鍐呮牳瀵硅薄錛?/span>
HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,BOOL bInitialOwner,LPCTSTR lpszName);
HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,LPCTSTR lpszName);
HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,LONG lInitialCount,LONG lMaximumCount,LPCTSTR lpszName);
HANDLE CreateWaitableTimer(LPSECURITY_ATTRIBUTES lpTimerAttributes,BOOL bManualReset,LPCTSTR lpszName);
HANDLE CreateFileMapping(HANDLE hFile,LPSECURITY_ATTRIBUTES lpFileMappingAttributes,DWORD flProtect,DWORD dwMaximumSizeHigh,DWORD dwMaximumSizeLow,LPCTSTR lpszName);
褰撹繖浜涘嚱鏁扮殑鏈鍚庝竴涓弬鏁?/span>lpszName涓?/span>NULL鏃訛紝緋葷粺灝嗗垱寤轟竴涓棤鍚嶇殑鍐呮牳瀵硅薄銆傚垱寤虹殑鏃犲悕瀵硅薄錛屽彲浠ラ氳繃緇ф壙鍜屽鍒舵潵瀹炵幇鍦ㄨ繘紼嬮棿鍏變韓鍐呮牳瀵硅薄銆?/span>lpszName鍙傛暟錛氬畠鐨勬渶澶ч暱搴︿負MAX_PATH(260涓瓧絎?/span>)錛屼笖涓嶈兘鍖呭惈宸︽枩鏉?/span>銆?/span>
灝忓父璇嗭細 寰楀埌鎵ц閿欒淇℃伅鍙互閫氳繃鍑芥暟GetLastError();
渚嬪錛?/span>DWORD dwErrorCode = GetLastError();
閭d箞濡備綍浣跨敤“鍛藉悕鐨勫唴鏍稿璞℃潵鍏變韓鍐呮牳瀵硅薄鍛紵”
鏂規硶鍙婄悊璁哄疄璐細閫氳繃鍏蜂綋渚嬪瓙璇存槑錛屽亣璁捐繘紼?/span>A鍒涘緩涓涓唴鏍稿璞★細
HANDLE hMutexProcessA = CreateMutex(NULL,FALSE,"UUXAMutex");涔嬪悗榪涚▼B涔熷悓鏍鳳細HANDLE hMutexProcessB = CreateMutex(NULL,FALSE,"UUXAMutex");鍒涘緩浜嗕竴涓笌榪涚▼A鐩稿悓鐨勫唴鏍稿璞★紝閭d箞緇撴灉榪涚▼B鏄惁鎴愬姛鍒涘緩鍐呮牳瀵硅薄浜嗗憿錛熺郴緇熸槸榪欐牱澶勭悊榪欑鎯呭喌鐨勶紝棣栧厛緋葷粺媯鏌ユ槸鍚﹀瓨鍦ㄤ竴涓悕縐頒負"UUXAMutex"鐨勫唴鏍稿璞★紝緇忔鏌ュ悗鍛紝鍙戠幇宸茬粡瀛樺湪鍐呮牳瀵硅薄"UUXAMutex"錛屼箣鍚庢鏌ュ唴鏍稿璞$被鍨嬶紝鐢變簬榪涚▼A鍜?/span>B鍒涘緩鐨勫唴鏍稿璞$被鍨嬮兘鏄?#8220;浜掓枼閲?#8221;錛屾墍浠ョ郴緇熷氨璁や負榪涚▼B瀵?/span>CreateMutex鐨勮皟鐢ㄦ垚鍔熶簡銆傜郴緇熷湪榪涚▼B鐨勫彞鏌勮〃涓壘鍒頒竴涓┖琛ㄩ」錛岀劧鍚庡垵濮嬪寲璇ヨ〃欏規寚鍚戝凡緇忓瓨鍦ㄧ殑鍐呮牳瀵硅薄銆?/span>
鍒ゆ柇涓涓繘紼嬫槸鍚︾湡姝g殑鍒涘緩浜嗕竴涓柊鐨勫唴鏍稿璞″彲浠ヤ嬌鐢?/span>GetLastError鏉ュ垽鏂?/span>
HANDLE hMutex = CreateMutex(NULL,FALSE,"SomeMutex");
if (GetLastError() == ERROR_ALREADY_EXISTS) {
}else{};
(3)澶嶅埗瀵硅薄鍙ユ焺錛氶氳繃鍑芥暟BOOL DuplicateHandle(HANDLE hSourceProcessHandle,HANDLE hSourceHandle,HANDLE hTargetProcessHandle,LPHANDLE lpTargetHandle,DWORD dwDesireAccess,BOOL bInheritHandle,DWORD dwOptions);
鍙傛暟錛?/span>dwOptions鍙互鏄?/span>0鎴栨槸DUPLICATE_SAME_ACCESS鍜?/span>DUPLICATE_CLOSE_SOURCE
涓句緥錛氬鏋滆繘紼?/span>A鎯寵榪涚▼B寰楀埌鑷繁鑳藉璁塊棶鐨勪竴涓唴鏍稿璞$殑璁塊棶鏉冮檺錛岄偅涔堣濡備綍鍋氬憿錛熷涓嬫墍紺猴細
HANDLE hObjProcessA = CreateMutex(NULL,FALSE,NULL);
HANDLE hProcessB = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessIdB);
HANDLE hObjProcessB;
DuplicateHandle(GetCurrentProcess(),hObjProcessA,hProcessB,&hObjProcessB,0,FALSE,DUPLICATE_SAME_ACCESS);
CloseHandle(hProcessB);
CloseHandle(hObjProcessA);
鏉ヨ嚜錛?a >http://uuxa.itpub.net/