小编Art*_*tem的帖子

系统DLL的副本不起作用

我有Windows 8.1.我从E:\文件夹中的C:\ Windows\System32复制了User32.dll.首先,我已经提到,如果你只是复制粘贴,原始User32.dll的内容和User32.dll的副本是不一样的!我发现它,使用WinMerge程序.所以,我在C上写了我的程序,像这样:

void copy(FILE* input_dll)
{
    FILE* f = fopen("E:\\user32.dll", "wb");
    int size_of_base_input_dll_file;
   // Get the Size of base_file 
    fseek(input_dll, 0, SEEK_END);
    size_of_base_input_dll_file = ftell(input_dll);
    //move on a begin of dll
    fseek(input_dll, 0, SEEK_SET);
    for (int i = 0; i < size_of_base_input_dll_file; ++i)
    {
        char symbol = fgetc(input_dll);
        fputc(symbol, f);
    }
}

int main()
 {
       FILE* user32 = fopen("C:\\Windows\\System32\\user32.dll","rb");
       copy(user32);
 }
Run Code Online (Sandbox Code Playgroud)

现在WinMerge显示C:\ Windows\System32\user32.dll和E:\ user32.dll的内容相同,但文件C:\ Windows\System32\user32.dll大于E:\ user32.dll on 100 KB !!! 它怎么样?

当我尝试使用WinApi LoadLibraryA函数加载user32.dll(E:\ user32.dll)的副本时,无论是否使用我的函数副本获得user32.dll(E:\ user32.dll)的副本,它都返回NULL或者使用复制粘贴.

所以我的问题:

  1. 为什么dll的内容相同,但dll的大小不同?
  2. 为什么dll的内容相同,但是我无法使用LoadLibraryA加载E:\ user32.dll并且可以使用LoadLibraryA加载C:\ …

c dll winapi

1
推荐指数
1
解决办法
137
查看次数

标签 统计

c ×1

dll ×1

winapi ×1