12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "printing/backend/printing_info_win.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace printing { 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace internal { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* GetDriverInfo(HANDLE printer, int level) { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DWORD size = 0; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::GetPrinterDriver(printer, NULL, level, NULL, 0, &size); 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (size == 0) { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<uint8[]> buffer(new uint8[size]); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) memset(buffer.get(), 0, size); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!::GetPrinterDriver(printer, NULL, level, buffer.get(), size, &size)) { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return buffer.release(); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)uint8* GetPrinterInfo(HANDLE printer, int level) { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DWORD size = 0; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::GetPrinter(printer, level, NULL, 0, &size); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (size == 0) { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Failed to get size of PRINTER_INFO_" << level << 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ", error = " << GetLastError(); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<uint8[]> buffer(new uint8[size]); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) memset(buffer.get(), 0, size); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!::GetPrinter(printer, level, buffer.get(), size, &size)) { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Failed to get PRINTER_INFO_" << level << 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ", error = " << GetLastError(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return buffer.release(); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace internal 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace printing 48