78 lines
2.1 KiB
C++
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;
|
|
}
|