GetVersionEx 察看现在是什么操作系统
HMODULE GetModuleHandle(
LPCTSTR lpModuleName
);
功能:察看现在模块的句柄,返回一个内存地址/基地址
使用方法: 参数是一个.dll或者是.exe的文件,需要写路径名,路径名用""括起
例子:
#include <iostream.h>
#include<windows.h>
void main()
{
cout<<GetModuleHandle("H:/Winamp/Winamp.exe");
}
BOOL WINAPI Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
功能:得到一个首进程的资料
参数:hSnapshot是一个句柄值通过调用CreateToolhelp32Snapshot函数得到
lppe是一个PROCESSENTRY32结构体值
BOOL WINAPI Process32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
功能:在得到首进程的情况下,调用这个函数可察看用Process32First函数得到进程的下一个
进程,可用循环察看,函数会自动识别是否到了最后一个进程,如果到了,函数自动退出
参数:同上
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
功能:可得到在系统内进程的映射
参数:dwFlags是有几个可选择的,详见msdn
th32ProcessID是进程的id号,当为0时传的是当前进程,如果是当前系统内的
id时,就是察看id号所指向的进程信息
Access Tokens
功能:对权限的操作 //详见msdn文档
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
功能:创建一个线程
参数:lpThreadAttributes 一般设为NULL 具体功能使用MSDN查看
dwStackSize 一般设为0,详见msdn
lpStartAddress 为线程函数的地址(在一个程序中为线程函数名称)
lpParameter 为线程函数的参数,只能是1个参数,不过可以是1个结构体
dwCreationFlags 一般为0,具体服务见msdn
lpThreadId 为线程的ID号,是一个返回得值
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
功能: 等待线程运行结束后在开始运行主线程的代码
参数: HANDLE hHandle : 是一个要等待进程的句柄
DWORD dwMilliseconds :为设置的等待时间,详见msdn
fopen 函数是建立或打开一个文件
FILE 是fopen函数的一个结构体,需要是一个指针值,由fopen函数返回后得到
fopen ("name","type")
name 是要打开或创建的文件名称
type 是操作类型,具体参看MSDN文档
fputc 函数是将字符写入建立的文件中
fputc (ch,fp)
ch 只能是单个字符,如果要输入一个字符串的话可以传递一个指针值,然后按
位写入,用指针运算控制
fp 是建立文件的指针值,是fopen函数返回的指针
CopyFile 函数是复制1个文件的函数
BOOL CopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
BOOL bFailIfExists
);
LPCTSTR lpExistingFileName :参数为存在文件的路径和名称
LPCTSTR lpNewFileName :参数为复制完的文件的名称和路径
BOOL bFailIfExists :如果是TRUE的话,并且复制的文件已经存在(就是已复制完),那么这个函数的功能就失败,如果是FALSE的话,并且复制的文件已经存在,就覆盖原来得文件,并且函数调用成功
GetModuleFileNameEx 是得到一个进程路径的函数,与之相关的函数为
EnumProcessModules函数
DWORD GetModuleFileNameEx(
HANDLE hProcess,
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
HANDLE hProcess : 是要察看进程的句柄
HMODULE hModule :是一个模版的句柄,如果为NULL, 就为当前进程的路径
LPTSTR lpFilename :是将路径写入这个字符数组内
DWORD nSize : 是缓冲区的大小
建立1个进程
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
LPCTSTR lpApplicationName :是要创建进程的文件路径
EnumProcessModules()函数枚举进程的模块
BOOL EnumProcessModules(
HANDLE hProcess,
HMODULE* lphModule,
DWORD cb,
LPDWORD lpcbNeeded
);
HANDLE hProcess :所要枚举的进程的句柄
HMODULE* lphModule :获得的进程的模块句柄
DWORD cb, :获得lphModule 的大小( sizeof( hModule ) )
LPDWORD lpcbNeeded : 返回hModule的大小
OpenProcess 函数 : 作用为打开一个存在的进程
HANDLE OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);
DWORD dwDesiredAccess :为1个标志,作为这个函数可提供何种服务,具体
选项参看MSDN
BOOL bInheritHandle :如果是TRUE,那么函数返回的句柄是可继承的,如
过是FLASE,那么返回的句柄为不可继承的
DWORD dwProcessId :选定进程的ID号,用于确定要打开哪个进程
返回值 :本函数返回的值为选定进程的句柄值
GetNumberOfInterfaces函数为枚举出本机有几个网络接口
DWORD GetNumberOfInterfaces(
PDWORD pdwNumIf
);
PDWORD pdwNumIf :是一个DWORD的指针值,被初始化为本机网络接口数
RegSetValue 给注册表添加键值的函数
LONG RegSetValue(
HKEY hKey,
LPCTSTR lpSubKey,
DWORD dwType,
LPCTSTR lpData,
DWORD cbData
);
HKEY hKey : 是键值的位置,可以从RegOpenKeyEx的返回值得到,也可以用给出的一些主键标志
LPCTSTR lpSubKey : 是键值得名称,也可以是一个键值得位置(是想要创建键的位置和名称)
DWORD dwType : 是键值得数据类型,具体参看MSDN
LPCTSTR lpData : 是键值得内容
DWORD cbData : 存储键值内容数组的大小(lpData)
用于将hostinfo结构变量中的h_addr_list转化为标准的点分表示的IP
char* FAR inet_ntoa(
struct in_addr in
);
struct in_addr in : 传入一个in_addr的解构体
返回值 : 返回一个char型的指针数据,里面是转化的成标准点分表示的IP
gethostname();获取主机名
int gethostname(
char* name,
int namelen
);
char* name : 将主机名存入这个缓冲区内
int namelen : 这个缓冲区的长度
gethostbyname(); 有主机名获得主机IP
struct hostent* FAR gethostbyname(
const char* name
);
const char* name : 是主机名
返回值 : 如果没有错误返回一个hostent的结构体,具体参看MSDN
LoadLibraryEx用于装载DLL文件
HMODULE LoadLibraryEx(
LPCTSTR lpFileName,
HANDLE hFile,
DWORD dwFlags
);
LPCTSTR lpFileName : 想要装载DLL的名称和路径
HANDLE hFile : 根据MSDN文档中写的It must be NULL. 照做……
DWORD dwFlags : 为0值就可以,具体有什么服务去看MSDN
GetProcAddress获得显示加载DLL文件中的函数地址
FARPROC GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName
);
HMODULE hModule : 是LoadLibraryEx的返回值
LPCSTR lpProcName : 是DLL中的函数名(你想要获得的)
返回值 : GetProcAddress返回一个要调用DLL中函数的一个地址,用函数指针获得,需要转换成和要
调用DLL函数中的类型一样的类型,用数据转换就可以
-------------------------------------------------------------------------------------------
OpenSCManager 函数功能是打开服务控制管理器
SC_HANDLE OpenSCManager(
LPCTSTR lpMachineName,
LPCTSTR lpDatabaseName,
DWORD dwDesiredAccess
);
LPCTSTR lpMachineName : 一个指向字符串的指针,里面保存着是要打开的电脑的名称,如果是本机就传递NULL就可以
LPCTSTR lpDatabaseName : 传递NULL就可以
DWORD dwDesiredAccess : 是传递一个标志,看以什么方式打开,并传递什么样的服务
返回值 : 如果调用成功的话将传递一个服务控制器的句柄,如果调用失败的话,传递的句柄值则是NULL
CreateService 函数功能是建立一个服务
SC_HANDLE CreateService(
SC_HANDLE hSCManager,
LPCTSTR lpServiceName,
LPCTSTR lpDisplayName,
DWORD dwDesiredAccess,
DWORD dwServiceType,
DWORD dwStartType,
DWORD dwErrorControl,
LPCTSTR lpBinaryPathName,
LPCTSTR lpLoadOrderGroup,
LPDWORD lpdwTagId,
LPCTSTR lpDependencies,
LPCTSTR lpServiceStartName,
LPCTSTR lpPassword
);
SC_HANDLE hSCManager : 是OpenSCManager函数的返回值,是打开服务管理器的句柄值
LPCTSTR lpServiceName : 指向一个字符串, 是要建立服务的名称
LPCTSTR lpDisplayName : 指向一个字符串,是建立服务显示的名称
剩下的太多了………看MSDN文档吧………
OpenService 函数是打开一个已有的服务
SC_HANDLE OpenService(
SC_HANDLE hSCManager,
LPCTSTR lpServiceName,
DWORD dwDesiredAccess
);
SC_HANDLE hSCManager : 是OpenSCManager函数的返回值,是打开服务管理器的句柄值
LPCTSTR lpServiceName : 指向一个字符串,里面保存着要打开服务的名称
DWORD dwDesiredAccess : 是一个标志,看需要什么样的服务,详见MSDN
返回值 : 当调用成功后,它返回一个句柄,这个句柄将被StartService 等函数调用
StartService 函数是开始运行一个服务
BOOL StartService(
SC_HANDLE hService,
DWORD dwNumServiceArgs,
LPCTSTR* lpServiceArgVectors
);
SC_HANDLE hService : 是OpenService 函数的返回值
DWORD dwNumServiceArgs : 是要向ServiceMain 函数传递多少个参数(没有传0)
LPCTSTR* lpServiceArgVectors : 是要向ServiceMain 函数传递的参数,传NULL就成了……
StartServiceCtrlDispatcher 函数是一个启动服务程序的入口
BOOL StartServiceCtrlDispatcher(
const LPSERVICE_TABLE_ENTRY lpServiceTable
);
const LPSERVICE_TABLE_ENTRY lpServiceTable : 指向一个结构体里面存储着服务函数起点的相关信息
typedef struct _SERVICE_TABLE_ENTRY {
LPTSTR lpServiceName;
LPSERVICE_MAIN_FUNCTION lpServiceProc;
}
LPTSTR lpServiceName : 是一个服务的名称 (和服务程序相关联的)
LPSERVICE_MAIN_FUNCTION lpServiceProc : 是一个ServiceMain 入口函数的名称
关于服务的说明,首先一个服务都要有一个入口函数,入口函数可以是main或Winmain,这是执行函数代码的入口,但是不是确定这个是个服务的入口,真正的服务入口函数是WINAPI MyServiceStart(这个名称无所谓),这个是要传入SERVICE_TABLE_ENTRY这个结构体中的,已传入SERVICE_TABLE_ENTRY结构体中的名称为准,这个函数主要是对一个服务进行初始化,并且是执行一个服务的代码的主要功能
每个服务还必须要有MyServiceCtrlHandler这个函数,这个函数是对一个服务进行控制的,里面可以实现对一个服务进行的各种控制,如果没有写入里面的代码(控制方面的),那么这个服务就将没有那方面的控制功能。
SetServiceStatus 函数是更新一个服务的状态,当需要服务的状态有变化时,就要调用这个函数
BOOL SetServiceStatus(
SERVICE_STATUS_HANDLE hServiceStatus,
LPSERVICE_STATUS lpServiceStatus
);
SERVICE_STATUS_HANDLE hServiceStatus : 这个是服务的句柄由RegisterServiceCtrlHandler函数的返回值取得 (这个结构体变量要声明为一个服务的全局变量)
LPSERVICE_STATUS lpServiceStatus : 这个是要将服务更新成何种状态的参数,这是个结构体
SERVICE_STATUS 结构体是用于存放服务的状态
typedef struct _SERVICE_STATUS {
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;
看MSDN文档
CDatabase 类是用来对数据源的操作
::Open 方法是用来打开数据源
virtual BOOL Open(
LPCTSTR lpszDSN,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect = _T("ODBC;"),
BOOL bUseCursorLib = TRUE
);
LPCTSTR lpszDSN : 是数据源的名称
BOOL bExclusive = FALSE
BOOL bReadOnly = FALSE : 这2个参数可以缺省都为FALSE,详细看MSDN
LPCTSTR lpszConnect : 用来填入连接数据源的用户名同密码的参数,ODBC为硬编码必须要写入的 举例 "ODBC;UID=sa;PWD=;"
下个参数也用缺省就可以,详细看MSDN
CStdioFile类的功能是对文件进行操作
{
ReadString方法是用来读取文件中的字符,按行读取(循环调用后可以读取
每一行的数据)
}
Memcmp 函数用来从头判断(1 为起点)到第几个元素是否匹配 (区分大小写)判断存在内存中的元素(字符串指针)
以上为2006年写的,找到后直接贴过来的,看见这个才有将以后自己使用过的api继续补完的想法