graber
asked on
importing psapi.dll functionality
I have been attempting to use __cdecspl(dllimport) to use psapi functionality with no luck. According to what documentation I have been able to gather this "should" work. Any Ideas guys?
#include <afxwin.h>
#include <stdio.h>
typedef struct _MODULEINFO {
LPVOID lpBaseOfDll;
DWORD SizeOfImage;
LPVOID EntryPoint;
} MODULEINFO, *LPMODULEINFO;
typedef struct _PSAPI_WS_WATCH_INFORMATIO N {
LPVOID FaultingPc;
LPVOID FaultingVa;
} PSAPI_WS_WATCH_INFORMATION , *PPSAPI_WS_WATCH_INFORMATI ON;
// Structure for GetProcessMemoryInfo()
typedef struct _PROCESS_MEMORY_COUNTERS {
DWORD cb;
DWORD PageFaultCount;
DWORD PeakWorkingSetSize;
DWORD WorkingSetSize;
DWORD QuotaPeakPagedPoolUsage;
DWORD QuotaPagedPoolUsage;
DWORD QuotaPeakNonPagedPoolUsage ;
DWORD QuotaNonPagedPoolUsage;
DWORD PagefileUsage;
DWORD PeakPagefileUsage;
} PROCESS_MEMORY_COUNTERS;
typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
#ifdef UNICODE
#define GetModuleBaseName GetModuleBaseNameW
#define GetModuleFileNameEx GetModuleFileNameExW
#define GetMappedFilenameEx GetMappedFilenameExW
#define GetDeviceDriverBaseName GetDeviceDriverBaseNameW
#define GetDeviceDriverFileName GetDeviceDriverFileNameW
#else
#define GetModuleBaseName GetModuleBaseNameA
#define GetModuleFileNameEx GetModuleFileNameExA
#define GetMappedFilenameEx GetMappedFilenameExA
#define GetDeviceDriverBaseName GetDeviceDriverBaseNameA
#define GetDeviceDriverFileName GetDeviceDriverFileNameA
#endif // !UNICODE
__declspec(dllimport) BOOL EnumProcesses(DWORD *lpidProcess, DWORD bb, DWORD *cbNeeded);
__declspec(dllimport) BOOL EnumProcessModules(HANDLE hProcess, HMODULE *lphModule, DWORD cb, LPDWORD lpcbNeeded);
__declspec(dllimport) DWORD GetModuleBaseNameA(HANDLE hProcess, HMODULE hModule, LPSTR lpBaseName, DWORD nSize);
__declspec(dllimport) DWORD GetModuleBaseNameW(HANDLE hProcess, HMODULE hModule, LPWSTR lpBaseName, DWORD nSize);
__declspec(dllimport) DWORD GetModuleFileNameExA(HANDL E hProcess, HMODULE hModule, LPSTR lpFilename, DWORD nSize);
__declspec(dllimport) DWORD GetModuleFileNameExW(HANDL E hProcess, HMODULE hModule, LPWSTR lpFilename, DWORD nSize);
__declspec(dllimport) BOOL GetModuleInformation(HANDL E hProcess, HMODULE hModule, LPMODULEINFO lpmodinfo, DWORD cb);
__declspec(dllimport) BOOL EmptyWorkingSet(HANDLE hProcess);
__declspec(dllimport) BOOL QueryWorkingSet(HANDLE hProcess, PVOID pv, DWORD cb);
__declspec(dllimport) BOOL InitializeProcessForWsWatc h(HANDLE hProcess);
__declspec(dllimport) BOOL GetWsChanges(HANDLE hProcess, PPSAPI_WS_WATCH_INFORMATIO N lpWatchInfo, DWORD cb);
__declspec(dllimport) DWORD GetMappedFileNameW(HANDLE hProcess, LPVOID lpv, LPWSTR lpFilename, DWORD nSize);
__declspec(dllimport) DWORD GetMappedFileNameA(HANDLE hProcess, LPVOID lpv, LPSTR lpFilename, DWORD nSize);
__declspec(dllimport) BOOL EnumDeviceDrivers(LPVOID *lpImageBase, DWORD cb, LPDWORD lpcbNeeded);
__declspec(dllimport) DWORD GetDeviceDriverBaseNameA(L PVOID ImageBase, LPSTR lpBaseName, DWORD nSize);
__declspec(dllimport) DWORD GetDeviceDriverBaseNameW(L PVOID ImageBase,LPWSTR lpBaseName,DWORD nSize);
__declspec(dllimport) DWORD GetDeviceDriverFileNameA(L PVOID ImageBase, LPSTR lpFilename, DWORD nSize);
__declspec(dllimport) DWORD GetDeviceDriverFileNameW(L PVOID ImageBase, LPWSTR lpFilename, DWORD nSize);
__declspec(dllimport) BOOL GetProcessMemoryInfo(HANDL E Process, PPROCESS_MEMORY_COUNTERS ppsmemCounters, DWORD cb);
/*void main()
{
DWORD aDword[1024], cbNeeded, cProcesses;
HINSTANCE hInstance=LoadLibrary("psa pi");
CString sProcess="EnumProcesses";
FARPROC fProc=GetProcAddress(hInst ance, sProcess);
}*/
void PrintModules( DWORD processID )
{
HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;
// Print the process identifier.
printf( "\nProcess ID: %u\n", processID );
// Get a list of all the modules in this process.
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
if( EnumProcessModules(hProces s, hMods, sizeof(hMods), &cbNeeded))
{
for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
{
char szModName[MAX_PATH];
// Get the full path to the module's file.
if ( GetModuleFileNameEx( hProcess, hMods[i], szModName,
sizeof(szModName)))
{
// Print the module name and handle value.
printf("\t%s (0x%08X)\n", szModName, hMods[i] );
}
}
}
CloseHandle( hProcess );
}
void main( )
{
// Get the list of process identifiers.
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;
// Calculate how many process identifiers were returned.
cProcesses = cbNeeded / sizeof(DWORD);
// Print the name of the modules for each process.
for ( i = 0; i < cProcesses; i++ )
PrintModules( aProcesses[i] );
}
Linking...
main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) unsigned long __cdecl GetModuleFileNameExA(void *,struct HINSTANCE__ *,char *,unsigned long)" (__imp_?GetModuleFileNameE xA@@YAKPAX PAUHINSTAN CE__@@PADK @Z)
main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl EnumProcessModules(void *,struct HINSTANCE__ * *,unsigned long,unsigned long *)" (__imp_?EnumProcessModules @@YAHPAXPA PAUHINSTAN CE__@@KPAK @Z)
main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl EnumProcesses(unsigned long *,unsigned long,unsigned long *)" (__imp_?EnumProcesses@@YAH PAKK0@Z)
Debug/EnumProcess.exe : fatal error LNK1120: 3 unresolved externals
#include <afxwin.h>
#include <stdio.h>
typedef struct _MODULEINFO {
LPVOID lpBaseOfDll;
DWORD SizeOfImage;
LPVOID EntryPoint;
} MODULEINFO, *LPMODULEINFO;
typedef struct _PSAPI_WS_WATCH_INFORMATIO
LPVOID FaultingPc;
LPVOID FaultingVa;
} PSAPI_WS_WATCH_INFORMATION
// Structure for GetProcessMemoryInfo()
typedef struct _PROCESS_MEMORY_COUNTERS {
DWORD cb;
DWORD PageFaultCount;
DWORD PeakWorkingSetSize;
DWORD WorkingSetSize;
DWORD QuotaPeakPagedPoolUsage;
DWORD QuotaPagedPoolUsage;
DWORD QuotaPeakNonPagedPoolUsage
DWORD QuotaNonPagedPoolUsage;
DWORD PagefileUsage;
DWORD PeakPagefileUsage;
} PROCESS_MEMORY_COUNTERS;
typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
#ifdef UNICODE
#define GetModuleBaseName GetModuleBaseNameW
#define GetModuleFileNameEx GetModuleFileNameExW
#define GetMappedFilenameEx GetMappedFilenameExW
#define GetDeviceDriverBaseName GetDeviceDriverBaseNameW
#define GetDeviceDriverFileName GetDeviceDriverFileNameW
#else
#define GetModuleBaseName GetModuleBaseNameA
#define GetModuleFileNameEx GetModuleFileNameExA
#define GetMappedFilenameEx GetMappedFilenameExA
#define GetDeviceDriverBaseName GetDeviceDriverBaseNameA
#define GetDeviceDriverFileName GetDeviceDriverFileNameA
#endif // !UNICODE
__declspec(dllimport) BOOL EnumProcesses(DWORD *lpidProcess, DWORD bb, DWORD *cbNeeded);
__declspec(dllimport) BOOL EnumProcessModules(HANDLE hProcess, HMODULE *lphModule, DWORD cb, LPDWORD lpcbNeeded);
__declspec(dllimport) DWORD GetModuleBaseNameA(HANDLE hProcess, HMODULE hModule, LPSTR lpBaseName, DWORD nSize);
__declspec(dllimport) DWORD GetModuleBaseNameW(HANDLE hProcess, HMODULE hModule, LPWSTR lpBaseName, DWORD nSize);
__declspec(dllimport) DWORD GetModuleFileNameExA(HANDL
__declspec(dllimport) DWORD GetModuleFileNameExW(HANDL
__declspec(dllimport) BOOL GetModuleInformation(HANDL
__declspec(dllimport) BOOL EmptyWorkingSet(HANDLE hProcess);
__declspec(dllimport) BOOL QueryWorkingSet(HANDLE hProcess, PVOID pv, DWORD cb);
__declspec(dllimport) BOOL InitializeProcessForWsWatc
__declspec(dllimport) BOOL GetWsChanges(HANDLE hProcess, PPSAPI_WS_WATCH_INFORMATIO
__declspec(dllimport) DWORD GetMappedFileNameW(HANDLE hProcess, LPVOID lpv, LPWSTR lpFilename, DWORD nSize);
__declspec(dllimport) DWORD GetMappedFileNameA(HANDLE hProcess, LPVOID lpv, LPSTR lpFilename, DWORD nSize);
__declspec(dllimport) BOOL EnumDeviceDrivers(LPVOID *lpImageBase, DWORD cb, LPDWORD lpcbNeeded);
__declspec(dllimport) DWORD GetDeviceDriverBaseNameA(L
__declspec(dllimport) DWORD GetDeviceDriverBaseNameW(L
__declspec(dllimport) DWORD GetDeviceDriverFileNameA(L
__declspec(dllimport) DWORD GetDeviceDriverFileNameW(L
__declspec(dllimport) BOOL GetProcessMemoryInfo(HANDL
/*void main()
{
DWORD aDword[1024], cbNeeded, cProcesses;
HINSTANCE hInstance=LoadLibrary("psa
CString sProcess="EnumProcesses";
FARPROC fProc=GetProcAddress(hInst
}*/
void PrintModules( DWORD processID )
{
HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;
// Print the process identifier.
printf( "\nProcess ID: %u\n", processID );
// Get a list of all the modules in this process.
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
if( EnumProcessModules(hProces
{
for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
{
char szModName[MAX_PATH];
// Get the full path to the module's file.
if ( GetModuleFileNameEx( hProcess, hMods[i], szModName,
sizeof(szModName)))
{
// Print the module name and handle value.
printf("\t%s (0x%08X)\n", szModName, hMods[i] );
}
}
}
CloseHandle( hProcess );
}
void main( )
{
// Get the list of process identifiers.
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;
// Calculate how many process identifiers were returned.
cProcesses = cbNeeded / sizeof(DWORD);
// Print the name of the modules for each process.
for ( i = 0; i < cProcesses; i++ )
PrintModules( aProcesses[i] );
}
Linking...
main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) unsigned long __cdecl GetModuleFileNameExA(void *,struct HINSTANCE__ *,char *,unsigned long)" (__imp_?GetModuleFileNameE
main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl EnumProcessModules(void *,struct HINSTANCE__ * *,unsigned long,unsigned long *)" (__imp_?EnumProcessModules
main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl EnumProcesses(unsigned long *,unsigned long,unsigned long *)" (__imp_?EnumProcesses@@YAH
Debug/EnumProcess.exe : fatal error LNK1120: 3 unresolved externals
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER