diff --git a/librpc/idl/netlogon.idl b/librpc/idl/netlogon.idl index 77c0e7a..832fb3e 100644 --- a/librpc/idl/netlogon.idl +++ b/librpc/idl/netlogon.idl @@ -1260,20 +1260,36 @@ interface netlogon } netr_LsaPolicyInformation; typedef [public] struct { - uint32 dwOSVersionInfoSize; - uint32 dwMajorVersion; - uint32 dwMinorVersion; - uint32 dwBuildNumber; - uint32 dwPlatformId; - char szCSDVersion[128]; - uint16 wServicePackMajor; - uint16 wServicePackMinor; + [value(284)] uint32 OSVersionInfoSize; + uint32 MajorVersion; + uint32 MinorVersion; + uint32 BuildNumber; + uint32 PlatformId; + [charset(UTF16)] uint16 CSDVersion[128]; + uint16 ServicePackMajor; + uint16 ServicePackMinor; netr_SuiteMask wSuiteMask; netr_ProductType wProductType; uint8 wReserved; } netr_OsVersionInfoEx; typedef struct { + /* these first 3 values come from the fact windows + actually encodes this structure as a UNICODE_STRING + - see MS-NRPC section 2.2.1.3.9 */ + [value(284)] uint32 length; + [value(0)] uint32 dummy; + [value(284)] uint32 size; + netr_OsVersionInfoEx os; + } netr_os_version; + + typedef struct { + [value(os == NULL ? 0 : 142)] uint16 length; /* value is 284 when info != os, otherwise 0 */ + [value(os == NULL ? 0 : 142)] uint16 size; /* value is 284 when info != os, otherwise 0 */ + netr_os_version *os; + } netr_os_version_container; + + typedef struct { netr_LsaPolicyInformation lsa_policy; [string,charset(UTF16)] uint16 *dns_hostname; [string,charset(UTF16)] uint16 *sitename; @@ -1281,7 +1297,7 @@ interface netlogon [string,charset(UTF16)] uint16 *dummy2; [string,charset(UTF16)] uint16 *dummy3; [string,charset(UTF16)] uint16 *dummy4; - lsa_BinaryString os_version; + netr_os_version_container os_version; lsa_String os_name; lsa_String dummy_string3; lsa_String dummy_string4; @@ -1357,7 +1373,7 @@ interface netlogon [in,ref] netr_Authenticator *credential, [in,out,ref] netr_Authenticator *return_authenticator, [in] uint32 level, - [in,ref,switch_is(level)] netr_WorkstationInfo *query, + [in,switch_is(level)] netr_WorkstationInfo query, [out,ref,switch_is(level)] netr_DomainInfo *info );