libwin32
Version:
Node bindings to native Win32 DLLs through Koffi
102 lines • 5.25 kB
JavaScript
import koffi from 'koffi-cream';
import { cPOLICY_AUDIT_EVENTS_INFO, cPOLICY_PRIMARY_DOMAIN_INFO, cPOLICY_ACCOUNT_DOMAIN_INFO, cPOLICY_LSA_SERVER_ROLE_INFO, cPOLICY_MODIFICATION_INFO, cPOLICY_DNS_DOMAIN_INFO, cSID } from '../structs.js';
import { NTSTATUS_, POLICY_INFORMATION_CLASS } from '../consts.js';
import { queryPolicyInfo, lsaFree } from './lib.js';
/**
* Retrieves the system's auditing rules.
*
* https://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-lsaqueryinformationpolicy
*/
export function LsaQueryAuditEventsInformationPolicy(policyHandle) {
const ptr = queryPolicyInfo(policyHandle, 2 /* INTERNAL_POLICY_INFORMATION_CLASS.PolicyAuditEventsInformation */);
if (typeof ptr === 'number')
return ptr;
const ret = koffi.decode(ptr, cPOLICY_AUDIT_EVENTS_INFO);
return lsaFree(ret), ret;
}
/**
* Retrieves the name and SID of the system's primary domain.
*
* https://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-lsaqueryinformationpolicy
*/
export function LsaQueryPrimaryDomainInformationPolicy(policyHandle) {
const ptr = queryPolicyInfo(policyHandle, 3 /* INTERNAL_POLICY_INFORMATION_CLASS.PolicyPrimaryDomainInformation */);
if (typeof ptr === 'number')
return ptr;
const ret = koffi.decode(ptr, cPOLICY_PRIMARY_DOMAIN_INFO);
ret.Sid = koffi.decode(ret.Sid, cSID);
return lsaFree(ret), ret;
}
/**
* Retrieves the name and SID of the system's account domain.
*
* https://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-lsaqueryinformationpolicy
*/
export function LsaQueryAccountDomainInformationPolicy(policyHandle) {
const ptr = queryPolicyInfo(policyHandle, 5 /* INTERNAL_POLICY_INFORMATION_CLASS.PolicyAccountDomainInformation */);
if (typeof ptr === 'number')
return ptr;
const ret = koffi.decode(ptr, cPOLICY_ACCOUNT_DOMAIN_INFO);
ret.DomainSid = koffi.decode(ret.DomainSid, cSID);
return lsaFree(ret), ret;
}
/**
* Query the role of an LSA server.
*
* https://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-lsaqueryinformationpolicy
*/
export function LsaQueryLsaServerRoleInformationPolicy(policyHandle) {
const ptr = queryPolicyInfo(policyHandle, 6 /* INTERNAL_POLICY_INFORMATION_CLASS.PolicyLsaServerRoleInformation */);
if (typeof ptr === 'number')
return ptr;
const ret = koffi.decode(ptr, cPOLICY_LSA_SERVER_ROLE_INFO);
return lsaFree(ret), ret;
}
/**
* Retrieves information about the creation time and last modification of the LSA database.
*
* https://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-lsaqueryinformationpolicy
*/
export function LsaQueryModificationInformationPolicy(policyHandle) {
const ptr = queryPolicyInfo(policyHandle, 9 /* INTERNAL_POLICY_INFORMATION_CLASS.PolicyModificationInformation */);
if (typeof ptr === 'number')
return ptr;
const ret = koffi.decode(ptr, cPOLICY_MODIFICATION_INFO);
return lsaFree(ret), ret;
}
/**
* Query Domain Name System (DNS) information about the account domain associated with a Policy object.
*
* https://learn.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-lsaqueryinformationpolicy
*/
export function LsaQueryDnsDomainInformationPolicy(policyHandle) {
const ptr = queryPolicyInfo(policyHandle, 12 /* INTERNAL_POLICY_INFORMATION_CLASS.PolicyDnsDomainInformation */);
if (typeof ptr === 'number')
return ptr;
const ret = koffi.decode(ptr, cPOLICY_DNS_DOMAIN_INFO);
ret.Sid = koffi.decode(ret.Sid, cSID);
return lsaFree(ret), ret;
}
export function LsaQueryInformationPolicy(policyHandle, infoClass) {
switch (infoClass) {
case POLICY_INFORMATION_CLASS.PolicyAuditEventsInformation: return LsaQueryAuditEventsInformationPolicy(policyHandle);
case POLICY_INFORMATION_CLASS.PolicyPrimaryDomainInformation: return LsaQueryPrimaryDomainInformationPolicy(policyHandle);
case POLICY_INFORMATION_CLASS.PolicyAccountDomainInformation: return LsaQueryAccountDomainInformationPolicy(policyHandle);
case POLICY_INFORMATION_CLASS.PolicyLsaServerRoleInformation: return LsaQueryLsaServerRoleInformationPolicy(policyHandle);
case POLICY_INFORMATION_CLASS.PolicyModificationInformation: return LsaQueryModificationInformationPolicy(policyHandle);
case POLICY_INFORMATION_CLASS.PolicyDnsDomainInformation: return LsaQueryDnsDomainInformationPolicy(policyHandle);
case POLICY_INFORMATION_CLASS.PolicyAuditLogInformation:
case POLICY_INFORMATION_CLASS.PolicyPdAccountInformation:
case POLICY_INFORMATION_CLASS.PolicyReplicaSourceInformation:
case POLICY_INFORMATION_CLASS.PolicyDefaultQuotaInformation:
case POLICY_INFORMATION_CLASS.PolicyAuditFullSetInformation:
case POLICY_INFORMATION_CLASS.PolicyAuditFullQueryInformation:
case POLICY_INFORMATION_CLASS.PolicyDnsDomainInformationInt:
case POLICY_INFORMATION_CLASS.PolicyLocalAccountDomainInformation:
case POLICY_INFORMATION_CLASS.PolicyMachineAccountInformation:
return NTSTATUS_.NOT_SUPPORTED;
default:
return NTSTATUS_.INVALID_PARAMETER;
}
}
//# sourceMappingURL=lsa_query.js.map