Installing printer drivers from a Windows Vista installation

Windows Vista comes with a huge collection of printer drivers in the box. If you need to install one or more of these drivers on a print server go to the Sharing tab of you printer and hit the Additional Drivers:

052708_2139_Installingp1

Check the driver you want to install and hit OK. Windows will ask you where the driver is located. Now browse to the following folder on the Vista machine:

C:WindowsSystem32DriverStoreFileRepository

This is where Vista keeps its driver store. For printers, the folders you are looking for start with prn. HP printer drivers are stored in the prnhp###.inf_######## folders for example. The tricky part is to determine which folder holds your required driver. Windows will not do a recursive search through the folder hierarchy so you have to point it at the correct folder for your printer. I usually do a search in the file contents for the name of the printer I am installing a driver for.

You can (of course) use PowerShell to do the searching for you. One of many possible commands is:

get-childitem -Path C:WindowsSystem32DriverStoreFileRepository -include *.inf -recurse | select-string -pattern ‘hp deskjet 980’

This will echo out the name of the file that contains the text hp deskjet 980, as well as the line in the file that contains the text.

Note: If you do this, you will notice that you get two folders containing inf files that match the text you searched for, provided that you searched for the name of a printer whose driver comes with Windows. Doing a compare of these files yields very few differences, and it seems to me they are for the same driver. You can compare two files like this:

fc.exe /U C:WindowsSystem32DriverStoreFileRepositoryprnhp001.inf
_65b34c6aprnhp001.inf C:WindowsSystem32DriverStoreFileRepositoryprnhp001.inf_884be055prnhp001.Inf

If you require x64 drivers you need to connect to a Vista x64 computer and if you need an x86 driver you connect to Vista x86.

Microsoft Office Live Meeting 2007 error

While using the Office Live Meeting 2007 client and trying to upload a Microsoft Word document (.doc) I received this error:
You’ve attempted to upload a document, but the feature required to upload the document was not included in the installation of Live Meeting. You can share the document using application sharing or reinstall Live Meeting while running as an administrator. This functionality is not available on 64 bit operating systems.
Note: You can still upload PowerPoint presentations.
Live Meeting logs information to pwconsole-debug<##>.txt located in you temp folder. The explanation of this error was logged in this file:
FindNBPrinterName, Line 705, Err = Error = 800401f8
CDocConverter::GetMODIPrinterName, Line 195, Err = Failed to find MODI printer name!
ModiInstaller::AddPrinterDriverW, Line 387, Err = CopyFile failed! Src=C:Program Files (x86)Microsoft OfficeLive Meeting 8Consolelmdigraph8.dll Dest=C:Windowssystem32spoolDRIVERSx64lmdigraph8.dll, GetLastError=5
ModiInstaller::InstallPrintDriver, Line 199, Err = AddPrinterDriver failed!
ReinstallNBPrinter, Line 758, Err = Install of print driver failed!
PrintToModi::Convert, Line 307, Err = Print driver could not be installed!
The error code is 5 which means Access Denied. I tried startig Live Meeting as an Administrator, this produced the same error but now with different errors in the pwconsole-debug file. Live Meeting was now able to copy the driver files to the DRIVERS folder.
PrinterDevMode::Initialize, Line 187, Err = DocumentProperties size request failed! Error = 0
IsNBPrinter, Line 599, Err = PrinterDevMode failed to initialize!
FindNBPrinter, Line 667, Err = Error = 80004005
FindNBPrinter, Line 685, Err = Error = 80004005
FindNBPrinterName, Line 705, Err = Error = 80004005
CDocConverter::GetMODIPrinterName, Line 195, Err = Failed to find MODI printer name!
PrinterDevMode::Initialize, Line 187, Err = DocumentProperties size request failed! Error = 0
IsNBPrinter, Line 599, Err = PrinterDevMode failed to initialize!
FindNBPrinter, Line 667, Err = Error = 80004005
FindNBPrinter, Line 685, Err = Error = 80004005
ModiInstaller::AddPrinterDriverW, Line 413, Err = GetLastError() = 216
ModiInstaller::InstallPrintDriver, Line 199, Err = AddPrinterDriver failed!
ReinstallNBPrinter, Line 758, Err = Install of print driver failed!
PrintToModi::Convert, Line 307, Err = Print driver could not be installed!
When Live Meeting uloads content to a meeting it temporatily installs a local printer (Microsoft Office Live Meeting 2007 Document Writer) and prints the content on the printer to a file. LM then removes the printer and uploads the content by way of the file that was printed. The printer driver remains on the computer for future use.
I was able to bypass the access denied error, but there is no x64 version of this driver and so I could not upload any content except PowerPoint files, which behave diffrently apparently.
Note: I tried to resolve the 0x216 (534 dec) error from the laste pwconsole-debug file. The error translates to:
Arithmetic result exceeded 32 bits
I do not know if this means that the driver failed to match an x64 OS.

Availability of the Group Policy Hide drives calculator and associated template

A long time ago I created an HTML based application to calculate the numeric values required to hide specific combinations of drive letters through Group Policy. I also made a custom template file where you could enter the numeric value directly instead of editing the templates that came with Windows.
I used to host these files directly on my website, but now I have made them available as a download instead. The link to the download is:
The package contains these files:
  • CustomDrives.adm: The template that lets you enter the numeric values directly.
  • HideDrivesSelector.hta: The HTML based application to calculate the numeric values, as well as doing a “reverse” lookup of existing values.

When I have the time I plan to update the custom template to the new ADMX/ADML format for Windows Server 2008, but I do not think that will be anytime soon (Tempus fugit).

Resolving DCOM 10016 Errors

For some reason I frequently encounter these DCOM errors on servers running SharePoint Services:

Log Name: System
Source: Microsoft-Windows-DistributedCOM
Date: 25.05.2008 15:50:23
Event ID: 10016
Task Category: None
Level: Error
Keywords: Classic
User: NETWORK SERVICE
Computer: server.domain.com

Description:
The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID {61738644-F196-11D0-9953-00C04FD919C1} to the user NT AUTHORITYNETWORK SERVICE SID (S-1-5-20) from address LocalHost (Using LRPC). This security permission can be modified using the Component Services administrative tool.

If you see an error like this follow these steps to fix it:

  1. Figure out which COM Server application that is the problem. Run this command:
    reg query HKCRAppID<COM Server GUID from Event log entry>
    In this case the command would be:
    reg query HKCRAppID{61738644-F196-11D0-9953-00C04FD919C1}
    HKEY_CLASSES_ROOTAppID{61738644-F196-11D0-9953-00C04FD919C1}
    (Default) REG_SZ IIS WAMREG admin Service
    LocalService REG_SZ IISADMIN
    AuthenticationLevel REG_DWORD 0x6
  2. Open up the Component Services tool; dcomcnfg.exe
  3. Expand Component ServicesComputersMy ComputerDCOM Config
  4. Locate the failing component in the list, either by name or GUID, and select Properties.
  5. Open the Security tab.
  6. Depending on your error select Launch and Activation Permissions (as in this example), Access Permissions or Configuration Permissions.
  7. Add the required permissions:
    052508_1608_ResolvingDC1
  8. Hit OK twice to return to the Component Service tool.

The error should now be resolved.

Installing Windows Server 2008 on a Compaq ProLiant ML310 G1 server

I have an old first-generation (G1) Compaq ML310 server that I use as a multi-server on my home network. Since it is so old the server is only capable of running an x86 OS, but it has 3 GB of memory so I manages the job for my small network. It is certified for Windows Server 2003 and has been happily running that OS for a couple of years now. This weekend I decided it was time to upgrade it to Windows Server 2008.

052508_0005_InstallingW1

Figure 1: The Compaq ML310 G1 Server

First I installed a virtual Windows Server 2008 machine on my desktop computer. I updated the schema for Windows Server 2008 (from my old server, since adprep.exe /forestprep must run on a DC). Then I moved all the services the old server was running, DNS, DHCP, Certificate Authority etc, to the new virtual machine. Finally I installed Exchange 2007 and moved all the mailboxes to the virtual server. Then it was time to decommission the ML310’s workloads and I uninstalled Exchange 2007 and demoted it to a member server. After verifying that no data that I required was left on the old server I popped in the Windows Server 2008 DVD and rebooted. That was when the fun started.

My first snag was to discover that the ML310 does not have a DVD-ROM drive, but a CD-ROM drive. No biggie, I found an old DVD-ROM drive in a closet and installed it. When that was in place I could boot the Windows Server 2008 DVD.

The ML310 has an onboard LSI IDE ATA-100 RAID Controller. The RAID system is pretty simple and you have to create the arrays from the controller BIOS while the OS is down. I have 4 drives in the server, distributed over two RAID 1 arrays. To make windows see the arrays I have to load a driver during OS setup. On Windows Server 2003 this was done pressing F6 at the beginning of setup and popping in a floppy with the required driver. I had been using the driver from the HP website up until I decided to upgrade. The main file of the driver is MegaIDE.sys and the HP driver is version 2.5.2003.613. I figured I would try that driver first and see if I could make it work with Windows Server 2008 and the RAID 1 arrays.

After you have selected which Windows Server 2008 edition you want to install the setup process brings up a listing of available drives in your machine. My list contained 6 items; 4 partitions and 2 unallocated free space, divided over 4 physical disks. This meant that the default Windows driver was not RAID capable. I proceeded to hit the Load Driver button and load the HP driver from floppy. That did not work at all. It found the driver but setup never continued. I figured it might be a bad floppy so I copied the driver files to a USB key instead and tried again. This time the driver loaded successfully but setup still displayed the same 6 items, so that driver was not RAID capable when used with Windows Server 2008 either. What to do?

The HP driver is pretty old so I decided to see if LSI, the manufacturer of the RAID controller, had a newer version. I found one on their website. In this driver package the MegaIDE.sys driver was version 4.1.0709.2003, a definite improvement. Just to be sure I verified that the Plug and Play ID of my controller (PCIVEN_1095&DEV_0649&SUBSYS_007E0E11) was present in the INF file for the new driver. Since it was, I copied it to the USB drive and loaded it in Windows setup.

Success! After the driver loaded, the number of items was down to 3, now showing 2 physical drives (really the two logical RAID 1 drivers) and 2 partitions (one on each drive), plus the unallocated space. Things were looking good. I wanted to do a completely clean install so I decided to delete the old partition on the first physical drive and have setup recreate it. That produced an error, but I was not too deterred by this. I rebooted the server and went into the controller BIOS and re-initialized the array, figuring that it had somehow been corrupted or altered by me messing about with the old driver. Back in setup with the new driver loaded I now had only unallocated space on my drive. I hit Next and Windows Setup proceeded to try and create a new partition in this free space. That produced another error.

Windows could not create a partition. Error 0x80070013.

The 0x in front of the error tells us that this is a hex number and we need to translate it into decimal in order to find out what it means. 13 hex is 19 decimal. Using this command we can get the clear text data from the error:

PS C:WindowsSystem32> net helpmsg 19

The media is write protected.

So I knew what the problem was, just not how to fix it. I rebooted again and went back into the controller BIOS. I deleted the array and recreated and re-initialized it. Booted the DVD once more, loaded the LSI RAID driver. The newly recreated array came up as free space and I selected it and hit next. This time I got no error and Windows Server 2008 started installing.

I still think my theory about the original array becoming corrupted or having been modified in some way to be correct. I did a lot of stuff to the partitions while trying to make the old HP driver work. Circumstantial evidence to back up this conclusion is that the other array is accessible in Windows Server 2008 without problem.

Windows Server 2008 installed successfully and I started configuring the server. I quickly noticed that the server had no network connectivity due to a missing NIC driver. That was, however, the only unknown device. The ML310 uses an HP NC7760 Gigabit Server Adapter, whose driver is not included on the Windows Server 2008 DVD. I downloaded the Windows Server 2003 driver from HP and it installed without problem. All network service ran perfectly. The NIC driver is quite old. Its version is 8.52 and the date 12.01.2006. I decided to look for a newer version. A quick Google search of the hardware IDs of the NC7760 adapter revealed that it is in reality a Broadcom NetXtreme Gigabit Ethernet adapter. I went to Broadcom’s site and downloaded the latest driver. Windows Server 2008 would not upgrade to that driver, since the INF file from Broadcom did not have an exact match for the most specific Hardware ID, like the HP INF file did. Instead of trying to edit the Broadcom INF file and add the NC7760 Hardware IDs I just uninstalled the driver and selected to delete the driver files in the process. Then I could do a search for new hardware and install the Broadcom driver. The new driver is from 17.09.2007 and is version 10.62.0.0, quite an improvement as well.

As an encore I tried to install the RAID management software from LSI. It installed successfully and the Spy program, which sits in the system tray and monitors drive health, worked well. Not so for the MMC snap-in that manages the arrays themselves. It always gives an error and then freezes when I try to start it. Can’t win ’em all I guess.

I finished the server upgrade by promoting it to a DC, adding all the roles (CA, DHCP, etc) and installed Exchange 2007 with SP1. My only regrets are that the computer is not x64 compatible which means that I can’t run a supported version of Exchange 2007, and that I can’t run Hyper-V.

For those who are interested here are the links to the software I have mentioned in this post: