| Index: cloud_print/virtual_driver/win/port_monitor/port_monitor.cc
|
| diff --git a/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc b/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc
|
| index f7b343784826de68c3da6d6cb2a1a1f7c115326c..562d0b8dea617b4b4ac3d32929d46b3c981eccd7 100644
|
| --- a/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc
|
| +++ b/cloud_print/virtual_driver/win/port_monitor/port_monitor.cc
|
| @@ -59,12 +59,6 @@ const wchar_t kChromePathRegValue[] = L"PathToChromeExe";
|
| const wchar_t kChromePathRegKey[] = L"Software\\Google\\CloudPrint";
|
|
|
| namespace {
|
| -#ifdef _WIN64
|
| -const wchar_t *kPortMonitorDllName = kPortMonitorDllName64;
|
| -#else
|
| -const wchar_t *kPortMonitorDllName = kPortMonitorDllName32;
|
| -#endif
|
| -
|
| const wchar_t kXpsMimeType[] = L"application/vnd.ms-xpsdocument";
|
|
|
| const size_t kMaxCommandLineLen = 0x7FFF;
|
| @@ -195,7 +189,7 @@ bool GetJobTitle(HANDLE printer_handle,
|
| // configuration.
|
| void HandlePortUi(HWND hwnd, const string16& caption) {
|
| if (hwnd != NULL && IsWindow(hwnd)) {
|
| - DisplayWindowsMessage(hwnd, CO_E_NOT_SUPPORTED);
|
| + DisplayWindowsMessage(hwnd, CO_E_NOT_SUPPORTED, cloud_print::kPortName);
|
| }
|
| }
|
|
|
| @@ -313,7 +307,7 @@ BOOL WINAPI Monitor2EnumPorts(HANDLE,
|
| SetLastError(ERROR_INVALID_LEVEL);
|
| return FALSE;
|
| }
|
| - *needed_bytes += static_cast<DWORD>(kPortNameSize);
|
| + *needed_bytes += static_cast<DWORD>(cloud_print::kPortNameSize);
|
| if (ports_size < *needed_bytes) {
|
| LOG(WARNING) << *needed_bytes << " bytes are required. Only "
|
| << ports_size << " were allocated.";
|
| @@ -337,15 +331,20 @@ BOOL WINAPI Monitor2EnumPorts(HANDLE,
|
| // EnumPorts to fail until the spooler is restarted.
|
| // This is NOT mentioned in the documentation.
|
| wchar_t* string_target =
|
| - reinterpret_cast<wchar_t*>(ports + ports_size - kPortNameSize);
|
| + reinterpret_cast<wchar_t*>(ports + ports_size -
|
| + cloud_print::kPortNameSize);
|
| if (level == 1) {
|
| PORT_INFO_1* port_info = reinterpret_cast<PORT_INFO_1*>(ports);
|
| port_info->pName = string_target;
|
| - StringCbCopy(port_info->pName, kPortNameSize, kPortName);
|
| + StringCbCopy(port_info->pName,
|
| + cloud_print::kPortNameSize,
|
| + cloud_print::kPortName);
|
| } else {
|
| PORT_INFO_2* port_info = reinterpret_cast<PORT_INFO_2*>(ports);
|
| port_info->pPortName = string_target;
|
| - StringCbCopy(port_info->pPortName, kPortNameSize, kPortName);
|
| + StringCbCopy(port_info->pPortName,
|
| + cloud_print::kPortNameSize,
|
| + cloud_print::kPortName);
|
| port_info->pMonitorName = NULL;
|
| port_info->pDescription = NULL;
|
| port_info->fPortType = PORT_TYPE_WRITE;
|
| @@ -554,15 +553,18 @@ DWORD WINAPI Monitor2XcvDataPort(HANDLE xcv_handle,
|
| // We don't handle AddPort or DeletePort since we don't support
|
| // dynamic creation of ports.
|
| if (lstrcmp(L"MonitorUI", data_name) == 0) {
|
| + DWORD dll_path_len = 0;
|
| + FilePath dll_path(GetPortMonitorDllName());
|
| + dll_path_len = static_cast<DWORD>(dll_path.value().length());
|
| if (output_data_bytes_needed != NULL) {
|
| - *output_data_bytes_needed = sizeof(kPortMonitorDllName);
|
| + *output_data_bytes_needed = dll_path_len;
|
| }
|
| - if (output_data_bytes < sizeof(kPortMonitorDllName)) {
|
| + if (output_data_bytes < dll_path_len) {
|
| return ERROR_INSUFFICIENT_BUFFER;
|
| } else {
|
| ret_val = StringCbCopy(reinterpret_cast<wchar_t*>(output_data),
|
| output_data_bytes,
|
| - kPortMonitorDllName);
|
| + dll_path.value().c_str());
|
| }
|
| } else {
|
| return ERROR_INVALID_PARAMETER;
|
| @@ -627,8 +629,9 @@ HRESULT WINAPI DllRegisterServer(void) {
|
| MONITOR_INFO_2 monitor_info = {0};
|
| // YUCK!!! I can either copy the constant, const_cast, or define my own
|
| // MONITOR_INFO_2 that will take const strings.
|
| - monitor_info.pDLLName = const_cast<LPWSTR>(cloud_print::kPortMonitorDllName);
|
| - monitor_info.pName = const_cast<LPWSTR>(cloud_print::kPortMonitorDllName);
|
| + FilePath dll_path(cloud_print::GetPortMonitorDllName());
|
| + monitor_info.pDLLName = const_cast<LPWSTR>(dll_path.value().c_str());
|
| + monitor_info.pName = const_cast<LPWSTR>(dll_path.value().c_str());
|
| if (AddMonitor(NULL, 2, reinterpret_cast<BYTE*>(&monitor_info))) {
|
| return S_OK;
|
| }
|
| @@ -640,9 +643,10 @@ HRESULT WINAPI DllUnregisterServer(void) {
|
| if (!cloud_print::CanRegister()) {
|
| return E_ACCESSDENIED;
|
| }
|
| + FilePath dll_path(cloud_print::GetPortMonitorDllName());
|
| if (DeleteMonitor(NULL,
|
| NULL,
|
| - const_cast<LPWSTR>(cloud_print::kPortMonitorDllName))) {
|
| + const_cast<LPWSTR>(dll_path.value().c_str()))) {
|
| return S_OK;
|
| }
|
| return cloud_print::GetLastHResult();
|
|
|