Created
March 23, 2017 21:57
-
-
Save cheatfate/1211c9625649472d4a5b07a6c28008cd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import wincom, strutils | |
type | |
FILETIME = object | |
dwLowDateTime: DWORD | |
dwHighDateTime: DWORD | |
LPFILETIME = ptr FILETIME | |
const | |
CLSID_SetupConfiguration = DEFGUID("177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D") | |
IID_ISetupInstance = DEFGUID("B41463C3-8866-43B5-BC33-2B0676F7F42E") | |
IID_ISetupConfiguration = DEFGUID("42843719-DB4C-46C2-8E7C-64F1816EFD5B") | |
IID_IEnumSetupInstances = DEFGUID("6380BCFF-41D3-4B2E-8B2E-BF8A6810C848") | |
IID_ISetupHelper = DEFGUID("42b21b78-6192-463e-87bf-d577838f1d5c") | |
INTERFACE(ISetupHelper, IUnknown): | |
proc ParseVersion(pwszVersion: LPOLESTR, pullVersion: PULONGLONG): HRESULT | |
proc ParseVersionRange(pwszVersionRange: LPOLESTR, | |
pullMinVersion: PULONGLONG, | |
pullMaxVersion: PULONGLONG): HRESULT | |
type PISetupHelper = ptr ISetupHelper | |
INTERFACE(ISetupInstance, IUnknown): | |
proc GetInstanceId(pbstrInstanceId: ptr BSTR): HRESULT | |
proc GetInstallDate(pInstallDate: LPFILETIME): HRESULT | |
proc GetInstallationName(pbstrInstallationName: ptr BSTR): HRESULT | |
proc GetInstallationPath(pbstrInstallationPath: ptr BSTR): HRESULT | |
proc GetInstallationVersion(pbstrInstallationVersion: ptr BSTR): HRESULT | |
proc GetDisplayName(lcid: LCID, pbstrDisplayName: ptr BSTR): HRESULT | |
proc GetDescription(lcid: LCID, pbstrDescription: ptr BSTR): HRESULT | |
proc ResolvePath(pwszRelativePath: LPOLESTR, | |
pbstrAbsolutePath: ptr BSTR): HRESULT | |
type PISetupInstance = ptr ISetupInstance | |
INTERFACE(IEnumSetupInstances, IUnknown): | |
proc Next(celt: ULONG, rgelt: ptr PISetupInstance, | |
pceltFetched: ptr ULONG): HRESULT | |
proc Skip(celt: ULONG): HRESULT | |
proc Reset(): HRESULT | |
proc Clone(ppenum: pointer): HRESULT | |
type PIEnumSetupInstances = ptr IEnumSetupInstances | |
INTERFACE(ISetupConfiguration, IUnknown): | |
proc EnumInstances(ppEnumInstances: ptr PIEnumSetupInstances): HRESULT | |
proc GetInstanceForCurrentProcess(ppInstance: ptr PISetupInstance): HRESULT | |
proc GetInstanceForPath(wzPath: pointer, | |
ppInstance: ptr PISetupInstance): HRESULT | |
type PISetupConfiguration = ptr ISetupConfiguration | |
when isMainModule: | |
var pcf: PIClassFactory = nil | |
var clsid = CLSID_SetupConfiguration | |
var iid = IID_IClassFactory | |
var iid2 = IID_ISetupConfiguration | |
var psc: PISetupConfiguration = nil | |
var pesi: PIEnumSetupInstances = nil | |
var p: pointer | |
echo toHex(cast[uint64](pcf)) | |
var res = CoGetClassObject(addr(clsid), | |
CLSCTX_LOCAL_SERVER or CLSCTX_INPROC_SERVER, | |
nil, addr(iid), addr(pcf)) | |
if SUCCEEDED(res): | |
res = pcf.CreateInstance(nil, cast[REFIID](addr(iid2)), cast[pointer](addr(psc))) | |
if SUCCEEDED(res): | |
res = psc.EnumInstances(addr(pesi)) | |
if SUCCEEDED(res): | |
discard | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment