// I changed the struct to a class
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private class POLICY_DNS_DOMAIN_INFO {
public LSA_UNICODE_STRING Name;
public LSA_UNICODE_STRING DnsDomainName;
public LSA_UNICODE_STRING DnsForestName;
public GUID DomainGuid;
public IntPtr pSID;
}
// Additional code removed for simplicity
resultQueryPolicy = LsaQueryInformationPolicy(
policyHandle,
POLICY_INFORMATION_CLASS.PolicyDnsDomainInformation,
out IntPtr infoStructure
);
winErrorCode = LsaNtStatusToWinError(resultQueryPolicy);
if (winErrorCode == 0) {
// I applied T?
POLICY_DNS_DOMAIN_INFO? domain = (POLICY_DNS_DOMAIN_INFO?)Marshal.PtrToStructure(infoStructure, typeof(POLICY_DNS_DOMAIN_INFO));
// Additional code removed for simplicity
}
Я ищу альтернативное решение (надеюсь, простое) без необходимости преобразования структуры в класс. Возможно ли это?
Для следующего кода я получаю предупреждение Распаковка возможного нулевого значения. (CS8605) в VS Code с C# Dev Kit: [img]https://i.sstatic.net/ H3X89XGO.png[/img]
Исходный код с предупреждением: [code]// Originally a struct [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] private struct POLICY_DNS_DOMAIN_INFO { public LSA_UNICODE_STRING Name; public LSA_UNICODE_STRING DnsDomainName; public LSA_UNICODE_STRING DnsForestName; public GUID DomainGuid; public IntPtr pSID; }
// Additional code removed for simplicity
resultQueryPolicy = LsaQueryInformationPolicy( policyHandle, POLICY_INFORMATION_CLASS.PolicyDnsDomainInformation, out IntPtr infoStructure );
// Additional code removed for simplicity } [/code] Текущее рабочее решение: [code]// I changed the struct to a class [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] private class POLICY_DNS_DOMAIN_INFO { public LSA_UNICODE_STRING Name; public LSA_UNICODE_STRING DnsDomainName; public LSA_UNICODE_STRING DnsForestName; public GUID DomainGuid; public IntPtr pSID; }
// Additional code removed for simplicity
resultQueryPolicy = LsaQueryInformationPolicy( policyHandle, POLICY_INFORMATION_CLASS.PolicyDnsDomainInformation, out IntPtr infoStructure );
// I applied T? POLICY_DNS_DOMAIN_INFO? domain = (POLICY_DNS_DOMAIN_INFO?)Marshal.PtrToStructure(infoStructure, typeof(POLICY_DNS_DOMAIN_INFO));
// Additional code removed for simplicity } [/code] Я ищу альтернативное решение (надеюсь, простое) без необходимости преобразования структуры в класс. Возможно ли это?