С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
#1

GetModuleFileNameEx ошибка - C++

31.07.2012, 22:14. Просмотров 1304. Ответов 2
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
#include <windows.h>
#include <time.h>
#include "main.h"
#pragma comment(lib,"Psapi")
using namespace std;
 
//global
ULONG crc_tab[256];
 
ULONG getHash(DWORD id)
{
    PIMAGE_OPTIONAL_HEADER optionalHeader;
    PIMAGE_DOS_HEADER dosHeader;
    WCHAR lpFileName[MAX_PATH];
    DWORD simCount = sizeof(lpFileName);
    PVOID Buffer;
    HANDLE exeObj;
    HANDLE pid;
    ULONG hash;
 
    InitHashTable();
    pid = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE , id);
    GetModuleFileNameEx(pid, NULL, lpFileName, MAX_PATH);
    //QueryFullProcessImageName(pid, 0, lpFileName, &simCount);
    CloseHandle(pid);
    exeObj = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL);
    Buffer = malloc(1024);
    ReadFile(exeObj, Buffer, 1024, &simCount, NULL);
    CloseHandle(exeObj);
    dosHeader = (PIMAGE_DOS_HEADER)Buffer;
    optionalHeader = (PIMAGE_OPTIONAL_HEADER)((UCHAR *)Buffer + dosHeader->e_lfanew + 24);
 
    if (optionalHeader == NULL)
    {
        return 0;
    }
    hash = chksum_crc32 ((UCHAR *) optionalHeader, sizeof(IMAGE_OPTIONAL_HEADER));
    free(Buffer);
    return hash;
}
 
ULONG chksum_crc32 (UCHAR *block, USHORT length)
{
   ULONG crc, i;
 
   crc = 0xFFFFFFFF;
   for (i = 0; i < length; i++)
   {
      crc = ((crc >> 8) & 0x00FFFFFF) ^ crc_tab[(crc ^ *block++) & 0xFF];
   }
   return (crc ^ 0xFFFFFFFF);
}
 
void InitHashTable ()
{
   ULONG crc, poly;
   SHORT i, j;
 
   poly = 0xEDB88320L;
   for (i = 0; i < 256; i++)
   {
      crc = i;
      for (j = 8; j > 0; j--)
      {
     if (crc & 1)
     {
        crc = (crc >> 1) ^ poly;
     }
     else
     {
        crc >>= 1;
     }
      }
      crc_tab[i] = crc;
   }
}
 
void log(char* str)
{
    SYSTEMTIME sm;
    char* buf = new char[16];
 
    GetLocalTime(&sm);
    FILE* file = fopen("dllLog.txt", "a");
    buf = itoa(sm.wYear, buf, 10);
    fwrite(buf, strlen(buf), 1, file);
    fwrite(".", 1, 1, file);
    itoa(sm.wMonth, buf, 10);
    fwrite(buf, strlen(buf), 1, file);
    fwrite(".", 1, 1, file);
    itoa(sm.wDay, buf, 10);
    fwrite(buf, strlen(buf), 1, file);
    fwrite("  ", 2, 1, file);
    itoa(sm.wHour, buf, 10);
    fwrite(buf, strlen(buf), 1, file);
    fwrite(":", 1, 1, file);
    itoa(sm.wMinute, buf, 10);
    fwrite(buf, strlen(buf), 1, file);
    fwrite(":", 1, 1, file);
    itoa(sm.wSecond, buf, 10);
    fwrite(buf, strlen(buf), 1, file);
    fwrite(" :  ", 4, 1, file);
    fwrite(str,strlen(str), 1, file);
    fclose(file);
    delete[] buf;
}
 
int main()
{
    //HINSTANCE hMyDll;
 
    DWORD id = GetCurrentProcessId();
    /*//HANDLE pid = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE , id);
    if((hMyDll = LoadLibrary(L"ProcMon")) == NULL) return 1;
    typedef void (*setuphFunc)();
    setuphFunc setup = (setuphFunc)GetProcAddress(hMyDll,"setup");
    setup();
    typedef int (*SODhFunc)();
    SODhFunc SOD = (SODhFunc)GetProcAddress(hMyDll,"SOD");
    SOD();
    typedef ULONG (*getHashFunc)(DWORD);
    getHashFunc getHash = (getHashFunc)GetProcAddress(hMyDll,"getHash");*/
    ULONG hash = getHash(id);
    log("test string\n");
    log("start\n");
    log("stop\n");
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//.h
#include <windows.h>
 
 
WINBASEAPI BOOL WINAPI QueryFullProcessImageName(
  __in     HANDLE hProcess,
  __in     DWORD dwFlags,
  __out    LPTSTR lpExeName,
  __inout  PDWORD lpdwSize
);
WINBASEAPI __out HANDLE WINAPI GetCurrentProcess(void);
WINBASEAPI HANDLE WINAPI OpenProcess(
  __in  DWORD dwDesiredAccess,
  __in  BOOL bInheritHandle,
  __in  DWORD dwProcessId
);
WINBASEAPI HANDLE WINAPI CreateFile(
  __in      LPCTSTR lpFileName,
  __in      DWORD dwDesiredAccess,
  __in      DWORD dwShareMode,
  __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  __in      DWORD dwCreationDisposition,
  __in      DWORD dwFlagsAndAttributes,
  __in_opt  HANDLE hTemplateFile
);
WINBASEAPI BOOL WINAPI ReadFile(
  __in         HANDLE hFile,
  __out        LPVOID lpBuffer,
  __in         DWORD nNumberOfBytesToRead,
  __out_opt    LPDWORD lpNumberOfBytesRead,
  __inout_opt  LPOVERLAPPED lpOverlapped
);
WINBASEAPI PIMAGE_NT_HEADERS WINAPI ImageNtHeader(
  __in  PVOID ImageBase
);
WINBASEAPI DWORD WINAPI GetModuleFileNameEx(
  __in      HANDLE hProcess,
  __in_opt  HMODULE hModule,
  __out     LPTSTR lpFilename,
  __in      DWORD nSize
);
ULONG chksum_crc32 (UCHAR *, USHORT);
void InitHashTable ();
выдает ошибку :

1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) unsigned long __stdcall GetModuleFileNameEx(void *,struct HINSTANCE__ *,wchar_t *,unsigned long)" (__imp_?GetModuleFileNameEx@@YGKPAXPAUHINSTANCE__@@PA_WK@Z) referenced in function "unsigned long __cdecl getHash(unsigned long)" (?getHash@@YAKK@Z)

подключения #pragma comment(lib,"Psapi") не помогло
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2012, 22:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос GetModuleFileNameEx ошибка (C++):

Ошибка GetModuleFileNameEx не получает путь к exe от MSTSC - C++ WinAPI
Не могу вывести на экран путь от MSTSC либо я с обработкой что то намудрил либо он тоже считается системным либо еще что нибудь подскажите...

GetModuleFileNameEx выдает не тот адрес - C++ WinAPI
Работаю в QT. В общем трабл, делаю антивирусный монитор, и думал сделать фишечку, чтобы прога выводила Id процесса, адрес зараженного...

Реализация QueryFullProcessImageNameW и GetModuleFileNameEx в одном проекте - Delphi
Здравствуйте ув. форумчане! Так сегодняшняя проблема в функциях которые позволяют получить пути до запущенных процессов... 1)...

IIS- asp ошибка: HTTP 500.100 - Внутренняя ошибка сервера - ошибка ASP Internet Information Services - C# ASP.NET
Привет! Конфигурация win2000pro sp2, стандартный IIS, IE 5. При попытке обратиться к сценарию(asp) получаю ошибку: &lt;пропуск&gt; ......

1C 8.x Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка записи! - 1С
Доброго всем времени суток! подскажи пожалуйста как исправить ошибку: Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове...

Ошибка при добавлении в файл. Ошибка 101: Ошибка записи на диск (Error 101: Disk write error). - Turbo Pascal
Здравствуйте, возникла проблема такого плана. Нужно произвести добавление записи в файл, но после успешного создания и чтения вылазиет...

2
insolent
826 / 344 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
01.08.2012, 01:13 #2
balrak, может быть #pragma comment(lib,"Psapi.lib")
0
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
01.08.2012, 13:31  [ТС] #3
insolent, на сколько я знаю
то нет разницы
но я проверю

Добавлено через 1 минуту
Нет
не помогло

Добавлено через 12 часов 5 минут
Всем спасибо за помощь
Проблема была в том что у меня windows 8
и на ней уже не поддерживается эта функция
на XP нормально работает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2012, 13:31
Привет! Вот еще темы с ответами:

Ошибка разбора XML/ Ошибка при вызове метода контекста (Прочитать) - 1С
1C 8.2 Документооборот КОРП 1.2 Текст ошибки {ОбщийМодуль.АвтозаполнениеШаблоновФайловКлиентСервер.Модуль(616)}: Ошибка при вызове...

Ошибка HTTP 500 - внутреняя ошибка сервера при отправке почты. - C# ASP.NET
Я пытаюсь отправить почту и присоединяю к ней письма Вот часть страницы Dim myMail Set myMail = CreateObject('CDONTS.NewMail') ...

ASP: Response.Redirect - не работает, ошибка `500 - Внутренняя ошибка сервера' - C# ASP.NET
Всем привет! Есть в ASP-сраничке такой код: Response.Redirect 'page1.asp?ReturnTo=page2.asp' Эта конструкция работала на IIS 4,...

Interbase Ошибка SQL запроса , в базе работает, а через IBQuery в Delphi ошибка - Delphi БД
В Combobox загружены имена организаций. Нужно выполнить запрос на вывод всех полей таблицы организаций при выборе имени в Combobox. При...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.