日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

编程打开Windows服务控制管理器

發布時間:2025/4/14 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程打开Windows服务控制管理器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假設要自己編程來加載Windows下后綴為.sys的驅動程序;首先要使用?OpenSCManager 函數打開Windows服務控制管理器;

下面先來調用此函數看一下會不會打開成功;代碼如下;

#include <windows.h> #include <winsvc.h> #include <conio.h> #include <stdio.h> #define DRIVER_NAME "HelloDriver" #define DRIVER_PATH "..//MyDriver//HelloDriver.sys" int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {/* TODO: Place code here.*/PVOID lpMsgBuf; char szBuffer[100];char szDriverImagePath[256]; //得到完整的驅動路徑 //GetFullPathName(lpszDriverPath, 256, szDriverImagePath, NULL); BOOL bRet = FALSE; SC_HANDLE hServiceMgr=NULL;//SCM管理器的句柄 SC_HANDLE hServiceDDK=NULL;//NT驅動程序的服務句柄 //打開服務控制管理器 //hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS ); hServiceMgr = OpenSCManager( NULL, "abc", SC_MANAGER_ALL_ACCESS); if( hServiceMgr == NULL ) { //OpenSCManager失敗 if (FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(), // 錯誤代碼MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf,0,NULL)){MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("打開服務控制管理器失敗"), MB_OK);}} else { wsprintf(szBuffer, "0x%08x",hServiceMgr);MessageBox(NULL,szBuffer,TEXT("開服務控制管理器,句柄:"),0);} LocalFree(lpMsgBuf); return 0; }

? ? 打開成功,則顯示打開的句柄;打開失敗,顯示格式化錯誤消息;使用Dev C++;

打開成功如下;
?

OpenSCManager 函數描述如下;
SC_HANDLE WINAPI OpenSCManager(
_In_opt_ LPCTSTR lpMachineName,
_In_opt_ LPCTSTR lpDatabaseName,
_In_ DWORD dwDesiredAccess
);
函數作用:以一定的權限,在指定的計算機打開指定的SCM數據庫;
參數:
1. lpMachineName:目標計算機名,NULL表示本地計算機
2. lpDatabaseName:服務管理程序系統組件數據庫,可以設為SERVICES_ACTIVE_DATABASE,如果為NULL,表示默認打開SERVICES_ACTIVE_DATABASE數據庫
3. dwDesiredAccess:對SCM的權限,可以是以下:
Access right?? ?Description
SC_MANAGER_ALL_ACCESS (0xF003F)?? ?Includes STANDARD_RIGHTS_REQUIRED, in addition to all access rights in this table.
SC_MANAGER_CREATE_SERVICE (0x0002)?? ?Required to call the CreateService function to create a service object and add it to the database.
SC_MANAGER_CONNECT (0x0001)?? ?Required to connect to the service control manager.
SC_MANAGER_ENUMERATE_SERVICE (0x0004)?? ?SC_MANAGER_LOCK (0x0008)?? ?Required to call the LockServiceDatabase function to acquire a lock on the database.
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020)?? ?Required to call the NotifyBootConfigStatus function.
SC_MANAGER_QUERY_LOCK_STATUS (0x0010)?? ?Required to call the QueryServiceLockStatus function to retrieve the lock status information for the database.

第二個參數是數據庫名;如果隨便給個"abc",則打開失敗如下;


?

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的编程打开Windows服务控制管理器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。