• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "printing/backend/printing_info_win.h"
6 
7 #include "base/logging.h"
8 
9 namespace printing {
10 
11 namespace internal {
12 
GetDriverInfo(HANDLE printer,int level)13 uint8* GetDriverInfo(HANDLE printer, int level) {
14   DWORD size = 0;
15   ::GetPrinterDriver(printer, NULL, level, NULL, 0, &size);
16   if (size == 0) {
17     return NULL;
18   }
19   scoped_ptr<uint8[]> buffer(new uint8[size]);
20   memset(buffer.get(), 0, size);
21   if (!::GetPrinterDriver(printer, NULL, level, buffer.get(), size, &size)) {
22     return NULL;
23   }
24   return buffer.release();
25 }
26 
GetPrinterInfo(HANDLE printer,int level)27 uint8* GetPrinterInfo(HANDLE printer, int level) {
28   DWORD size = 0;
29   ::GetPrinter(printer, level, NULL, 0, &size);
30   if (size == 0) {
31     LOG(WARNING) << "Failed to get size of PRINTER_INFO_" << level <<
32                     ", error = " << GetLastError();
33     return NULL;
34   }
35   scoped_ptr<uint8[]> buffer(new uint8[size]);
36   memset(buffer.get(), 0, size);
37   if (!::GetPrinter(printer, level, buffer.get(), size, &size)) {
38     LOG(WARNING) << "Failed to get PRINTER_INFO_" << level <<
39                     ", error = " << GetLastError();
40     return NULL;
41   }
42   return buffer.release();
43 }
44 
45 }  // namespace internal
46 
47 }  // namespace printing
48