1. 程式人生 > >學習筆記(三)

學習筆記(三)

type 指向 des 函數 句柄 釋放內存 服務類 pat play

OpenSCManager:
function OpenSCManager(lpMachineName, lpDatabaseName: PChar;dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
OpenSCManager,函數建立了一個到服務控制管理器的連接,並打開指定的數據庫。

參數
lpMachineName
  指向零終止字符串,命名為目標計算機。如果該指針為NULL ,或者如果它指向一個空字符串,函數連接到服務控制管理器在本地計算機上。
lpDatabaseName
  指向零終止字符串,名稱的服務控制管理數據庫,以開放。此字符串應指定ServicesActive 。如果該指針為NULL ,該ServicesActive數據庫默認情況下打開。
dwDesiredAccess
  指定服務的訪問控制管理。才準予進入的要求,系統會檢查訪問令牌的調用進程對任意訪問控制列表的安全描述符與服務控制管理器對象。訪問類型的SC_MANAGER_CONNECT是含蓄地指明調用這個函數


SC_MANAGER_ALL_ACCESS
返回值
  如果函數成功,返回值是一個句柄指定的服務控制管理器數據庫。如果函數失敗,返回值為NULL 。要獲得擴展錯誤信息,請使用GetLastError 獲得錯誤代碼。

GetModuleFileName:
獲取當前進程已加載模塊的文件的完整路徑,該模塊必須由當前進程加載。
DWORDGetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);

函數參數
HMODULE hModule 裝載一個程序實例的句柄。如果該參數為NULL,該函數返回該當前應用程序全路徑。
LPTSTR lpFileName 是你存放返回的名字的內存塊的指針,是一個輸出參數
DWORD nSize,裝載到緩沖區lpFileName的最大值

函數返回值
如果返回為成功,將在lpFileName的緩沖區當中返回相應模塊的路徑,如果所設的nSize過小,那麽返回僅按所設置緩沖區大小返回相應字符串內容。
如果函數失敗,返回值將為0,利用GetLastError可獲得異常代碼。


CreateService:

函數功能:創建一個服務對象,並將其添加到指定的服務控制管理器數據庫。
函數原型:
SC_HANDLE CreateService(
SC_HANDLE hSCManager, //服務控制管理程序維護的登記數據庫的句柄,由系統函數OpenSCManager 返回
LPCTSTR lpServiceName, //以NULL 結尾的服務名,用於創建登記數據庫中的關鍵字
LPCTSTR lpDisplayName, //以NULL 結尾的服務名,用於用戶界面標識服務
DWORD dwDesiredAccess, //指定服務返回類型
DWORD dwServiceType, //指定服務類型
DWORD dwStartType, //指定何時啟動服務
DWORD dwErrorControl, //指定服務啟動失敗的嚴重程度
LPCTSTR lpBinaryPathName, //指定服務程序二進制文件的路徑
LPCTSTR lpLoadOrderGroup, //指定順序裝入的服務組名
LPDWORD lpdwTagId, //忽略,NULL
LPCTSTR lpDependencies, //指定啟動該服務前必須先啟動的服務或服務組
LPCTSTR lpServiceStartName, //以NULL 結尾的字符串,指定服務帳號。如是NULL,則表示使用LocalSystem帳號
LPCTSTR lpPassword //以NULL 結尾的字符串,指定對應的口令。為NULL表示無口令。但使用LocalSystem時填NULL
);

返回值:
如果函數成功,返回值將是該服務的句柄。
如果函數失敗,則返回值為 NULL。


malloc與calloc:
void *calloc(size_t n, size_t size);
功 能: 在內存的動態存儲區中分配n個長度為size的連續空間,函數返回一個指向分配起始地址的指針;如果分配不成功,返回NULL。

void *malloc(unsigned int num_bytes);
功能:動態分配內存

區別:
calloc在動態分配完內存後,自動初始化該內存空間為零,而malloc不初始化,裏邊數據是隨機的垃圾數據。

使用完後用free釋放內存。

學習筆記(三)