windows-nt/Source/XPSP1/NT/sdktools/debuggers/imagehlp/imhlptst.c
2020-09-26 16:20:57 +08:00

184 lines
4.5 KiB
C

#include <windows.h>
#include <imagehlp.h>
#include <stdio.h>
#include <stdlib.h>
void __cdecl main(void);
void foo (void);
void foo1(void);
void foo2(void);
void foo3(void);
void WalkTheStack(void);
void TestFindExecutableImage( void );
void __cdecl
main(void)
{
puts("Entering main");
foo();
TestFindExecutableImage();
puts("Ending main");
}
void
TestFindExecutableImage(
void
)
{
HANDLE Handle;
CHAR szCorrectName[MAX_PATH];
CHAR szActualName [MAX_PATH];
CHAR szTestPath[MAX_PATH];
CHAR szDrive[_MAX_DRIVE];
CHAR szDir[_MAX_DIR];
CHAR *FilePart;
DWORD ErrorCount = 0;
_splitpath(_pgmptr, szDrive, szDir, NULL, NULL);
strcpy(szTestPath, szDrive);
strcat(szTestPath, szDir);
GetFullPathName(_pgmptr, MAX_PATH, szCorrectName, &FilePart);
__try {
Handle = FindExecutableImage(FilePart, szTestPath, szActualName);
} __except (EXCEPTION_EXECUTE_HANDLER) {
Handle = NULL;
printf("ERROR: FindExecutableImage GPF (test %d)\n", 1);
ErrorCount++;
}
if (Handle == NULL) {
printf("ERROR: FindExecutableImage (test %d) failed\n", 1);
ErrorCount++;
} else {
CloseHandle(Handle);
if (strcmp(szCorrectName, szActualName)) {
printf("ERROR: FindExecutableImage() (test %d) found wrong image.\nExpected: %s\nFound: %s\n", 1, szCorrectName, szActualName);
ErrorCount++;
}
}
// Test long paths to ExpandPath()
strcat(szTestPath, ";%path%;%path%;%path%;%path%;%path%;%path%;%path%;%path%");
__try {
Handle = FindExecutableImage(FilePart, szTestPath, szActualName);
} __except (EXCEPTION_EXECUTE_HANDLER) {
Handle = NULL;
printf("ERROR: FindExecutableImage GPF (test %d)\n", 2);
ErrorCount++;
}
if (Handle == NULL) {
printf("ERROR: FindExecutableImage (test %d) failed\n", 2);
ErrorCount++;
} else {
CloseHandle(Handle);
if (strcmp(szCorrectName, szActualName)) {
printf("ERROR: FindExecutableImage() (test %d) found wrong image.\nExpected: %s\nFound: %s\n", 2, szCorrectName, szActualName);
ErrorCount++;
}
}
// Test invalid paths (should return failure)
szTestPath[0] = '\0';
__try {
Handle = FindExecutableImage(FilePart, szTestPath, szActualName);
} __except (EXCEPTION_EXECUTE_HANDLER) {
Handle = NULL;
printf("ERROR: FindExecutableImage GPF (test %d)\n", 3);
ErrorCount++;
}
if (Handle != NULL) {
CloseHandle(Handle);
printf("ERROR: FindExecutableImage (test %d) failed - Expected: <nothing>\nFound: %s\n", 3, szActualName);
ErrorCount++;
} else {
if (strlen(szActualName)) {
printf("ERROR: FindExecutableImage() (test %d) failed to clear ImageName on failure\n", 3);
ErrorCount++;
}
}
// Test NULL name (should return failure)
__try {
Handle = FindExecutableImage(NULL, szTestPath, szActualName);
} __except (EXCEPTION_EXECUTE_HANDLER) {
Handle = NULL;
printf("ERROR: FindExecutableImage GPF (test %d)\n", 4);
ErrorCount++;
}
if (Handle != NULL) {
CloseHandle(Handle);
printf("ERROR: FindExecutableImage (test %d) failed - Expected: <nothing>\nFound: %s\n", 4, szActualName);
ErrorCount++;
} else {
if (strlen(szActualName)) {
printf("ERROR: FindExecutableImage() (test %d) failed to clear ImageName on failure\n", 4);
ErrorCount++;
}
}
// Valid name and path, invalid end result.
strcpy(szTestPath, szDrive);
strcat(szTestPath, szDir);
__try {
Handle = FindExecutableImage(FilePart, szTestPath, NULL);
} __except (EXCEPTION_EXECUTE_HANDLER) {
Handle = NULL;
printf("ERROR: FindExecutableImage GPF (test %d)\n", 5);
ErrorCount++;
}
if (Handle != NULL) {
CloseHandle(Handle);
printf("ERROR: FindExecutableImage (test %d) failed - Supposed to fail if filepath is invalid\n", 5);
ErrorCount++;
}
printf("FindExecutableImage - %s\n", ErrorCount ? "Failed" : "Passed");
return;
}
void foo(void) {
puts("Entering foo");
foo1();
puts("Ending foo");
}
void foo1(void) {
puts("Entering foo1");
foo2();
puts("Ending foo1");
}
void foo2(void) {
puts("Entering foo2");
foo3();
puts("Ending foo2");
}
void foo3(void) {
puts("Entering foo3");
WalkTheStack();
puts("Ending foo2");
}
void
WalkTheStack(){
}