1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "cloud_print/virtual_driver/win/virtual_driver_helpers.h" 6 7#include <windows.h> 8#include <winspool.h> 9 10#include "base/files/file_util.h" 11#include "base/logging.h" 12#include "base/strings/string16.h" 13#include "base/win/windows_version.h" 14#include "cloud_print/common/win/cloud_print_utils.h" 15 16namespace cloud_print { 17 18const size_t kMaxMessageLen = 100; 19 20void DisplayWindowsMessage(HWND hwnd, HRESULT hr, 21 const base::string16 &caption) { 22 ::MessageBox(hwnd, GetErrorMessage(hr).c_str(), caption.c_str(), MB_OK); 23} 24 25base::string16 GetPortMonitorDllName() { 26 if (IsSystem64Bit()) { 27 return base::string16(L"gcp_portmon64.dll"); 28 } else { 29 return base::string16(L"gcp_portmon.dll"); 30 } 31} 32 33HRESULT GetPrinterDriverDir(base::FilePath* path) { 34 BYTE driver_dir_buffer[MAX_PATH * sizeof(wchar_t)]; 35 DWORD needed = 0; 36 if (!GetPrinterDriverDirectory(NULL, 37 NULL, 38 1, 39 driver_dir_buffer, 40 MAX_PATH * sizeof(wchar_t), 41 &needed)) { 42 // We could try to allocate a larger buffer if needed > MAX_PATH 43 // but that really shouldn't happen. 44 return cloud_print::GetLastHResult(); 45 } 46 *path = base::FilePath(reinterpret_cast<wchar_t*>(driver_dir_buffer)); 47 48 // The XPS driver is a "Level 3" driver 49 *path = path->Append(L"3"); 50 return S_OK; 51} 52 53bool IsSystem64Bit() { 54 base::win::OSInfo::WindowsArchitecture arch = 55 base::win::OSInfo::GetInstance()->architecture(); 56 return (arch == base::win::OSInfo::X64_ARCHITECTURE) || 57 (arch == base::win::OSInfo::IA64_ARCHITECTURE); 58} 59 60} 61 62