日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

3 《Undocumented Windows 2000 Secrets》翻譯 --- 第三章( 三 )


名 稱(chēng)
描 述
CloseServiceHandle
關(guān)閉來(lái)自 OpenSCManager() 、 CreateService() 或 OpenService() 的句柄
ControlService
停止、暫停、繼續(xù)、查詢(xún)或通知已加載的服務(wù) / 驅(qū)動(dòng)程序
CreateService
加載一個(gè)服務(wù) / 驅(qū)動(dòng)程序
DeleteService
卸載一個(gè)服務(wù) / 驅(qū)動(dòng)程序
OpenSCManager
獲取 SC 管理器的句柄
OpenService
獲取一個(gè)已加載的服務(wù) / 驅(qū)動(dòng)程序的句柄
【3 《Undocumented Windows 2000 Secrets》翻譯 --- 第三章】QueryServiceStatus
查詢(xún)一個(gè)服務(wù) / 驅(qū)動(dòng)程序的屬性和當(dāng)前狀態(tài)
StartService
啟動(dòng)一個(gè)已加載的服務(wù) / 驅(qū)動(dòng)程序
表 3-3. 基本的服務(wù)控制函數(shù)
加載和運(yùn)行一個(gè)服務(wù)需要執(zhí)行的典型操作步驟:
1. 調(diào)用 OpenSCManager() 以獲取一個(gè)管理器句柄
2. 調(diào)用 CreateService() 來(lái)向系統(tǒng)中添加一個(gè)服務(wù)
3. 調(diào)用 StartService() 來(lái)運(yùn)行一個(gè)服務(wù)
4. 調(diào)用 CloseServiceHandle() 來(lái)釋放管理器或服務(wù)句柄
要確保當(dāng)一個(gè)錯(cuò)誤發(fā)生時(shí),要回滾到最后一個(gè)成功的調(diào)用,然后再開(kāi)始 。例如,你在調(diào)用 StartService() 時(shí) SC 管理器報(bào)告了一個(gè)錯(cuò)誤,你就需要調(diào)用 DeleteService()。否則,服務(wù)將保持在一個(gè)非預(yù)期的狀態(tài) 。另一個(gè)使用 SC 管理器 API 易犯的錯(cuò)誤是,必須為 CreateService() 函數(shù)提供可執(zhí)行文件的全路徑名,否則,如果該函數(shù)在當(dāng)前目錄中沒(méi)有找到可執(zhí)行文件的話,就會(huì)失敗 。因此,你應(yīng)該使用 Win32 函數(shù) ---GetFullPathName() 來(lái)規(guī)格化傳遞給 CreateService() 的所有文件名,除非可以保證它們已經(jīng)是全路徑的 。
高層的驅(qū)動(dòng)程序管理函數(shù)
為了更容易的和 SC 管理器進(jìn)行交互,本書(shū)附帶的 CD 提供了多個(gè)更高級(jí)的外包函數(shù),這些函數(shù)屏蔽了原有的一些不方便的特殊要求 。這些函數(shù)是本書(shū)提供的龐大的 Windows 2000 工具庫(kù)(位于隨書(shū) CD 中的 srcw2k_lib )中的一部分 。w2k_lib.dll 導(dǎo)出的所有函數(shù)都有一個(gè)全局的名字前綴 w2k ,服務(wù)和驅(qū)動(dòng)程序管理函數(shù)都使用 w2kService 前綴 。列表 3-8 給出了本書(shū)提供的工具庫(kù)中實(shí)現(xiàn)的加載、控制和卸載服務(wù) / 驅(qū)動(dòng)程序的函數(shù)的細(xì)節(jié) 。
// =================================================================
// SERVICE/DRIVER MANAGEMENT
// =================================================================
SC_HANDLE WINAPI w2kServiceConnect (void)
{
return OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS);
}
// -----------------------------------------------------------------
SC_HANDLE WINAPI w2kServiceDisconnect (SC_HANDLE hManager)
{
if (hManager != NULL) CloseServiceHandle (hManager);
return NULL;
}
// -----------------------------------------------------------------
SC_HANDLE WINAPI w2kServiceManager (SC_HANDLE hManager,
PSC_HANDLE phManager,
BOOL fOpen)
{
SC_HANDLE hManager1 = NULL;
if (phManager != NULL)
{
if (fOpen)
{
if (hManager == NULL)
{
*phManager = w2kServiceConnect ();
}
else
{
*phManager = hManager;
}
}
else
{
if (hManager == NULL)
{
*phManager = w2kServiceDisconnect (*phManager);
}
}
hManager1 = *phManager;
}
return hManager1;
}
// -----------------------------------------------------------------
SC_HANDLE WINAPI w2kServiceOpen (SC_HANDLE hManager,
PWord pwName)
{
SC_HANDLE hManager1;
SC_HANDLE hService = NULL;
w2kServiceManager (hManager, &hManager1, TRUE);
if ((hManager1 != NULL) && (pwName != NULL))
{
hService = OpenService (hManager1, pwName,
SERVICE_ALL_ACCESS);
}
w2kServiceManager (hManager, &hManager1, FALSE);

推薦閱讀