int main(int argc, char **argv) {
  char *name;
  DWORD outcb;
  int i;
  DWORD base = strtoul(argv[1], NULL, 0);
  name = (char *) malloc(1024);
  vm_mark_buf_in(&base, 4);
  vm_mark_buf_in(&name, 4);
  outcb = GetDeviceDriverFileName(base, name, 1024);
  vm_mark_buf_out(name, 1024);
  printf("%s\n", name);
  return 0;
}
示例#2
0
void GetKernelModulePaths(PVOID* modules, DWORD count, std::vector<ProcessModule>& procModules)
{
	for(DWORD i = 0; i < count; ++i)
	{
		// for each driver get its filename and convert it into a "normal" windows path
		WCHAR modPath[MAX_PATH] = {0};
		if(GetDeviceDriverFileName(modules[i], modPath, MAX_PATH))
		{
			std::wstring dosPath = NTPathToDosPath(modPath);
			procModules.push_back(ProcessModule(modules[i], dosPath));
		}
	}
}
示例#3
0
void enumLoadedDrivers(std::map<std::string, std::string>& loadedDrivers) {
  DWORD bytesNeeded = 0;
  int driversCount = 0;

  auto ret = EnumDeviceDrivers(nullptr, 0, &bytesNeeded);
  auto drvBaseAddr = static_cast<LPVOID*>(malloc(bytesNeeded));

  if (drvBaseAddr == nullptr) {
    TLOG << "enumLoadedDrivers failed to allocate required memory ("
         << bytesNeeded << ")";
    return;
  }

  ret = EnumDeviceDrivers(drvBaseAddr, bytesNeeded, &bytesNeeded);

  driversCount = bytesNeeded / sizeof(drvBaseAddr[0]);

  if (ret && (driversCount > 0)) {
    auto driverPath = static_cast<LPSTR>(malloc(MAX_PATH + 1));
    auto driverName = static_cast<LPSTR>(malloc(MAX_PATH + 1));

    ZeroMemory(driverPath, MAX_PATH + 1);
    ZeroMemory(driverName, MAX_PATH + 1);

    for (size_t i = 0; i < driversCount; i++) {
      if (GetDeviceDriverBaseName(drvBaseAddr[i], driverName, MAX_PATH) != 0) {
        if (GetDeviceDriverFileName(drvBaseAddr[i], driverPath, MAX_PATH) !=
            0) {
          // Removing file extension
          auto fileExtension = strrchr(driverName, '.');
          *fileExtension = '\0';
          loadedDrivers[driverName] = driverPath;
        } else {
          loadedDrivers[driverName] = "";
        }
      } else {
        TLOG << "GetDeviceDriverFileName failed (" << GetLastError() << ")";
      }
    }

    free(driverPath);
    free(driverName);
  } else {
    TLOG << "EnumDeviceDrivers failed; array size needed is" << bytesNeeded;
  }

  free(drvBaseAddr);
}