本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 4769|回复: 7

为什么LoadLibrary("win32k.sys")总是会失败? [复制链接]

Rank: 2

发表于 2010-9-15 10:08:00 |显示全部楼层
昨天写了这句代码,运行后发现LoadLibrary调用失败,
错误号是487:试图访问无效的地址。
不知道为何会这样呢,怎么才能Load成功?

Rank: 5Rank: 5

发表于 2010-9-15 11:30:42 |显示全部楼层
自己map file

Rank: 2

发表于 2010-9-15 11:52:20 |显示全部楼层
也只有这个办法了,谢谢MJ指导。:)

Rank: 2

发表于 2010-9-15 14:13:07 |显示全部楼层
1.自己Copy出来LoadLibrary 你是WIN7?

Rank: 1

发表于 2010-9-17 20:49:38 |显示全部楼层
楼主好像在某群里问过......Copy出来改成dll或者exe.用LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <windows.h>
  3. #include <stdio.h>
  4. #define LIB_NAME L"win32k.dll"
  5. #define SYS_NAME L"win32k.sys"
  6. #define U_PREFIX L"\\\\\\\\?\\\\"
  7. #define U_PREFIX_SIZE (wcslen(U_PREFIX) * sizeof(WCHAR))
  8.    
  9. int main(int argc , char **argv )
  10. {
  11.     HMODULE hWin32k = 0;
  12.     PWCHAR wCurrentDir = 0;
  13.     PWCHAR wSysDir = 0;
  14.     DWORD StrSize = 0;
  15.     PWCHAR wUniNameCD = 0;
  16.     PWCHAR wUniNameSD = 0;
  17.    
  18.     StrSize = (DWORD)(sizeof(WCHAR) * (1 + wcslen(LIB_NAME) + GetCurrentDirectoryW(0,0)));
  19.     wCurrentDir = (WCHAR *)malloc(StrSize);
  20.     wUniNameCD = (WCHAR *)malloc(StrSize + U_PREFIX_SIZE);
  21.     memset(wCurrentDir, 0, StrSize);
  22.     memset(wUniNameCD, 0, StrSize + U_PREFIX_SIZE);
  23.     if(wCurrentDir && wUniNameCD){
  24.         GetCurrentDirectoryW(StrSize/sizeof(WCHAR), wCurrentDir);
  25.         wcscat(wCurrentDir, L"\\\\");
  26.         wcscat(wCurrentDir, LIB_NAME);
  27.         wcscpy(wUniNameCD, U_PREFIX);
  28.         wcscat(wUniNameCD, wCurrentDir);
  29.     }else{
  30.         if(wCurrentDir) free(wCurrentDir);
  31.         if(wUniNameCD) free(wUniNameCD);
  32.         printf("wCurrentDir malloc() failed.\\n");
  33.         return 0;
  34.     }
  35.    
  36.     StrSize = (DWORD)(sizeof(WCHAR)*(1 + wcslen(SYS_NAME) + GetSystemDirectoryW(0,0)));
  37.    
  38.     wSysDir = (WCHAR *)malloc(StrSize);
  39.     wUniNameSD = (WCHAR *)malloc(StrSize + U_PREFIX_SIZE);
  40.     memset(wSysDir, 0, StrSize);
  41.     memset(wUniNameSD, 0, StrSize + U_PREFIX_SIZE);
  42.     if(wSysDir && wUniNameSD){
  43.         GetSystemDirectoryW(wSysDir, StrSize/sizeof(WCHAR));
  44.         wcscat(wSysDir, L"\\\\");
  45.         wcscat(wSysDir, SYS_NAME);
  46.         wcscpy(wUniNameSD, U_PREFIX);
  47.         wcscat(wUniNameSD, wSysDir);
  48.     }else{
  49.         if(wSysDir) free(wSysDir);
  50.         if(wUniNameSD) free(wUniNameSD);
  51.         printf("wSysDir malloc() failed.\\n");
  52.         free(wCurrentDir);
  53.         free(wUniNameCD);
  54.         return 0;
  55.     }
  56.     wprintf(L"Copy file \\n from:\\t%s \\n to:\\t%s\\n", wUniNameSD, wUniNameCD);
  57.     if(!CopyFileW(wUniNameSD, wUniNameCD, FALSE)){
  58.         free(wCurrentDir);
  59.         free(wSysDir);
  60.         free(wUniNameSD);
  61.         free(wUniNameCD);
  62.         printf("Copy file failed with error %d\\n", GetLastError());
  63.         return 0;
  64.     }
  65.    
  66.     hWin32k = LoadLibraryExW(wCurrentDir, 0, DONT_RESOLVE_DLL_REFERENCES);
  67.     if(!hWin32k)
  68.     {
  69.         printf("Module loaded error %d",  GetLastError());
  70.         free(wCurrentDir);
  71.         free(wSysDir);
  72.         free(wUniNameSD);
  73.         free(wUniNameCD);
  74.         return 0;
  75.     }
  76.     printf("Module Loaded OK!");
  77.     FreeLibrary(hWin32k);
  78.     DeleteFileW(wUniNameCD);
  79.     free(wCurrentDir);
  80.     free(wSysDir);
  81.     free(wUniNameSD);
  82.     free(wUniNameCD);
  83.     return 0;
  84. }
复制代码

Rank: 1

发表于 2010-9-17 21:14:54 |显示全部楼层
win32k.sys用LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)是不行的

Rank: 2

发表于 2010-9-17 23:08:26 |显示全部楼层
to KiSSinGGer
谢谢你的代码,我后来用copy出来的办法解决了。
你的头像。。- -!

Rank: 1

发表于 2010-9-18 14:30:13 |显示全部楼层
多谢了,小弟也学习了。
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-6-26 15:03 , Processed in 0.023053 second(s), 8 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部