RemovePrinter (IEpnPrinterList) VC++ Example

void CEPrintDemoView::OnRemovePrinter()
{
   IEpnEnhancedOptions * pEnhancedOptions = NULL; 
   IEpnBatchPrinterInfo * pBatchPrinterInfo; 
   IEpnPrinterList * pPrintersList; 
   IEPrint * pLeadPrnt; 
   HRESULT hr; 
   int PrinterIndex = 0; 

   hr = ::CoCreateInstance(CLSID_EPrint, NULL, CLSCTX_ALL, IID_IEPrint, (void**) &pLeadPrnt); 
   if(FAILED(hr)) 
      return; 

   hr = ::CoCreateInstance(CLSID_EpnPrinterList, NULL, CLSCTX_ALL, IID_IEpnPrinterList, (void**) &pPrintersList); 
   if(FAILED(hr)) 
      return; 

   hr = ::CoCreateInstance(CLSID_EpnBatchPrinterInfo, NULL, CLSCTX_ALL, IID_IEpnBatchPrinterInfo, (void**) &pBatchPrinterInfo); 
   if(FAILED(hr)) 
      return; 

   if (pLeadPrnt->IsSupportLocked(SUPPORT_OEM))
pLeadPrnt->UnlockSupport(SUPPORT_OEM,OEM_KEY);

pBatchPrinterInfo->PrinterName="";
pEnhancedOptions=pBatchPrinterInfo->GetEnhancedOptions();
pLeadPrnt->GetDefaultEnhancedOptions(&pEnhancedOptions);
pBatchPrinterInfo->Flags=VALID_ENHANCED_OPTIONS;
PrinterIndex=pPrintersList->GetPrinterIndex(pBatchPrinterInfo);

pPrintersList->RemovePrinter(PrinterIndex);

if(pBatchPrinterInfo)
{
pBatchPrinterInfo->Release();
pBatchPrinterInfo=NULL;
}

if(pPrintersList)
{
pPrintersList->Release();
pPrintersList=NULL;
}

if(pLeadPrnt)
{
pLeadPrnt->Release();
pLeadPrnt=NULL;
}
}