
Исходный код с предупреждением:
Код: Выделить всё
// 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
);
winErrorCode = LsaNtStatusToWinError(resultQueryPolicy);
if (winErrorCode == 0) {
POLICY_DNS_DOMAIN_INFO domain = (POLICY_DNS_DOMAIN_INFO)Marshal.PtrToStructure(infoStructure, typeof(POLICY_DNS_DOMAIN_INFO));
// Additional code removed for simplicity
}
Код: Выделить всё
// 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
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... rnative-so