www.pudn.com > IceSwordSample.rar > Cooperator.h
///////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------
// Copyright (c) 2004 jfpan20000@sina.com
//
// IceSword协件库 1.06
//
// pjf USTC
//------------------------------------------------------------------
////////////////////////////////////////////////////////////////////
#ifndef __ICE_COOPERATOR_
#define __ICE_COOPERATOR_
#pragma comment(lib, "IceSword.lib")
typedef LONG NTSTATUS;
//
////指示IsdOpenKey的RootDirectory为空
//
#define NULL_ROOT_DIR_HANDLE ((HANDLE)0xF000000F)
//
////历史原因,将其定义为2000,其实只用到255字节
//
#define DATA_BUF_LEN 2000
//
////IsdCreateFile可以创建与打开目录,但必须为dwFlagsAndAttributes指定FILE_FLAG_DIRECTORY标志
//
#define FILE_FLAG_DIRECTORY 0x00400000
//
////用于IsdFindFile,对应于WIN32_FIND_DATA,有一点区别
//
typedef struct _ISD_WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
LARGE_INTEGER nFileSize;
LARGE_INTEGER AllocationSize;
TCHAR cAlternateFileName[ 14 ];
TCHAR cFileName[ DATA_BUF_LEN ];
} ISD_WIN32_FIND_DATA, *PISD_WIN32_FIND_DATA;
//
////用于IsdSetInformationFile/IsdQueryInformationFile
//
typedef enum _FILE_INFORMATION_CLASS {
FileDirectoryInformation = 1,
FileFullDirectoryInformation, // 2
FileBothDirectoryInformation, // 3
FileBasicInformation, // 4 wdm
FileStandardInformation, // 5 wdm
FileInternalInformation, // 6
FileEaInformation, // 7
FileAccessInformation, // 8
FileNameInformation, // 9
FileRenameInformation, // 10
FileLinkInformation, // 11
FileNamesInformation, // 12
FileDispositionInformation, // 13
FilePositionInformation, // 14 wdm
FileFullEaInformation, // 15
FileModeInformation, // 16
FileAlignmentInformation, // 17
FileAllInformation, // 18
FileAllocationInformation, // 19
FileEndOfFileInformation, // 20 wdm
FileAlternateNameInformation, // 21
FileStreamInformation, // 22
FilePipeInformation, // 23
FilePipeLocalInformation, // 24
FilePipeRemoteInformation, // 25
FileMailslotQueryInformation, // 26
FileMailslotSetInformation, // 27
FileCompressionInformation, // 28
FileObjectIdInformation, // 29
FileCompletionInformation, // 30
FileMoveClusterInformation, // 31
FileQuotaInformation, // 32
FileReparsePointInformation, // 33
FileNetworkOpenInformation, // 34
FileAttributeTagInformation, // 35
FileTrackingInformation, // 36
FileIdBothDirectoryInformation, // 37
FileIdFullDirectoryInformation, // 38
FileValidDataLengthInformation, // 39
FileShortNameInformation, // 40
FileMaximumInformation
} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
//
////注册表查询操作结构
//
typedef enum _KEY_INFORMATION_CLASS {
KeyBasicInformation,
KeyNodeInformation,
KeyFullInformation,
KeyNameInformation,
KeyCachedInformation,
KeyFlagsInformation
} KEY_INFORMATION_CLASS;
typedef struct _KEY_BASIC_INFORMATION {
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG NameLength;
WCHAR Name[1]; // Variable-length string
} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
typedef enum _KEY_VALUE_INFORMATION_CLASS {
KeyValueBasicInformation,
KeyValueFullInformation,
KeyValuePartialInformation,
KeyValueFullInformationAlign64,
KeyValuePartialInformationAlign64
} KEY_VALUE_INFORMATION_CLASS;
typedef struct _KEY_VALUE_BASIC_INFORMATION {
ULONG TitleIndex;
ULONG Type;
ULONG NameLength;
WCHAR Name[1]; // Variable size
} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
ULONG TitleIndex;
ULONG Type;
ULONG DataLength;
UCHAR Data[1]; // Variable size
} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
typedef struct _KEY_FULL_INFORMATION {
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG ClassOffset;
ULONG ClassLength;
ULONG SubKeys;
ULONG MaxNameLen;
ULONG MaxClassLen;
ULONG Values;
ULONG MaxValueNameLen;
ULONG MaxValueDataLen;
WCHAR Class[1];
} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
typedef struct _KEY_VALUE_FULL_INFORMATION {
ULONG TitleIndex;
ULONG Type;
ULONG DataOffset;
ULONG DataLength;
ULONG NameLength;
WCHAR Name[1]; // Variable size
} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
//
////导出函数
//
/////////////////////////////////////////////////////////////////////
////IsdGetVersion
//
//目的:获取运行中的Icesword程序版本
//
//参数:
// Version
// [out] 成功后返回版本号,如1.06版就返回0x106.
//
//返回值:成功则返回TRUE.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdGetVersion(DWORD *Version);
/////////////////////////////////////////////////////////////////////
////IsdGetIceProcId
//
//目的:获取运行中的Icesword进程PID
//
//参数:无
//
//返回值:成功则返回PID.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) DWORD IsdGetIceProcId();
/////////////////////////////////////////////////////////////////////
////IsConnectServer
//
//目的:是否已经连接到IceSword进程
//
//参数:无
//
//返回值:已连接则返回TRUE.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsConnectServer();
/////////////////////////////////////////////////////////////////////
////ConnectAndCall
//
//目的:连接IceSword进程并获取初始参数
//
//参数:无
//
//返回值:成功则返回TRUE.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL ConnectAndCall();
/////////////////////////////////////////////////////////////////////
////IsdEnumProcesses
//
//目的:枚举进程
//
//参数:
// lpidProcess
// [out] 用于保存返回值的缓冲.
// cb
// [in] 缓冲大小.
// cbNeeded
// [out] 实际返回缓冲大小.
//
//返回值:成功则返回TRUE.
//
//备注:1、它与系统PSAPI的EnumProcesses几乎一样使用,就不多说了.
// 注意因为0号Idle进程始终不变,返回值就省略了,所以进程总数
// 应该加一.
// 2、它返回的PID包含状态Deleting的进程,请用IsProcessDeleting
// 判断是不是该状态(返回TRUE则是).
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdEnumProcesses(
DWORD *lpidProcess,
DWORD cb,
DWORD *cbNeeded);
/////////////////////////////////////////////////////////////////////
////IsProcessDeleting
//
//目的:判断进程状态是否为Deleting
//
//参数:
// Pid
// [in] 用于保存返回值的缓冲.
//
//返回值:是Deleting状态进程则返回TRUE.
//
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsProcessDeleting(DWORD Pid);
/////////////////////////////////////////////////////////////////////
////IsdEnumProcessModules
//
//目的:枚举进程模块
//
//参数:
// Pid
// [in] 进程PID
// lphModule
// [out] 用于保存返回值的缓冲.
// cb
// [in] 缓冲大小.
// lpcbNeeded
// [out] 实际返回缓冲大小.
//
//返回值:成功则返回TRUE.
//
//备注:它与系统PSAPI的EnumProcessModules几乎一样使用,注意第一个参
// 数不同,这里是Pid.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdEnumProcessModules(
DWORD Pid,
HMODULE *lphModule,
DWORD cb,
LPDWORD lpcbNeeded);
/////////////////////////////////////////////////////////////////////
////IsdQueryProcessFileName
//
//目的:由进程PID获取进程文件路径名
//
//参数:
// Pid
// [in] 进程PID
// FileName
// [out] 用于保存返回值的缓冲,宽字符串.
// len
// [in] 缓冲大小.
//
//返回值:成功则返回TRUE.
//
//备注:
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdQueryProcessFileName(
DWORD Pid,
char *FileName,
int len);
/////////////////////////////////////////////////////////////////////
////IsdGetModuleFileName
//
//目的:获取指定进程的指定模块的文件路径名
//
//参数:
// Pid
// [in] 进程PID
// hModule
// [in] 模块句柄
// lpFilename
// [out] 用于保存返回值的缓冲,宽字符串.
// nSize
// [in] 缓冲大小.
//
//返回值:成功则返回TRUE.
//
//备注:
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdGetModuleFileName(
DWORD Pid,
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize);
/////////////////////////////////////////////////////////////////////
////IsdCreateFile
//
//目的:创建或打开文件(目录也是特殊的文件)
//
//参数:
// lpFileName
// [in] 文件路径全名.
// dwDesiredAccess
// [in] 文件访问权限.
// dwShareMode
// [in] 共享模式.
// lpSecurityAttributes
// [in] 始终为NULL.
// dwCreationDisposition
// [in] 创建打开部署.
// dwFlagsAndAttributes
// [in] 标志属性.
// hTemplateFile
// [in] 始终为NULL.
//
//返回值:成功则返回打开句柄,否则返回INVALID_HANDLE_VALUE.
//
//备注:它是系统API CreateFile的子集,使用上差不多,需要注意的是:
// 1、lpSecurityAttributes、hTemplateFile不支持,应传入NULL.
// 2、只能用它来创建或打开硬盘文件.
// 3、对它来说文件访问权限dwDesiredAccess其实没有什么意义,默认
// 就有所有的权限,一般传入0就好.
// 4、传回的句柄是由IceSword维护的,并不是windows内核句柄,不能
// 用它来使用系统api.
// 6、IceSword限制了每个协件进程的句柄表大小,文件、注册表仅可打
// 开1000个句柄.
// 5、一定要传入文件路径全名.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) HANDLE IsdCreateFile(
LPCSTR lpFileName,
ULONG dwDesiredAccess,
ULONG dwShareMode,
PVOID lpSecurityAttributes,
ULONG dwCreationDisposition,
ULONG dwFlagsAndAttributes,
HANDLE hTemplateFile);
/////////////////////////////////////////////////////////////////////
////IsdFindFile
//
//目的:枚举目录
//
//参数:
// hFile
// [in] 目录句柄,由IsdCreateFile返回.
// lpFindFileData
// [out] ISD_WIN32_FIND_DATA结构指针.
// ReSet
// [in] 重置.
//
//返回值:成功则返回TRUE.
//
//备注:它将系统API FindFirstFile、FindNextFile功能集合在一起:
// 1、ReSet为TRUE则从第一个文件从头枚举.
// 2、置ReSet为FALSE重复调用IsdFindFile则可枚举hFile所指目录的所
// 有文件,请看示例.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdFindFile(
HANDLE hFile,
PISD_WIN32_FIND_DATA lpFindFileData,
BOOL ReSet);
/////////////////////////////////////////////////////////////////////
////IsdCloseHandle
//
//目的:关闭句柄
//
//参数:
// hFile
// [in] 文件或目录句柄.
//
//返回值:成功则返回TRUE.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdCloseHandle(HANDLE hFile);
/////////////////////////////////////////////////////////////////////
////IsdReadFile
//
//目的:读文件
//
//参数:
// hFile
// [in] 文件句柄.
// lpBuffer
// [out] 读缓冲.
// nNumberOfBytesToRead
// [in] 需要读取的大小.
// lpNumberOfBytesRead
// [out] 成功后返回实际读取大小.
// lpOverlapped
// [in] 始终为NULL.
//
//返回值:成功则返回TRUE.
//
//备注:它是系统API ReadFile的子集,使用上差不多,需要注意的是:
// 1、lpOverlapped不支持,应传入NULL.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdReadFile(
HANDLE hFile,
PVOID lpBuffer,
ULONG nNumberOfBytesToRead,
PULONG lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped);
/////////////////////////////////////////////////////////////////////
////IsdWriteFile
//
//目的:读文件
//
//参数:
// hFile
// [in] 文件句柄.
// lpBuffer
// [out] 写缓冲.
// nNumberOfBytesToWrite
// [in] 需要写入的大小.
// lpNumberOfBytesWritten
// [out] 成功后返回实际写入大小.
// lpOverlapped
// [in] 始终为NULL.
//
//返回值:成功则返回TRUE.
//
//备注:它是系统API WriteFile的子集,使用上差不多,需要注意的是:
// 1、lpOverlapped不支持,应传入NULL.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdWriteFile(
HANDLE hFile,
PVOID lpBuffer,
ULONG nNumberOfBytesToWrite,
PULONG lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped);
/////////////////////////////////////////////////////////////////////
////IsdSetFilePointerEx
//
//目的:设置打开文件的指针位置
//
//备注:它与系统API SetFilePointerEx用法相同,不赘述.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdSetFilePointerEx(
HANDLE hFile,
LARGE_INTEGER liDistanceToMove,
PLARGE_INTEGER lpNewFilePointer,
ULONG dwMoveMethod);
/////////////////////////////////////////////////////////////////////
////IsdGetFileSizeEx
//
//目的:设置打开文件的指针位置
//
//备注:它与系统API GetFileSizeEx用法相同,不赘述.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdGetFileSizeEx(
HANDLE hFile,
PLARGE_INTEGER lpFileSize);
/////////////////////////////////////////////////////////////////////
////IsdGetFileTime
//
//目的:设置打开文件的指针位置
//
//备注:它与系统API GetFileTime用法相同,不赘述.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdGetFileTime(
HANDLE hFile,
LPFILETIME lpCreationTime,
LPFILETIME lpLastAccessTime,
LPFILETIME lpLastWriteTime);
/////////////////////////////////////////////////////////////////////
////IsdSetFileTime
//
//目的:设置打开文件的指针位置
//
//备注:它与系统API SetFileTime用法相同,不赘述,但注意这个函数3个指
// 针都不能为空.
/////////////////////////////////////////////////////////////////////
extern "C" __declspec(dllimport) BOOL IsdSetFileTime(
HANDLE hFile,
const FILETIME *lpCreationTime,
const FILETIME *lpLastAccessTime,
const FILETIME *lpLastWriteTime);
extern "C" __declspec(dllimport) LONG IsdSetInformationFile(
HANDLE hFile,
PVOID FileInformation,
ULONG Length,
FILE_INFORMATION_CLASS FileInformationClass);
extern "C" __declspec(dllimport) LONG IsdQueryInformationFile(
HANDLE hFile,
PVOID FileInformation,
ULONG Length,
FILE_INFORMATION_CLASS FileInformationClass);
extern "C" __declspec(dllimport) INT IsdReadProcessMemory(
DWORD pid,
PVOID BaseAddress,
PVOID Buf,
UINT Len);
extern "C" __declspec(dllimport) INT IsdWriteProcessMemory(
DWORD pid,
PVOID BaseAddress,
PVOID Buf,
UINT Len);
//
////使用IsdOpenKey打开的句柄也应使用IsdCloseHandle关闭。对注册表 协件dll中暂时只导出这几个,见谅:)
////使用上比较麻烦,参考例子
//
extern "C" __declspec(dllimport) BOOL IsdOpenKey(
OUT PHANDLE KeyHandle,
IN ACCESS_MASK DesiredAccess,
IN HANDLE RootDirectory,
IN PWCHAR KeyName);
extern "C" __declspec(dllimport) NTSTATUS IsdEnumerateKey(
IN HANDLE KeyHandle,
IN ULONG Index,
IN KEY_INFORMATION_CLASS KeyInformationClass,
OUT PVOID KeyInformation,
IN ULONG Length,
IN PULONG ResultLength);
extern "C" __declspec(dllimport) NTSTATUS IsdEnumerateValueKey(
IN HANDLE KeyHandle,
IN ULONG Index,
IN KEY_VALUE_INFORMATION_CLASS KeyInformationClass,
OUT PVOID KeyInformation,
IN ULONG Length,
IN PULONG ResultLength);
#endif