Skip to content

Instantly share code, notes, and snippets.

@khchen
Last active December 11, 2021 02:36
Show Gist options
  • Save khchen/190bed34c449b8e0a0eead4c005189bf to your computer and use it in GitHub Desktop.
Save khchen/190bed34c449b8e0a0eead4c005189bf to your computer and use it in GitHub Desktop.
import winim/lean, winim/inc/objbase
const
IID_IAppIdPolicyHandler* = DEFINE_GUID("b6fea19e-32dd-4367-b5b7-2f5da140e87d")
CLSID_AppIdPolicyHandlerClass* = DEFINE_GUID("f1ed7d4c-f863-4de6-a1ca-7253efdee1f3")
type
IAppIdPolicyHandler* {.pure.} = object
lpVtbl*: ptr IAppIdPolicyHandlerVtbl
IAppIdPolicyHandlerVtbl* {.pure, inheritable.} = object of IDispatchVtbl
SetPolicy*: proc(self: ptr IAppIdPolicyHandler, bstrLdapPath: BSTR, bstrXmlPolicy: BSTR): HRESULT {.stdcall.}
GetPolicy*: proc(self: ptr IAppIdPolicyHandler, bstrLdapPath: BSTR, pbstrXmlPolicy: LPBSTR): HRESULT {.stdcall.}
GetEffectivePolicy*: proc(self: ptr IAppIdPolicyHandler, pbstrXmlPolicy: LPBSTR): HRESULT {.stdcall.}
IsFileAllowed*: proc(self: ptr IAppIdPolicyHandler, bstrXmlPolicy: BSTR, bstrFilePath: BSTR, bstrUserSid: BSTR, pguidResponsibleRuleId: LPGUID, pbStatus: PLONG): HRESULT {.stdcall.}
IsPackageAllowed*: proc(self: ptr IAppIdPolicyHandler, bstrXmlPolicy: BSTR, bstrPublisherName: BSTR, bstrPackageName: BSTR, ullPackageVersion: ULONG, bstrUserSid: BSTR, pguidResponsibleRuleId: LPGUID, pbStatus: PLONG): HRESULT {.stdcall.}
proc SetPolicy*(self: ptr IAppIdPolicyHandler, bstrLdapPath: BSTR, bstrXmlPolicy: BSTR): ULONG {.inline, discardable.} = {.gcsafe.}: self.lpVtbl.SetPolicy(self, bstrLdapPath, bstrXmlPolicy)
proc GetPolicy*(self: ptr IAppIdPolicyHandler, bstrLdapPath: BSTR, pbstrXmlPolicy: LPBSTR): HRESULT {.inline, discardable.} = {.gcsafe.}: self.lpVtbl.GetPolicy(self, bstrLdapPath, pbstrXmlPolicy)
proc GetEffectivePolicy*(self: ptr IAppIdPolicyHandler, pbstrXmlPolicy: LPBSTR): HRESULT {.inline, discardable.} = self.lpVtbl.GetEffectivePolicy(self, pbstrXmlPolicy)
proc IsFileAllowed*(self: ptr IAppIdPolicyHandler, bstrXmlPolicy: BSTR, bstrFilePath: BSTR, bstrUserSid: BSTR, pguidResponsibleRuleId: LPGUID, pbStatus: PLONG): HRESULT {.inline, discardable.} = self.lpVtbl.IsFileAllowed(self, bstrXmlPolicy, bstrFilePath, bstrUserSid, pguidResponsibleRuleId, pbStatus)
proc IsPackageAllowed*(self: ptr IAppIdPolicyHandler, bstrXmlPolicy: BSTR, bstrPublisherName: BSTR, bstrPackageName: BSTR, ullPackageVersion: ULONG, bstrUserSid: BSTR, pguidResponsibleRuleId: LPGUID, pbStatus: PLONG): HRESULT {.inline, discardable.} = self.lpVtbl.IsPackageAllowed(self, bstrXmlPolicy, bstrPublisherName, bstrPackageName, ullPackageVersion, bstrUserSid, pguidResponsibleRuleId, pbStatus)
converter converterIAppIdPolicyHandlerToIDispatch*(x: ptr IAppIdPolicyHandler): ptr IDispatch = cast[ptr IDispatch](x)
converter converterIAppIdPolicyHandlerToIUnknown*(x: ptr IAppIdPolicyHandler): ptr IUnknown = cast[ptr IUnknown](x)
converter converterPointer(x: ptr): ptr PVOID = cast[ptr PVOID](x)
when isMainModule:
CoInitialize(nil)
var pIAppIdPolicyHandler: ptr IAppIdPolicyHandler
if CoCreateInstance(&CLSID_AppIdPolicyHandlerClass, NULL, CLSCTX_INPROC_SERVER,
&IID_IAppIdPolicyHandler, &pIAppIdPolicyHandler) == S_OK:
var bstr: BSTR
if pIAppIdPolicyHandler.GetEffectivePolicy(&bstr) == S_OK:
echo bstr
SysFreeString(bstr)
pIAppIdPolicyHandler.Release()
CoUninitialize()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment