mydll.dpr
上传用户:nbcables
上传日期:2007-01-11
资源大小:1243k
文件大小:3k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. //查看VC中的帮助中的File Functions
  2. library mydll;
  3. uses
  4.   SysUtils, Types, Windows,WinSock,
  5.   Classes;
  6. type
  7.   TMyAPIInfo = record
  8.   module_name:PChar;
  9.   api_name:PChar;
  10.   param_count:integer;
  11.   my_api_name:PChar;
  12.   start_pos:integer;
  13.   friend_my_api_name:PChar;
  14.   end;
  15. {$R *.res}
  16. var
  17.   myapi_info:array[1..5] of TMyAPIInfo;
  18. function mySetCurrentDirectoryA(dir:PChar):DWORD;stdcall;
  19. var
  20.   ret:LongBool;
  21.   //err:integer;
  22. begin
  23.   MessageBox(0, dir, 'mySetCurrentDirectory...', MB_OK);
  24.   ret :=SetCurrentDirectoryA(dir);
  25.   //err =GetLastError();
  26.   //加入自己的处理
  27.   //SetLastError(err);
  28.   result :=DWORD(ret);
  29. end;
  30. function mySetCurrentDirectoryW(dir:PWChar):DWORD;stdcall;
  31. var
  32.   ret:LongBool;
  33.   //err:integer;
  34. begin
  35.   MessageBoxW(0, dir, 'mySetCurrentDirectoryW...', MB_OK);
  36.   ret :=SetCurrentDirectoryW(dir);
  37.   //err =GetLastError();
  38.   //加入自己的处理
  39.   //SetLastError(err);
  40.   result :=DWORD(ret);
  41. end;
  42. // 在Win32中,OpenFile被CreateFile代替,所以打开文件时实际上调用了CreateFile
  43. function myOpenFile(fname:PChar; pofs:POFSTRUCT; style:UINT):DWORD;stdcall;
  44. var
  45.   ret:HFILE;
  46.   //err:integer;
  47. begin
  48.   MessageBox(0, fname, 'myOpenFile...', MB_OK);
  49.   ret :=OpenFile(fname, pofs^, style);
  50.   //err =GetLastError();
  51.   //加入自己的处理
  52.   //SetLastError(err);
  53.   Result := ret;
  54. end;
  55. function myCreateFileA(fname:PChar;dwDesiredAccess:DWORD;dwShareMod:DWORD;lpSecurityAttributes:PSecurityAttributes;dwCreationDisposition:DWORD;dwFlagsAndAttributes:DWORD;hTemplateFile:HFILE):DWORD;stdcall;
  56. var
  57.   ret:HFILE;
  58.   //err:integer;
  59. begin
  60.   MessageBox(0, fname, 'myCreateFileA...', MB_OK);
  61.   ret :=CreateFileA(fname, dwDesiredAccess, dwShareMod, lpSecurityAttributes,
  62. dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
  63.   //err =GetLastError();
  64.   //加入自己的处理
  65.   //SetLastError(err);
  66.   Result := ret;
  67. end;
  68. Function GetMyAPIInfo():Pointer;stdCall;
  69. begin
  70. GetMyAPIInfo :=Addr(myapi_info);
  71. end;
  72. exports
  73.   GetMyAPIInfo,
  74.   mySetCurrentDirectoryA,
  75.   mySetCurrentDirectoryW,
  76.   myOpenFile,
  77.   myCreateFileA;
  78. begin
  79.   myapi_info[1].module_name :='KERNEL32.DLL';
  80.   myapi_info[1].api_name :='SetCurrentDirectoryA';
  81.   myapi_info[1].param_count :=1;
  82.   myapi_info[1].my_api_name :='mySetCurrentDirectoryA';
  83.   myapi_info[1].start_pos :=0;
  84.   myapi_info[1].friend_my_api_name :=nil;
  85.   myapi_info[2].module_name :='KERNEL32.DLL';
  86.   myapi_info[2].api_name :='OpenFile(a,b,c)';
  87.   myapi_info[2].param_count :=3;
  88.   myapi_info[2].my_api_name :='myOpenFile';
  89.   myapi_info[2].start_pos :=0;
  90.   myapi_info[2].friend_my_api_name :=nil;
  91.   myapi_info[3].module_name :='KERNEL32.DLL';
  92.   myapi_info[3].api_name :='OpenFile(a,b,c)';
  93.   myapi_info[3].param_count :=3;
  94.   myapi_info[3].my_api_name :='myOpenFile';
  95.   myapi_info[3].start_pos :=0;
  96.   myapi_info[3].friend_my_api_name :=nil;
  97.   myapi_info[4].module_name :='KERNEL32.DLL';
  98.   myapi_info[4].api_name :='CreateFileA(1,2,3,4,5,6,7)';
  99.   myapi_info[4].param_count :=7;
  100.   myapi_info[4].my_api_name :='myCreateFileA';
  101.   myapi_info[4].start_pos :=0;
  102.   myapi_info[4].friend_my_api_name :=nil;
  103.   myapi_info[5].module_name :=nil;
  104.   myapi_info[5].api_name :=nil;
  105.   myapi_info[5].my_api_name :=nil;
  106. end.