9cbf8ab0c1e30a6ac6453171404abbb97e98d197
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for GetDeviceDriverFileName
5 * PROGRAMMER: Pierre Schweitzer
20 static LPVOID
IntGetImageBase(LPCSTR Image
)
25 Snap
= CreateToolhelp32Snapshot(TH32CS_SNAPMODULE
, 0);
26 if (Snap
== INVALID_HANDLE_VALUE
)
28 return (LPVOID
)0x00000000;
31 Module
.dwSize
= sizeof(MODULEENTRY32
);
32 if(!Module32First(Snap
, &Module
))
35 return (LPVOID
)0x00000000;
40 if (lstrcmpiA(Module
.szExePath
, Image
) == 0)
43 return (LPVOID
)Module
.modBaseAddr
;
45 } while(Module32Next(Snap
, &Module
));
48 return (LPVOID
)0x00000000;
51 static BOOLEAN
IntGetModuleInformation(LPCSTR Module
, BOOLEAN IsDriver
, BOOLEAN IsProcMod
, TEST_MODULE_INFO
* Info
)
56 memset(Info
, 0, sizeof(TEST_MODULE_INFO
));
59 Len
= GetSystemWindowsDirectory(System
, 255);
60 if (Len
> 255 || Len
== 0)
62 printf("GetSystemWindowsDirectory failed\n");
66 /* Make path to module */
67 strcat(System
, "\\system32\\");
68 if (IsDriver
) strcat(System
, "drivers\\");
69 strcat(System
, Module
);
71 /* Get base address */
74 Info
->ImageBase
= IntGetImageBase(System
);
77 printf("IntGetImageBase failed\n");
84 printf("Not supported yet!\n");
89 strcpy(Info
->Path
, System
+ 2);
90 Info
->Len
= strlen(Info
->Path
);
95 START_TEST(GetDeviceDriverFileName
)
99 TEST_MODULE_INFO ModInfo
;
101 SetLastError(0xDEADBEEF);
102 Len
= GetDeviceDriverFileNameA(0, FileName
, 255);
103 ok(Len
== 0, "Len: %lu\n", Len
);
104 ok(GetLastError() == ERROR_INVALID_HANDLE
, "Error: %lx\n", GetLastError());
106 if (IntGetModuleInformation("ntdll.dll", FALSE
, TRUE
, &ModInfo
))
108 SetLastError(0xDEADBEEF);
109 Len
= GetDeviceDriverFileNameA(ModInfo
.ImageBase
, FileName
, 255);
110 ok(Len
== ModInfo
.Len
, "Len: %lu\n", Len
);
111 ok(GetLastError() == 0xDEADBEEF, "Error: %lx\n", GetLastError());
112 ok(lstrcmpiA(ModInfo
.Path
, FileName
) == 0, "File name: %s\n", FileName
);
114 /* Test with too small buffer */
115 SetLastError(0xDEADBEEF);
117 ModInfo
.Path
[ModInfo
.Len
] = 0;
118 FileName
[ModInfo
.Len
] = 0;
119 Len
= GetDeviceDriverFileNameA(ModInfo
.ImageBase
, FileName
, ModInfo
.Len
);
120 ok(Len
== ModInfo
.Len
, "Len: %lu\n", Len
);
121 ok(GetLastError() == 0xDEADBEEF, "Error: %lx\n", GetLastError());
122 ok(lstrcmpiA(ModInfo
.Path
, FileName
) == 0, "File name: %s\n", FileName
);
126 skip("Couldn't find info about ntdll.dll\n");