windows-nt/Source/XPSP1/NT/printscan/print/spooler/oleprn/addprint.cpp
2020-09-26 16:20:57 +08:00

78 lines
2.1 KiB
C++

// AddPrint.cpp : Implementation of COlePrivKSApp and DLL registration.
#include "stdafx.h"
#include "OlePrn.h"
#include "AddPrint.h"
STDMETHODIMP CAddPrint::AddPrinterConnection(BSTR lpPrinterName)
{
HRESULT hr = CanIAddPrinterConnection();
if (FAILED(hr))
return hr;
if (::AddPrinterConnection(lpPrinterName))
return S_OK;
else
return (SetScriptingError(CLSID_AddPrint,
IID_IAddPrint,
GetLastError()));
}
STDMETHODIMP CAddPrint::DeletePrinterConnection(BSTR lpPrinterName)
{
HRESULT hr = CanIDeletePrinterConnection( lpPrinterName );
if (FAILED(hr))
return hr;
if (::DeletePrinterConnection(lpPrinterName))
return S_OK;
else
return (SetScriptingError(CLSID_AddPrint,
IID_IAddPrint,
GetLastError()));
}
HRESULT CAddPrint::CanIAddPrinterConnection(void) {
DWORD dwPolicy;
HRESULT hr = GetActionPolicy(URLACTION_JAVA_PERMISSIONS, dwPolicy);
if (SUCCEEDED(hr)) {
hr = (dwPolicy == URLPOLICY_JAVA_MEDIUM ||
dwPolicy == URLPOLICY_JAVA_LOW ||
dwPolicy == URLPOLICY_ALLOW) ? S_OK : E_ACCESSDENIED;
}
return hr;
}
HRESULT CAddPrint::CanIDeletePrinterConnection(BSTR pbstrPrinter) {
DWORD dwPolicy;
LPTSTR lpszPrinter = NULL;
HRESULT hr = GetActionPolicy(URLACTION_JAVA_PERMISSIONS, dwPolicy);
USES_CONVERSION;
if (SUCCEEDED(hr)) {
switch(dwPolicy) {
case URLPOLICY_JAVA_LOW:
case URLPOLICY_ALLOW:
hr = S_OK;
break;
case URLPOLICY_JAVA_MEDIUM:
lpszPrinter = OLE2T( pbstrPrinter );
hr = PromptUser(COlePrnSecurity::DeletePrinterConnection, lpszPrinter );
hr = SUCCEEDED(hr) ?
(HRESULT_CODE(hr) == S_OK ? S_OK : E_FAIL) :
hr;
break;
default:
hr = E_ACCESSDENIED;
}
}
return hr;
}