Cooperator.h
上传用户:fjdqny
上传日期:2008-02-11
资源大小:921k
文件大小:19k
源码类别:

其他

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////
  2. //-----------------------------------------------------------------
  3. //                 Copyright (c) 2004 jfpan20000@sina.com
  4. // 
  5. //                         IceSword协件库 1.06
  6. // 
  7. //                           pjf    USTC
  8. //------------------------------------------------------------------
  9. ////////////////////////////////////////////////////////////////////
  10. #ifndef __ICE_COOPERATOR_
  11. #define __ICE_COOPERATOR_
  12. #pragma comment(lib, "IceSword.lib")
  13. typedef LONG NTSTATUS;
  14. //
  15. ////指示IsdOpenKey的RootDirectory为空
  16. //
  17. #define NULL_ROOT_DIR_HANDLE     ((HANDLE)0xF000000F)
  18. //
  19. ////历史原因,将其定义为2000,其实只用到255字节
  20. //
  21. #define DATA_BUF_LEN                    2000
  22. //
  23. ////IsdCreateFile可以创建与打开目录,但必须为dwFlagsAndAttributes指定FILE_FLAG_DIRECTORY标志
  24. //
  25. #define FILE_FLAG_DIRECTORY             0x00400000
  26. //
  27. ////用于IsdFindFile,对应于WIN32_FIND_DATA,有一点区别
  28. //
  29. typedef struct _ISD_WIN32_FIND_DATA {
  30. DWORD         dwFileAttributes; 
  31. FILETIME      ftCreationTime; 
  32. FILETIME      ftLastAccessTime; 
  33. FILETIME      ftLastWriteTime; 
  34. LARGE_INTEGER nFileSize; 
  35. LARGE_INTEGER AllocationSize; 
  36. TCHAR         cAlternateFileName[ 14 ]; 
  37. TCHAR         cFileName[ DATA_BUF_LEN ]; 
  38. } ISD_WIN32_FIND_DATA, *PISD_WIN32_FIND_DATA;
  39. //
  40. ////用于IsdSetInformationFile/IsdQueryInformationFile
  41. //
  42. typedef enum _FILE_INFORMATION_CLASS {
  43.     FileDirectoryInformation         = 1,
  44.     FileFullDirectoryInformation,   // 2
  45.     FileBothDirectoryInformation,   // 3
  46.     FileBasicInformation,           // 4  wdm
  47.     FileStandardInformation,        // 5  wdm
  48.     FileInternalInformation,        // 6
  49.     FileEaInformation,              // 7
  50.     FileAccessInformation,          // 8
  51.     FileNameInformation,            // 9
  52.     FileRenameInformation,          // 10
  53.     FileLinkInformation,            // 11
  54.     FileNamesInformation,           // 12
  55.     FileDispositionInformation,     // 13
  56.     FilePositionInformation,        // 14 wdm
  57.     FileFullEaInformation,          // 15
  58.     FileModeInformation,            // 16
  59.     FileAlignmentInformation,       // 17
  60.     FileAllInformation,             // 18
  61.     FileAllocationInformation,      // 19
  62.     FileEndOfFileInformation,       // 20 wdm
  63.     FileAlternateNameInformation,   // 21
  64.     FileStreamInformation,          // 22
  65.     FilePipeInformation,            // 23
  66.     FilePipeLocalInformation,       // 24
  67.     FilePipeRemoteInformation,      // 25
  68.     FileMailslotQueryInformation,   // 26
  69.     FileMailslotSetInformation,     // 27
  70.     FileCompressionInformation,     // 28
  71.     FileObjectIdInformation,        // 29
  72.     FileCompletionInformation,      // 30
  73.     FileMoveClusterInformation,     // 31
  74.     FileQuotaInformation,           // 32
  75.     FileReparsePointInformation,    // 33
  76.     FileNetworkOpenInformation,     // 34
  77.     FileAttributeTagInformation,    // 35
  78.     FileTrackingInformation,        // 36
  79.     FileIdBothDirectoryInformation, // 37
  80.     FileIdFullDirectoryInformation, // 38
  81.     FileValidDataLengthInformation, // 39
  82.     FileShortNameInformation,       // 40
  83.     FileMaximumInformation
  84. } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
  85. //
  86. ////注册表查询操作结构
  87. //
  88. typedef enum _KEY_INFORMATION_CLASS {
  89.     KeyBasicInformation,
  90.     KeyNodeInformation,
  91.     KeyFullInformation,
  92.     KeyNameInformation,
  93.     KeyCachedInformation,
  94.     KeyFlagsInformation
  95. } KEY_INFORMATION_CLASS;
  96. typedef struct _KEY_BASIC_INFORMATION {
  97.   LARGE_INTEGER LastWriteTime;
  98.   ULONG  TitleIndex;
  99.   ULONG  NameLength;
  100.   WCHAR  Name[1];  //  Variable-length string
  101. } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
  102. typedef enum _KEY_VALUE_INFORMATION_CLASS {
  103.     KeyValueBasicInformation,
  104.     KeyValueFullInformation,
  105.     KeyValuePartialInformation,
  106.     KeyValueFullInformationAlign64,
  107.     KeyValuePartialInformationAlign64
  108. } KEY_VALUE_INFORMATION_CLASS;
  109. typedef struct _KEY_VALUE_BASIC_INFORMATION {
  110.     ULONG   TitleIndex;
  111.     ULONG   Type;
  112.     ULONG   NameLength;
  113.     WCHAR   Name[1];            // Variable size
  114. } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
  115. typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
  116. ULONG  TitleIndex;
  117. ULONG  Type;
  118. ULONG  DataLength;
  119. UCHAR  Data[1];  //  Variable size
  120. } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
  121. typedef struct _KEY_FULL_INFORMATION {
  122. LARGE_INTEGER  LastWriteTime;
  123. ULONG  TitleIndex;
  124. ULONG  ClassOffset;
  125. ULONG  ClassLength;
  126. ULONG  SubKeys;
  127. ULONG  MaxNameLen;
  128. ULONG  MaxClassLen;
  129. ULONG  Values;
  130. ULONG  MaxValueNameLen;
  131. ULONG  MaxValueDataLen;
  132. WCHAR  Class[1];
  133. } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
  134. typedef struct _KEY_VALUE_FULL_INFORMATION {
  135. ULONG  TitleIndex;
  136. ULONG  Type;
  137. ULONG  DataOffset;
  138. ULONG  DataLength;
  139. ULONG  NameLength;
  140. WCHAR  Name[1];  //  Variable size
  141. } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
  142. //
  143. ////导出函数
  144. //
  145. /////////////////////////////////////////////////////////////////////
  146. ////IsdGetVersion
  147. //
  148. //目的:获取运行中的Icesword程序版本
  149. //
  150. //参数:
  151. //  Version 
  152. //    [out] 成功后返回版本号,如1.06版就返回0x106. 
  153. //
  154. //返回值:成功则返回TRUE.
  155. /////////////////////////////////////////////////////////////////////
  156. extern "C" __declspec(dllimport) BOOL IsdGetVersion(DWORD *Version);
  157. /////////////////////////////////////////////////////////////////////
  158. ////IsdGetIceProcId
  159. //
  160. //目的:获取运行中的Icesword进程PID
  161. //
  162. //参数:无 
  163. //
  164. //返回值:成功则返回PID.
  165. /////////////////////////////////////////////////////////////////////
  166. extern "C" __declspec(dllimport) DWORD IsdGetIceProcId();
  167. /////////////////////////////////////////////////////////////////////
  168. ////IsConnectServer
  169. //
  170. //目的:是否已经连接到IceSword进程
  171. //
  172. //参数:无 
  173. //
  174. //返回值:已连接则返回TRUE.
  175. /////////////////////////////////////////////////////////////////////
  176. extern "C" __declspec(dllimport) BOOL IsConnectServer();
  177. /////////////////////////////////////////////////////////////////////
  178. ////ConnectAndCall
  179. //
  180. //目的:连接IceSword进程并获取初始参数
  181. //
  182. //参数:无 
  183. //
  184. //返回值:成功则返回TRUE.
  185. /////////////////////////////////////////////////////////////////////
  186. extern "C" __declspec(dllimport) BOOL ConnectAndCall();
  187. /////////////////////////////////////////////////////////////////////
  188. ////IsdEnumProcesses
  189. //
  190. //目的:枚举进程
  191. //
  192. //参数:
  193. //  lpidProcess
  194. //    [out] 用于保存返回值的缓冲. 
  195. //  cb
  196. //    [in] 缓冲大小.
  197. //  cbNeeded
  198. //    [out] 实际返回缓冲大小.
  199. //
  200. //返回值:成功则返回TRUE.
  201. //
  202. //备注:1、它与系统PSAPI的EnumProcesses几乎一样使用,就不多说了.
  203. //      注意因为0号Idle进程始终不变,返回值就省略了,所以进程总数
  204. //      应该加一.
  205. //      2、它返回的PID包含状态Deleting的进程,请用IsProcessDeleting
  206. //      判断是不是该状态(返回TRUE则是).
  207. /////////////////////////////////////////////////////////////////////
  208. extern "C" __declspec(dllimport) BOOL IsdEnumProcesses(
  209.                                             DWORD *lpidProcess, 
  210.                                             DWORD cb, 
  211.                                             DWORD *cbNeeded);
  212. /////////////////////////////////////////////////////////////////////
  213. ////IsProcessDeleting
  214. //
  215. //目的:判断进程状态是否为Deleting
  216. //
  217. //参数:
  218. //  Pid
  219. //    [in] 用于保存返回值的缓冲. 
  220. //
  221. //返回值:是Deleting状态进程则返回TRUE.
  222. //
  223. /////////////////////////////////////////////////////////////////////
  224. extern "C" __declspec(dllimport) BOOL IsProcessDeleting(DWORD Pid);
  225. /////////////////////////////////////////////////////////////////////
  226. ////IsdEnumProcessModules
  227. //
  228. //目的:枚举进程模块
  229. //
  230. //参数:
  231. //  Pid
  232. //    [in] 进程PID
  233. //  lphModule
  234. //    [out] 用于保存返回值的缓冲. 
  235. //  cb
  236. //    [in] 缓冲大小.
  237. //  lpcbNeeded
  238. //    [out] 实际返回缓冲大小.
  239. //
  240. //返回值:成功则返回TRUE.
  241. //
  242. //备注:它与系统PSAPI的EnumProcessModules几乎一样使用,注意第一个参
  243. //      数不同,这里是Pid.
  244. /////////////////////////////////////////////////////////////////////
  245. extern "C" __declspec(dllimport) BOOL IsdEnumProcessModules(
  246.                                             DWORD Pid, 
  247.                                             HMODULE *lphModule, 
  248.                                             DWORD cb, 
  249.                                             LPDWORD lpcbNeeded);
  250. /////////////////////////////////////////////////////////////////////
  251. ////IsdQueryProcessFileName
  252. //
  253. //目的:由进程PID获取进程文件路径名
  254. //
  255. //参数:
  256. //  Pid
  257. //    [in] 进程PID
  258. //  FileName
  259. //    [out] 用于保存返回值的缓冲,宽字符串. 
  260. //  len
  261. //    [in] 缓冲大小.
  262. //
  263. //返回值:成功则返回TRUE.
  264. //
  265. //备注:
  266. /////////////////////////////////////////////////////////////////////
  267. extern "C" __declspec(dllimport) BOOL IsdQueryProcessFileName(
  268.                                             DWORD Pid, 
  269.                                             char *FileName, 
  270.                                             int len);
  271. /////////////////////////////////////////////////////////////////////
  272. ////IsdGetModuleFileName
  273. //
  274. //目的:获取指定进程的指定模块的文件路径名
  275. //
  276. //参数:
  277. //  Pid
  278. //    [in] 进程PID
  279. //  hModule
  280. //    [in] 模块句柄
  281. //  lpFilename
  282. //    [out] 用于保存返回值的缓冲,宽字符串. 
  283. //  nSize
  284. //    [in] 缓冲大小.
  285. //
  286. //返回值:成功则返回TRUE.
  287. //
  288. //备注:
  289. /////////////////////////////////////////////////////////////////////
  290. extern "C" __declspec(dllimport) BOOL IsdGetModuleFileName(
  291.                                             DWORD Pid, 
  292.                                             HMODULE hModule, 
  293.                                             LPTSTR lpFilename, 
  294.                                             DWORD nSize);
  295. /////////////////////////////////////////////////////////////////////
  296. ////IsdCreateFile
  297. //
  298. //目的:创建或打开文件(目录也是特殊的文件)
  299. //
  300. //参数:
  301. //  lpFileName
  302. //    [in] 文件路径全名. 
  303. //  dwDesiredAccess
  304. //    [in] 文件访问权限.
  305. //  dwShareMode
  306. //    [in] 共享模式.
  307. //  lpSecurityAttributes
  308. //    [in] 始终为NULL.
  309. //  dwCreationDisposition
  310. //    [in] 创建打开部署.
  311. //  dwFlagsAndAttributes
  312. //    [in] 标志属性.
  313. //  hTemplateFile
  314. //    [in] 始终为NULL.
  315. //
  316. //返回值:成功则返回打开句柄,否则返回INVALID_HANDLE_VALUE.
  317. //
  318. //备注:它是系统API CreateFile的子集,使用上差不多,需要注意的是:
  319. //    1、lpSecurityAttributes、hTemplateFile不支持,应传入NULL.
  320. //    2、只能用它来创建或打开硬盘文件.
  321. //    3、对它来说文件访问权限dwDesiredAccess其实没有什么意义,默认
  322. //       就有所有的权限,一般传入0就好.
  323. //    4、传回的句柄是由IceSword维护的,并不是windows内核句柄,不能
  324. //       用它来使用系统api.
  325. //    6、IceSword限制了每个协件进程的句柄表大小,文件、注册表仅可打
  326. //       开1000个句柄.
  327. //    5、一定要传入文件路径全名.
  328. /////////////////////////////////////////////////////////////////////
  329. extern "C" __declspec(dllimport) HANDLE IsdCreateFile(
  330.                                             LPCSTR lpFileName,
  331.                                             ULONG dwDesiredAccess,
  332.                                             ULONG dwShareMode,
  333.                                             PVOID lpSecurityAttributes,
  334.                                             ULONG dwCreationDisposition,
  335.                                             ULONG dwFlagsAndAttributes,
  336.                                             HANDLE hTemplateFile);
  337. /////////////////////////////////////////////////////////////////////
  338. ////IsdFindFile
  339. //
  340. //目的:枚举目录
  341. //
  342. //参数:
  343. //  hFile
  344. //    [in] 目录句柄,由IsdCreateFile返回. 
  345. //  lpFindFileData
  346. //    [out] ISD_WIN32_FIND_DATA结构指针.
  347. //  ReSet
  348. //    [in] 重置.
  349. //
  350. //返回值:成功则返回TRUE.
  351. //
  352. //备注:它将系统API FindFirstFile、FindNextFile功能集合在一起:
  353. //    1、ReSet为TRUE则从第一个文件从头枚举.
  354. //    2、置ReSet为FALSE重复调用IsdFindFile则可枚举hFile所指目录的所
  355. //       有文件,请看示例.
  356. /////////////////////////////////////////////////////////////////////
  357. extern "C" __declspec(dllimport) BOOL IsdFindFile(
  358.                                             HANDLE hFile,
  359.                                             PISD_WIN32_FIND_DATA lpFindFileData,
  360.                                             BOOL ReSet);
  361. /////////////////////////////////////////////////////////////////////
  362. ////IsdCloseHandle
  363. //
  364. //目的:关闭句柄
  365. //
  366. //参数:
  367. //  hFile 
  368. //    [in] 文件或目录句柄. 
  369. //
  370. //返回值:成功则返回TRUE.
  371. /////////////////////////////////////////////////////////////////////
  372. extern "C" __declspec(dllimport) BOOL IsdCloseHandle(HANDLE hFile);
  373. /////////////////////////////////////////////////////////////////////
  374. ////IsdReadFile
  375. //
  376. //目的:读文件
  377. //
  378. //参数:
  379. //  hFile
  380. //    [in] 文件句柄. 
  381. //  lpBuffer
  382. //    [out] 读缓冲.
  383. //  nNumberOfBytesToRead
  384. //    [in] 需要读取的大小.
  385. //  lpNumberOfBytesRead
  386. //    [out] 成功后返回实际读取大小.
  387. //  lpOverlapped
  388. //    [in] 始终为NULL.
  389. //
  390. //返回值:成功则返回TRUE.
  391. //
  392. //备注:它是系统API ReadFile的子集,使用上差不多,需要注意的是:
  393. //    1、lpOverlapped不支持,应传入NULL.
  394. /////////////////////////////////////////////////////////////////////
  395. extern "C" __declspec(dllimport) BOOL IsdReadFile(
  396.                                             HANDLE hFile,
  397.                                             PVOID lpBuffer,
  398.                                             ULONG nNumberOfBytesToRead,
  399.                                             PULONG lpNumberOfBytesRead,
  400.                                             LPOVERLAPPED lpOverlapped);
  401. /////////////////////////////////////////////////////////////////////
  402. ////IsdWriteFile
  403. //
  404. //目的:读文件
  405. //
  406. //参数:
  407. //  hFile
  408. //    [in] 文件句柄. 
  409. //  lpBuffer
  410. //    [out] 写缓冲.
  411. //  nNumberOfBytesToWrite
  412. //    [in] 需要写入的大小.
  413. //  lpNumberOfBytesWritten
  414. //    [out] 成功后返回实际写入大小.
  415. //  lpOverlapped
  416. //    [in] 始终为NULL.
  417. //
  418. //返回值:成功则返回TRUE.
  419. //
  420. //备注:它是系统API WriteFile的子集,使用上差不多,需要注意的是:
  421. //    1、lpOverlapped不支持,应传入NULL.
  422. /////////////////////////////////////////////////////////////////////
  423. extern "C" __declspec(dllimport) BOOL IsdWriteFile(
  424.                                             HANDLE hFile,
  425.                                             PVOID lpBuffer,
  426.                                             ULONG nNumberOfBytesToWrite,
  427.                                             PULONG lpNumberOfBytesWritten,
  428.                                             LPOVERLAPPED lpOverlapped);
  429. /////////////////////////////////////////////////////////////////////
  430. ////IsdSetFilePointerEx
  431. //
  432. //目的:设置打开文件的指针位置
  433. //
  434. //备注:它与系统API SetFilePointerEx用法相同,不赘述.
  435. /////////////////////////////////////////////////////////////////////
  436. extern "C" __declspec(dllimport) BOOL IsdSetFilePointerEx(
  437.                                             HANDLE hFile,
  438.                                             LARGE_INTEGER liDistanceToMove,
  439.                                             PLARGE_INTEGER lpNewFilePointer,
  440.                                             ULONG dwMoveMethod);
  441. /////////////////////////////////////////////////////////////////////
  442. ////IsdGetFileSizeEx
  443. //
  444. //目的:设置打开文件的指针位置
  445. //
  446. //备注:它与系统API GetFileSizeEx用法相同,不赘述.
  447. /////////////////////////////////////////////////////////////////////
  448. extern "C" __declspec(dllimport) BOOL IsdGetFileSizeEx(
  449.                                             HANDLE hFile,
  450.                                             PLARGE_INTEGER lpFileSize);
  451. /////////////////////////////////////////////////////////////////////
  452. ////IsdGetFileTime
  453. //
  454. //目的:设置打开文件的指针位置
  455. //
  456. //备注:它与系统API GetFileTime用法相同,不赘述.
  457. /////////////////////////////////////////////////////////////////////
  458. extern "C" __declspec(dllimport) BOOL IsdGetFileTime(
  459.                                             HANDLE hFile,
  460.                                             LPFILETIME lpCreationTime,
  461.                                             LPFILETIME lpLastAccessTime,
  462.                                             LPFILETIME lpLastWriteTime);
  463. /////////////////////////////////////////////////////////////////////
  464. ////IsdSetFileTime
  465. //
  466. //目的:设置打开文件的指针位置
  467. //
  468. //备注:它与系统API SetFileTime用法相同,不赘述,但注意这个函数3个指
  469. //      针都不能为空.
  470. /////////////////////////////////////////////////////////////////////
  471. extern "C" __declspec(dllimport) BOOL IsdSetFileTime(
  472.                                             HANDLE hFile,
  473.                                             const FILETIME *lpCreationTime,
  474.                                             const FILETIME *lpLastAccessTime,
  475.                                             const FILETIME *lpLastWriteTime);
  476. extern "C" __declspec(dllimport) LONG IsdSetInformationFile(
  477.                                             HANDLE hFile,
  478.                                             PVOID  FileInformation,
  479.                                             ULONG  Length,
  480.                                             FILE_INFORMATION_CLASS  FileInformationClass);
  481. extern "C" __declspec(dllimport) LONG IsdQueryInformationFile(
  482.                                             HANDLE hFile,
  483.                                             PVOID  FileInformation,
  484.                                             ULONG  Length,
  485.                                             FILE_INFORMATION_CLASS  FileInformationClass);
  486. extern "C" __declspec(dllimport) INT IsdReadProcessMemory(
  487.                                             DWORD pid, 
  488.                                             PVOID BaseAddress, 
  489.                                             PVOID Buf, 
  490.                                             UINT Len);
  491. extern "C" __declspec(dllimport) INT IsdWriteProcessMemory(
  492.                                             DWORD pid, 
  493.                                             PVOID BaseAddress, 
  494.                                             PVOID Buf, 
  495.                                             UINT Len);
  496. //
  497. ////使用IsdOpenKey打开的句柄也应使用IsdCloseHandle关闭。对注册表 协件dll中暂时只导出这几个,见谅:)
  498. ////使用上比较麻烦,参考例子
  499. //
  500. extern "C" __declspec(dllimport) BOOL IsdOpenKey(
  501.                                             OUT PHANDLE KeyHandle,
  502.                                             IN ACCESS_MASK DesiredAccess,
  503.                                             IN HANDLE RootDirectory,
  504.                                             IN PWCHAR KeyName);
  505. extern "C" __declspec(dllimport) NTSTATUS IsdEnumerateKey(
  506.                                             IN HANDLE KeyHandle,
  507.                                             IN ULONG Index,
  508.                                             IN KEY_INFORMATION_CLASS KeyInformationClass,
  509.                                             OUT PVOID KeyInformation,
  510.                                             IN ULONG Length,
  511.                                             IN PULONG ResultLength);
  512. extern "C" __declspec(dllimport) NTSTATUS IsdEnumerateValueKey(
  513.                                             IN HANDLE KeyHandle,
  514.                                             IN ULONG Index,
  515.                                             IN KEY_VALUE_INFORMATION_CLASS KeyInformationClass,
  516.                                             OUT PVOID KeyInformation,
  517.                                             IN ULONG Length,
  518.                                             IN PULONG ResultLength);
  519. #endif