+
+START_TEST(GetDeviceDriverBaseName)
+{
+ DWORD Len;
+ CHAR FileName[255];
+ TEST_MODULE_INFO ModInfo;
+
+ SetLastError(0xDEADBEEF);
+ Len = GetDeviceDriverBaseNameA(0, FileName, 255);
+ ok(Len == 0, "Len: %lu\n", Len);
+ ok(GetLastError() == ERROR_INVALID_HANDLE, "Error: %lx\n", GetLastError());
+
+ if (IntGetModuleInformation("ntdll.dll", FALSE, TRUE, TRUE, &ModInfo))
+ {
+ SetLastError(0xDEADBEEF);
+ Len = GetDeviceDriverBaseNameA(ModInfo.ImageBase, FileName, 255);
+ ok(Len == ModInfo.Len, "Len: %lu\n", Len);
+ ok(GetLastError() == 0xDEADBEEF, "Error: %lx\n", GetLastError());
+ ok(lstrcmpiA(ModInfo.Path, FileName) == 0, "File name: %s\n", FileName);
+
+ /* Test with too small buffer */
+ SetLastError(0xDEADBEEF);
+ ModInfo.Len--;
+ ModInfo.Path[ModInfo.Len] = 0;
+ FileName[ModInfo.Len] = 0;
+ Len = GetDeviceDriverBaseNameA(ModInfo.ImageBase, FileName, ModInfo.Len);
+ ok(Len == ModInfo.Len, "Len: %lu\n", Len);
+ ok(GetLastError() == 0xDEADBEEF, "Error: %lx\n", GetLastError());
+ ok(lstrcmpiA(ModInfo.Path, FileName) == 0, "File name: %s\n", FileName);
+ }
+ else
+ {
+ skip("Couldn't find info about ntdll.dll\n");
+ }
+
+ if (IntGetModuleInformation("msvcrt.dll", FALSE, TRUE, TRUE, &ModInfo))
+ {
+ SetLastError(0xDEADBEEF);
+ Len = GetDeviceDriverBaseNameA(ModInfo.ImageBase, FileName, 255);
+ ok(Len == 0, "Len: %lu\n", Len);
+ ok(GetLastError() == ERROR_INVALID_HANDLE, "Error: %lx\n", GetLastError());
+ }
+ else
+ {
+ skip("Couldn't find info about msvcrt.dll\n");
+ }
+
+ if (IntGetModuleInformation("psapi.dll", FALSE, TRUE, TRUE, &ModInfo))
+ {
+ SetLastError(0xDEADBEEF);
+ Len = GetDeviceDriverBaseNameA(ModInfo.ImageBase, FileName, 255);
+ ok(Len == 0, "Len: %lu\n", Len);
+ ok(GetLastError() == ERROR_INVALID_HANDLE, "Error: %lx\n", GetLastError());
+ }
+ else
+ {
+ skip("Couldn't find info about psapi.dll\n");
+ }
+}