These get the directories holding the printer drivers and the print processor for the current machine/environment.
I am posting these here as I had no luck finding VB.Net declarations of them on Google last night

VB Code:
  1. '\\ --[SpoolerApi]------------------------------------------------
  2. '\\ Printer Spooler API calls from winspool.drv
  3. '\\ --------------------------------------------------------------
  4. Imports System.Runtime.InteropServices
  5. Imports System.Text
  6. Imports System.ComponentModel
  7.  
  8. Module SpoolerApi
  9.  
  10. #Region "GetPrintProcessorDirectory"
  11.     'BOOL GetPrintProcessorDirectory(
  12.     '  [in] LPTSTR pName,                // server name
  13.     '  [in] LPTSTR pEnvironment,         // environment name
  14.     '  [in] DWORD Level,                 // information level
  15.     '  [out] LPBYTE pPrintProcessorInfo,  // path buffer
  16.     '  [in] DWORD cbBuf,                 // size of path buffer
  17.     '  [out] LPDWORD pcbNeeded            // bytes received or required
  18.     <DllImport("winspool.drv", EntryPoint:="GetPrintProcessorDirectory", _
  19.        SetLastError:=True, _
  20.        ExactSpelling:=False, _
  21.        CallingConvention:=CallingConvention.StdCall)> _
  22.     Private Function GetPrintProcessorDirectoryApi( _
  23.                     <InAttribute()> ByVal pName As String, _
  24.                     <InAttribute()> ByVal pEnvironment As String, _
  25.                     <InAttribute()> ByVal Level As Int32, _
  26.                     <OutAttribute()> ByVal pPrintProcessorInfo As StringBuilder, _
  27.                     <InAttribute()> ByVal cbBuf As Int32, _
  28.                     <OutAttribute()> ByRef pcbNeeded As Int32) As Boolean
  29.  
  30.     End Function
  31.  
  32.     Public Function GetPrintProcessorDirectory() As String
  33.  
  34.         Dim sProcessorInfo As New StringBuilder(260)
  35.         Dim pcbNeeded As Int32
  36.  
  37.         If GetPrintProcessorDirectoryApi("", "", 1, sProcessorInfo, sProcessorInfo.Capacity, pcbNeeded) Then
  38.             Return sProcessorInfo.ToString
  39.         Else
  40.             Throw New Win32Exception()
  41.         End If
  42.  
  43.     End Function
  44. #End Region
  45.  
  46. #Region "GetPrinterDriverDirectory"
  47.     'BOOL GetPrinterDriverDirectory(
  48.     ' [in] LPTSTR pName,             // server name
  49.     ' [in] LPTSTR pEnvironment,      // environment name
  50.     ' [in] DWORD Level,              // information level
  51.     ' [out] LPBYTE pDriverDirectory,  // path buffer
  52.     ' [in] DWORD cbBuf,              // size of path buffer
  53.     ' [out] LPDWORD pcbNeeded         // bytes received or required
  54.     <DllImport("winspool.drv", EntryPoint:="GetPrinterDriverDirectory", _
  55.        SetLastError:=True, _
  56.        ExactSpelling:=False, _
  57.        CallingConvention:=CallingConvention.StdCall)> _
  58.     Private Function GetPrinterDriverDirectoryApi( _
  59.                     <InAttribute()> ByVal pName As String, _
  60.                     <InAttribute()> ByVal pEnvironment As String, _
  61.                     <InAttribute()> ByVal Level As Int32, _
  62.                     <OutAttribute()> ByVal pDriverDirectory As StringBuilder, _
  63.                     <InAttribute()> ByVal cbBuf As Int32, _
  64.                     <OutAttribute()> ByRef pcbNeeded As Int32) As Boolean
  65.  
  66.     End Function
  67.  
  68.     Public Function GetPrinterDriverDirectory() As String
  69.  
  70.         Dim sDirectory As New StringBuilder(260)
  71.         Dim pcbNeeded As Int32
  72.  
  73.         If GetPrinterDriverDirectoryApi("", "", 1, sDirectory, sDirectory.Capacity, pcbNeeded) Then
  74.             Return sDirectory.ToString
  75.         Else
  76.             Throw New Win32Exception()
  77.         End If
  78.  
  79.     End Function
  80. #End Region
  81.  
  82. End Module