Windows SDK開發(fā)包中并未提供所有的API函數(shù),,在本文中我將討論如何調(diào)用這種未公開的API函數(shù)。 事實(shí)上所有未公開的API函數(shù)都和其它的API函數(shù)一樣包含在系統(tǒng)的動(dòng)態(tài)鏈接庫(kù)中,,調(diào)用這些函數(shù)的方法是取得它們的指針,,然后通過指針來(lái)進(jìn)行操作。而取得函數(shù)地址,,是通過GetP
事實(shí)上所有未公開的API函數(shù)都和其它的API函數(shù)一樣包含在系統(tǒng)的動(dòng)態(tài)鏈接庫(kù)中,,調(diào)用這些函數(shù)的方法是取得它們的指針,,然后通過指針來(lái)進(jìn)行操作。而取得函數(shù)地址,,是通過GetProcAddress這個(gè)API函數(shù)實(shí)現(xiàn)的: FARPROC WINAPI GetProcAddress( HMODULE hModule, // DLL模塊句柄 LPCSTR lpProcName // 函數(shù)名稱 ); 當(dāng)然,,在取得地址之前,需要用LoadLibrary獲得模塊的句柄,。還有,,為了書寫方便,最好用typedef將函數(shù)指針定義為一種類型,。 下面我將通過兩個(gè)例子來(lái)演示如何調(diào)用這些未公開的API函數(shù),。 一、有名稱的函數(shù) 這種函數(shù)在DLL中擁有自己的函數(shù)名稱,,但是在SDK包中并沒有提供聲明,,其中最有代表性的是RegisterServiceProcess函數(shù): DWORD WINAPI RegisterServiceProcess( DWORD dwProcessId, // 進(jìn)程ID DWORD dwType // 注冊(cè)種類,,1表示注冊(cè) ); 這個(gè)函數(shù)的功能是在Win98下將進(jìn)程注冊(cè)為系統(tǒng)服務(wù)進(jìn)程,很多木馬程序的隱藏就是用這個(gè)函數(shù)實(shí)現(xiàn)的,。調(diào)用它的示例代碼如下: typedef DWORD (WINAPI * REGISTER)( DWORD, DWORD ); HMODULE hModule; REGISTER RegisterServiceProcess; hModule = LoadLibrary( "kernel32.dll" ); if ( hModule != NULL ) { RegisterServiceProcess = (REGISTER)GetProcAddress( hModule, "RegisterServiceProcess" ); RegisterServiceProcess( GetCurrentProcessId(), 1 ); FreeLibrary( hModule ); } 二,、無(wú)名稱的函數(shù) 有的函數(shù)在DLL中并沒有函數(shù)名稱,這又如何調(diào)用呢,?事實(shí)上所有的API函數(shù)無(wú)論有無(wú)名稱,,都會(huì)有一個(gè)ID,來(lái)在DLL中標(biāo)識(shí)自己,。比如函數(shù)RunFileDlg,它的ID是61,,功能是顯示系統(tǒng)“運(yùn)行”對(duì)話框,。下圖所列的是我開發(fā)的進(jìn)程管理軟件July中所調(diào)用的“運(yùn)行”對(duì)話框: 事實(shí)上調(diào)用這種函數(shù)的方法和前一種非常相似,唯一不同的只是把GetProcAddress的lpProcName參數(shù)使用MAKEINTRESOURCE宏將函數(shù)的ID轉(zhuǎn)換一下即可,。示例代碼如下: typedef void (WINAPI* RUN)( HWND, HICON, LPCSTR, LPCSTR, LPCSTR, UINT ); HMODULE hShell32; RUN RunFileDlg; hShell32 = LoadLibrary( "shell32.dll" ); RunFileDlg = (RUN)GetProcAddress( hShell32, MAKEINTRESOURCE( 61 ) ); RunFileDlg( hParent, hIcon, NULL, NULL, NULL, 0 ); FreeLibrary( hShell32 ); 未公開的API函數(shù)的調(diào)用方法就介紹到這里了,。事實(shí)上還有很多這樣的函數(shù),關(guān)于這些函數(shù)的介紹及使用方法,,請(qǐng)下載我的“未公開的Windows API函數(shù)”文檔,。 附件:/do/uploads/soft/api.rar |
|
來(lái)自: firefox_zyw > 《Windows》