In the ZtDeviceStartModule() function of ztdns.sys, it calls IoCreateDevice() to create L"\\Device\\ZTDNS" device, and then calls NtSetSecurityObject() to a SecurityDescriptor to this device object. From this, only the members of Administrators, SYSTEM and Dnscache can open it. The code snippet and debugging information is as follows. int ZtDeviceStartModule(void) { ... DeviceName.Buffer = L"\\Device\\ZTDNS"; Status = IoCreateDevice(DriverObject, 0, &DeviceName, 0x12u, 0, 0, &DeviceObject); Status = ObOpenObjectByPointer(DeviceObject, 0x240u, 0i64, 0x2000000u, 0i64, 0, &DeviceHandle); Status = NtSetSecurityObject(DeviceHandle, 4u, &gDeviceSecurityDescriptor); ... } 1: kd> !object \device\ztdns Object: ffff850ad52366b0 Type: (ffff850acc6bfe00) Device ObjectHeader: ffff850ad5236680 (new version) HandleCount: 0 PointerCount: 4 Directory Object: ffffce0f782288f0 Name: ZTDNS 1: kd> !devobj ffff850ad52366b0 Device object (ffff850ad52366b0) is for: ZTDNS \Driver\ZTDNS DriverObject ffff850ad49d9b90 Current Irp 00000000 RefCount 1 Type 00000012 Flags 00000040 SecurityDescriptor ffffce0f8d816560 DevExt 00000000 DevObjExt ffff850ad5236800 ExtensionFlags (0000000000) Characteristics (0000000000) Device queue is not busy. 1: kd> !sd ffffce0f8d816560 0x1 ->Revision: 0x1 ->Sbz1 : 0x0 ->Control : 0x9004 SE_DACL_PRESENT SE_DACL_PROTECTED SE_SELF_RELATIVE ->Owner : S-1-5-32-544 (Alias: BUILTIN\Administrators) ->Group : S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM) ->Dacl : ->Dacl : ->AclRevision: 0x2 ->Dacl : ->Sbz1 : 0x0 ->Dacl : ->AclSize : 0x5c ->Dacl : ->AceCount : 0x3 ->Dacl : ->Sbz2 : 0x0 ->Dacl : ->Ace[0]: ->AceType: ACCESS_ALLOWED_ACE_TYPE ->Dacl : ->Ace[0]: ->AceFlags: 0x0 ->Dacl : ->Ace[0]: ->AceSize: 0x14 ->Dacl : ->Ace[0]: ->Mask : 0x001f01ff ->Dacl : ->Ace[0]: ->SID: S-1-5-18 (Well Known Group: NT AUTHORITY\SYSTEM) ->Dacl : ->Ace[1]: ->AceType: ACCESS_ALLOWED_ACE_TYPE ->Dacl : ->Ace[1]: ->AceFlags: 0x0 ->Dacl : ->Ace[1]: ->AceSize: 0x18 ->Dacl : ->Ace[1]: ->Mask : 0x001f01ff ->Dacl : ->Ace[1]: ->SID: S-1-5-32-544 (Alias: BUILTIN\Administrators) ->Dacl : ->Ace[2]: ->AceType: ACCESS_ALLOWED_ACE_TYPE ->Dacl : ->Ace[2]: ->AceFlags: 0x0 ->Dacl : ->Ace[2]: ->AceSize: 0x28 ->Dacl : ->Ace[2]: ->Mask : 0x0012019f ->Dacl : ->Ace[2]: ->SID: S-1-5-80-859482183-879914841-863379149-1145462774-2388618682 (Well Known Group: NT SERVICE\Dnscache) ->Sacl : is NULL But it does not specify FILE_DEVICE_SECURE_OPEN characteristic for the parameter DeviceCharacteristics of IoCreateDevice(). So unprivileged users can still use L"\\Device\\ZTDNS\\" or L"\\Device\\ZTDNS\\xxx" to open this device. Then sending Ioctl code 12800Bh calls ZtSetGlobalPropertiesFastIo() to set global properties: struct _ZT_GLOBAL_PROPERTIES { bool fEnableFilters; bool fPersistFilters; bool fAuditMode; bool fAllowMdns; bool fAllowPlaintextDns; bool fBlockLocalIps; bool fAllowIcsDhcpServer; DWORD dwUnicastLifetime; DWORD MaxRecordAge; }; BOOLEAN __fastcall ZtSetGlobalPropertiesFastIo( ... if ( InputBuffer && InputBufferLength32 == 0x10 && OutputBuffer && OutputBufferLength == 0x10 ) { Status = ZtCaptureUserMemory(InputBuffer, 0x10ui64, 4u, PreviousMode, &CapturedProperties); if ( Status >= 0 ) { Status = ZtTryProbeAlignment(OutputBuffer, 0x10ui64, PreviousMode); if ( Status >= 0 ) { if... g_fEnableFilters = CapturedProperties.fEnableFilters; g_fPersistFilters = CapturedProperties.fPersistFilters; g_fAuditMode = CapturedProperties.fAuditMode; g_fAllowMdns = CapturedProperties.fAllowMdns; g_fBlockLocalIps = CapturedProperties.fBlockLocalIps; g_fAllowIcsDhcpServer = CapturedProperties.fAllowIcsDhcpServer; g_dwUnicastLifetime = CapturedProperties.dwUnicastLifetime; g_MaxRecordAge = CapturedProperties.MaxRecordAge; AllowPlaintextDns = 0; if ( g_fZtdnsSelfhostBranch ) LOBYTE(AllowPlaintextDns) = CapturedProperties.fAllowPlaintextDns; *&g_fAllowPlaintextDns = AllowPlaintextDns; Status = ZtWfpConfigureFilters(CapturedProperties.fEnableFilters, Unused, FilterIds, &FilterIds[1]); if ( Status >= 0 ) Status = ZtTryCopyUserMemory(OutputBuffer, FilterIds, PreviousMode); } } } ... } For example, setting g_fAuditMode=true can change the mode from Enforcement to Audit, this will permit all outbound connections. void __fastcall ZtCalloutConnectClassify( ... if ( ZtpAllowConnection(inFixedValues, inMetaValues) || g_fAuditMode ) { actionType = 0x1002; // FWP_ACTION_PERMIT } else { actionType = 0x1001; // FWP_ACTION_BLOCK Veto = 1; } classifyOut->actionType = actionType; if ( Veto ) classifyOut->rights &= ~1u; ... }