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

钩子与API截获

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdarg.h>
  4. #include "util.h"
  5. int GetFilePath(char *fname, char *path)
  6. {
  7. *path =0;
  8. char *p =fname+strlen(fname);
  9. while(p > fname)
  10. {
  11. if(*p =='\' || *p =='//')
  12. {
  13. strncpy(path,  fname, p-fname);
  14. path[p-fname] =0;
  15. return 0;
  16. }
  17. p--;
  18. }
  19. return -1;
  20. }
  21. void WriteLog(char *fmt,...)
  22. {
  23. va_list args;
  24. char modname[200];
  25. char temp[5000];
  26. HANDLE hFile;
  27. GetModuleFileName(NULL, modname, sizeof(modname));
  28. if((hFile =CreateFile("c:\hookapi.log", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) <0)
  29. {
  30. return;
  31. }
  32. int pos = SetFilePointer (hFile, 0, NULL, FILE_END);
  33. if (pos != -1) // Test for failure
  34. wsprintf(temp, "%s:", modname);
  35. DWORD dw;
  36. WriteFile(hFile, temp, strlen(temp), &dw, NULL);
  37. va_start(args,fmt);
  38. vsprintf(temp, fmt, args);
  39. va_end(args);
  40. WriteFile(hFile, temp, strlen(temp), &dw, NULL);
  41. wsprintf(temp, "rn");
  42. WriteFile(hFile, temp, strlen(temp), &dw, NULL);
  43. }
  44. CloseHandle(hFile);
  45. }
  46. void WriteLog2(char *fname, char *fmt,...)
  47. {
  48. va_list args;
  49. char modname[200];
  50. char temp[5000];
  51. HANDLE hFile;
  52. GetModuleFileName(NULL, modname, sizeof(modname));
  53. if((hFile =CreateFile(fname, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) <0)
  54. {
  55. return;
  56. }
  57. _llseek((HFILE)hFile, 0, SEEK_END);
  58. wsprintf(temp, "%s:", modname);
  59. DWORD dw;
  60. WriteFile(hFile, temp, strlen(temp), &dw, NULL);
  61. va_start(args,fmt);
  62. vsprintf(temp, fmt, args);
  63. va_end(args);
  64. WriteFile(hFile, temp, strlen(temp), &dw, NULL);
  65. wsprintf(temp, "rn");
  66. WriteFile(hFile, temp, strlen(temp), &dw, NULL);
  67. _lclose((HFILE)hFile);
  68. }
  69. char * GetErrString(char *msg, DWORD msg_size, DWORD err)
  70. {
  71. *msg =0;
  72. if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS,
  73. NULL, err, 0, msg, msg_size, NULL))
  74. return NULL;
  75. return msg;
  76. }