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释放内存。