Lsarpc.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161
  1. // This code is derived from jcifs smb client library <jcifs at samba dot org>
  2. // Ported by J. Arturo <webmaster at komodosoft dot net>
  3. //
  4. // This library is free software; you can redistribute it and/or
  5. // modify it under the terms of the GNU Lesser General Public
  6. // License as published by the Free Software Foundation; either
  7. // version 2.1 of the License, or (at your option) any later version.
  8. //
  9. // This library is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. // Lesser General Public License for more details.
  13. //
  14. // You should have received a copy of the GNU Lesser General Public
  15. // License along with this library; if not, write to the Free Software
  16. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  17. using SharpCifs.Dcerpc.Ndr;
  18. namespace SharpCifs.Dcerpc.Msrpc
  19. {
  20. public class Lsarpc
  21. {
  22. public static string GetSyntax()
  23. {
  24. return "12345778-1234-abcd-ef00-0123456789ab:0.0";
  25. }
  26. public class LsarQosInfo : NdrObject
  27. {
  28. public int Length;
  29. public short ImpersonationLevel;
  30. public byte ContextMode;
  31. public byte EffectiveOnly;
  32. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  33. public override void Encode(NdrBuffer dst)
  34. {
  35. dst.Align(4);
  36. dst.Enc_ndr_long(Length);
  37. dst.Enc_ndr_short(ImpersonationLevel);
  38. dst.Enc_ndr_small(ContextMode);
  39. dst.Enc_ndr_small(EffectiveOnly);
  40. }
  41. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  42. public override void Decode(NdrBuffer src)
  43. {
  44. src.Align(4);
  45. Length = src.Dec_ndr_long();
  46. ImpersonationLevel = (short)src.Dec_ndr_short();
  47. ContextMode = unchecked((byte)src.Dec_ndr_small());
  48. EffectiveOnly = unchecked((byte)src.Dec_ndr_small());
  49. }
  50. }
  51. public class LsarObjectAttributes : NdrObject
  52. {
  53. public int Length;
  54. public NdrSmall RootDirectory;
  55. public Rpc.Unicode_string ObjectName;
  56. public int Attributes;
  57. public int SecurityDescriptor;
  58. public LsarQosInfo SecurityQualityOfService;
  59. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  60. public override void Encode(NdrBuffer dst)
  61. {
  62. dst.Align(4);
  63. dst.Enc_ndr_long(Length);
  64. dst.Enc_ndr_referent(RootDirectory, 1);
  65. dst.Enc_ndr_referent(ObjectName, 1);
  66. dst.Enc_ndr_long(Attributes);
  67. dst.Enc_ndr_long(SecurityDescriptor);
  68. dst.Enc_ndr_referent(SecurityQualityOfService, 1);
  69. if (RootDirectory != null)
  70. {
  71. dst = dst.Deferred;
  72. RootDirectory.Encode(dst);
  73. }
  74. if (ObjectName != null)
  75. {
  76. dst = dst.Deferred;
  77. ObjectName.Encode(dst);
  78. }
  79. if (SecurityQualityOfService != null)
  80. {
  81. dst = dst.Deferred;
  82. SecurityQualityOfService.Encode(dst);
  83. }
  84. }
  85. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  86. public override void Decode(NdrBuffer src)
  87. {
  88. src.Align(4);
  89. Length = src.Dec_ndr_long();
  90. int rootDirectoryp = src.Dec_ndr_long();
  91. int objectNamep = src.Dec_ndr_long();
  92. Attributes = src.Dec_ndr_long();
  93. SecurityDescriptor = src.Dec_ndr_long();
  94. int securityQualityOfServicep = src.Dec_ndr_long();
  95. if (rootDirectoryp != 0)
  96. {
  97. src = src.Deferred;
  98. RootDirectory.Decode(src);
  99. }
  100. if (objectNamep != 0)
  101. {
  102. if (ObjectName == null)
  103. {
  104. ObjectName = new Rpc.Unicode_string();
  105. }
  106. src = src.Deferred;
  107. ObjectName.Decode(src);
  108. }
  109. if (securityQualityOfServicep != 0)
  110. {
  111. if (SecurityQualityOfService == null)
  112. {
  113. SecurityQualityOfService = new LsarQosInfo();
  114. }
  115. src = src.Deferred;
  116. SecurityQualityOfService.Decode(src);
  117. }
  118. }
  119. }
  120. public class LsarDomainInfo : NdrObject
  121. {
  122. public Rpc.Unicode_string Name;
  123. public Rpc.SidT Sid;
  124. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  125. public override void Encode(NdrBuffer dst)
  126. {
  127. dst.Align(4);
  128. dst.Enc_ndr_short(Name.Length);
  129. dst.Enc_ndr_short(Name.MaximumLength);
  130. dst.Enc_ndr_referent(Name.Buffer, 1);
  131. dst.Enc_ndr_referent(Sid, 1);
  132. if (Name.Buffer != null)
  133. {
  134. dst = dst.Deferred;
  135. int nameBufferl = Name.Length / 2;
  136. int nameBuffers = Name.MaximumLength / 2;
  137. dst.Enc_ndr_long(nameBuffers);
  138. dst.Enc_ndr_long(0);
  139. dst.Enc_ndr_long(nameBufferl);
  140. int nameBufferi = dst.Index;
  141. dst.Advance(2 * nameBufferl);
  142. dst = dst.Derive(nameBufferi);
  143. for (int i = 0; i < nameBufferl; i++)
  144. {
  145. dst.Enc_ndr_short(Name.Buffer[i]);
  146. }
  147. }
  148. if (Sid != null)
  149. {
  150. dst = dst.Deferred;
  151. Sid.Encode(dst);
  152. }
  153. }
  154. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  155. public override void Decode(NdrBuffer src)
  156. {
  157. src.Align(4);
  158. src.Align(4);
  159. if (Name == null)
  160. {
  161. Name = new Rpc.Unicode_string();
  162. }
  163. Name.Length = (short)src.Dec_ndr_short();
  164. Name.MaximumLength = (short)src.Dec_ndr_short();
  165. int nameBufferp = src.Dec_ndr_long();
  166. int sidp = src.Dec_ndr_long();
  167. if (nameBufferp != 0)
  168. {
  169. src = src.Deferred;
  170. int nameBuffers = src.Dec_ndr_long();
  171. src.Dec_ndr_long();
  172. int nameBufferl = src.Dec_ndr_long();
  173. int nameBufferi = src.Index;
  174. src.Advance(2 * nameBufferl);
  175. if (Name.Buffer == null)
  176. {
  177. if (nameBuffers < 0 || nameBuffers > unchecked(0xFFFF))
  178. {
  179. throw new NdrException(NdrException.InvalidConformance);
  180. }
  181. Name.Buffer = new short[nameBuffers];
  182. }
  183. src = src.Derive(nameBufferi);
  184. for (int i = 0; i < nameBufferl; i++)
  185. {
  186. Name.Buffer[i] = (short)src.Dec_ndr_short();
  187. }
  188. }
  189. if (sidp != 0)
  190. {
  191. if (Sid == null)
  192. {
  193. Sid = new Rpc.SidT();
  194. }
  195. src = src.Deferred;
  196. Sid.Decode(src);
  197. }
  198. }
  199. }
  200. public class LsarDnsDomainInfo : NdrObject
  201. {
  202. public Rpc.Unicode_string Name;
  203. public Rpc.Unicode_string DnsDomain;
  204. public Rpc.Unicode_string DnsForest;
  205. public Rpc.UuidT DomainGuid;
  206. public Rpc.SidT Sid;
  207. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  208. public override void Encode(NdrBuffer dst)
  209. {
  210. dst.Align(4);
  211. dst.Enc_ndr_short(Name.Length);
  212. dst.Enc_ndr_short(Name.MaximumLength);
  213. dst.Enc_ndr_referent(Name.Buffer, 1);
  214. dst.Enc_ndr_short(DnsDomain.Length);
  215. dst.Enc_ndr_short(DnsDomain.MaximumLength);
  216. dst.Enc_ndr_referent(DnsDomain.Buffer, 1);
  217. dst.Enc_ndr_short(DnsForest.Length);
  218. dst.Enc_ndr_short(DnsForest.MaximumLength);
  219. dst.Enc_ndr_referent(DnsForest.Buffer, 1);
  220. dst.Enc_ndr_long(DomainGuid.TimeLow);
  221. dst.Enc_ndr_short(DomainGuid.TimeMid);
  222. dst.Enc_ndr_short(DomainGuid.TimeHiAndVersion);
  223. dst.Enc_ndr_small(DomainGuid.ClockSeqHiAndReserved);
  224. dst.Enc_ndr_small(DomainGuid.ClockSeqLow);
  225. int domainGuidNodes = 6;
  226. int domainGuidNodei = dst.Index;
  227. dst.Advance(1 * domainGuidNodes);
  228. dst.Enc_ndr_referent(Sid, 1);
  229. if (Name.Buffer != null)
  230. {
  231. dst = dst.Deferred;
  232. int nameBufferl = Name.Length / 2;
  233. int nameBuffers = Name.MaximumLength / 2;
  234. dst.Enc_ndr_long(nameBuffers);
  235. dst.Enc_ndr_long(0);
  236. dst.Enc_ndr_long(nameBufferl);
  237. int nameBufferi = dst.Index;
  238. dst.Advance(2 * nameBufferl);
  239. dst = dst.Derive(nameBufferi);
  240. for (int i = 0; i < nameBufferl; i++)
  241. {
  242. dst.Enc_ndr_short(Name.Buffer[i]);
  243. }
  244. }
  245. if (DnsDomain.Buffer != null)
  246. {
  247. dst = dst.Deferred;
  248. int dnsDomainBufferl = DnsDomain.Length / 2;
  249. int dnsDomainBuffers = DnsDomain.MaximumLength / 2;
  250. dst.Enc_ndr_long(dnsDomainBuffers);
  251. dst.Enc_ndr_long(0);
  252. dst.Enc_ndr_long(dnsDomainBufferl);
  253. int dnsDomainBufferi = dst.Index;
  254. dst.Advance(2 * dnsDomainBufferl);
  255. dst = dst.Derive(dnsDomainBufferi);
  256. for (int i = 0; i < dnsDomainBufferl; i++)
  257. {
  258. dst.Enc_ndr_short(DnsDomain.Buffer[i]);
  259. }
  260. }
  261. if (DnsForest.Buffer != null)
  262. {
  263. dst = dst.Deferred;
  264. int dnsForestBufferl = DnsForest.Length / 2;
  265. int dnsForestBuffers = DnsForest.MaximumLength / 2;
  266. dst.Enc_ndr_long(dnsForestBuffers);
  267. dst.Enc_ndr_long(0);
  268. dst.Enc_ndr_long(dnsForestBufferl);
  269. int dnsForestBufferi = dst.Index;
  270. dst.Advance(2 * dnsForestBufferl);
  271. dst = dst.Derive(dnsForestBufferi);
  272. for (int i = 0; i < dnsForestBufferl; i++)
  273. {
  274. dst.Enc_ndr_short(DnsForest.Buffer[i]);
  275. }
  276. }
  277. dst = dst.Derive(domainGuidNodei);
  278. for (int i1 = 0; i1 < domainGuidNodes; i1++)
  279. {
  280. dst.Enc_ndr_small(DomainGuid.Node[i1]);
  281. }
  282. if (Sid != null)
  283. {
  284. dst = dst.Deferred;
  285. Sid.Encode(dst);
  286. }
  287. }
  288. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  289. public override void Decode(NdrBuffer src)
  290. {
  291. src.Align(4);
  292. src.Align(4);
  293. if (Name == null)
  294. {
  295. Name = new Rpc.Unicode_string();
  296. }
  297. Name.Length = (short)src.Dec_ndr_short();
  298. Name.MaximumLength = (short)src.Dec_ndr_short();
  299. int nameBufferp = src.Dec_ndr_long();
  300. src.Align(4);
  301. if (DnsDomain == null)
  302. {
  303. DnsDomain = new Rpc.Unicode_string();
  304. }
  305. DnsDomain.Length = (short)src.Dec_ndr_short();
  306. DnsDomain.MaximumLength = (short)src.Dec_ndr_short();
  307. int dnsDomainBufferp = src.Dec_ndr_long();
  308. src.Align(4);
  309. if (DnsForest == null)
  310. {
  311. DnsForest = new Rpc.Unicode_string();
  312. }
  313. DnsForest.Length = (short)src.Dec_ndr_short();
  314. DnsForest.MaximumLength = (short)src.Dec_ndr_short();
  315. int dnsForestBufferp = src.Dec_ndr_long();
  316. src.Align(4);
  317. if (DomainGuid == null)
  318. {
  319. DomainGuid = new Rpc.UuidT();
  320. }
  321. DomainGuid.TimeLow = src.Dec_ndr_long();
  322. DomainGuid.TimeMid = (short)src.Dec_ndr_short();
  323. DomainGuid.TimeHiAndVersion = (short)src.Dec_ndr_short();
  324. DomainGuid.ClockSeqHiAndReserved = unchecked((byte)src.Dec_ndr_small());
  325. DomainGuid.ClockSeqLow = unchecked((byte)src.Dec_ndr_small());
  326. int domainGuidNodes = 6;
  327. int domainGuidNodei = src.Index;
  328. src.Advance(1 * domainGuidNodes);
  329. int sidp = src.Dec_ndr_long();
  330. if (nameBufferp != 0)
  331. {
  332. src = src.Deferred;
  333. int nameBuffers = src.Dec_ndr_long();
  334. src.Dec_ndr_long();
  335. int nameBufferl = src.Dec_ndr_long();
  336. int nameBufferi = src.Index;
  337. src.Advance(2 * nameBufferl);
  338. if (Name.Buffer == null)
  339. {
  340. if (nameBuffers < 0 || nameBuffers > unchecked(0xFFFF))
  341. {
  342. throw new NdrException(NdrException.InvalidConformance);
  343. }
  344. Name.Buffer = new short[nameBuffers];
  345. }
  346. src = src.Derive(nameBufferi);
  347. for (int i = 0; i < nameBufferl; i++)
  348. {
  349. Name.Buffer[i] = (short)src.Dec_ndr_short();
  350. }
  351. }
  352. if (dnsDomainBufferp != 0)
  353. {
  354. src = src.Deferred;
  355. int dnsDomainBuffers = src.Dec_ndr_long();
  356. src.Dec_ndr_long();
  357. int dnsDomainBufferl = src.Dec_ndr_long();
  358. int dnsDomainBufferi = src.Index;
  359. src.Advance(2 * dnsDomainBufferl);
  360. if (DnsDomain.Buffer == null)
  361. {
  362. if (dnsDomainBuffers < 0 || dnsDomainBuffers > unchecked(0xFFFF))
  363. {
  364. throw new NdrException(NdrException.InvalidConformance);
  365. }
  366. DnsDomain.Buffer = new short[dnsDomainBuffers];
  367. }
  368. src = src.Derive(dnsDomainBufferi);
  369. for (int i = 0; i < dnsDomainBufferl; i++)
  370. {
  371. DnsDomain.Buffer[i] = (short)src.Dec_ndr_short();
  372. }
  373. }
  374. if (dnsForestBufferp != 0)
  375. {
  376. src = src.Deferred;
  377. int dnsForestBuffers = src.Dec_ndr_long();
  378. src.Dec_ndr_long();
  379. int dnsForestBufferl = src.Dec_ndr_long();
  380. int dnsForestBufferi = src.Index;
  381. src.Advance(2 * dnsForestBufferl);
  382. if (DnsForest.Buffer == null)
  383. {
  384. if (dnsForestBuffers < 0 || dnsForestBuffers > unchecked(0xFFFF))
  385. {
  386. throw new NdrException(NdrException.InvalidConformance);
  387. }
  388. DnsForest.Buffer = new short[dnsForestBuffers];
  389. }
  390. src = src.Derive(dnsForestBufferi);
  391. for (int i = 0; i < dnsForestBufferl; i++)
  392. {
  393. DnsForest.Buffer[i] = (short)src.Dec_ndr_short();
  394. }
  395. }
  396. if (DomainGuid.Node == null)
  397. {
  398. if (domainGuidNodes < 0 || domainGuidNodes > unchecked(0xFFFF))
  399. {
  400. throw new NdrException(NdrException.InvalidConformance);
  401. }
  402. DomainGuid.Node = new byte[domainGuidNodes];
  403. }
  404. src = src.Derive(domainGuidNodei);
  405. for (int i1 = 0; i1 < domainGuidNodes; i1++)
  406. {
  407. DomainGuid.Node[i1] = unchecked((byte)src.Dec_ndr_small());
  408. }
  409. if (sidp != 0)
  410. {
  411. if (Sid == null)
  412. {
  413. Sid = new Rpc.SidT();
  414. }
  415. src = src.Deferred;
  416. Sid.Decode(src);
  417. }
  418. }
  419. }
  420. public const int PolicyInfoAuditEvents = 2;
  421. public const int PolicyInfoPrimaryDomain = 3;
  422. public const int PolicyInfoAccountDomain = 5;
  423. public const int PolicyInfoServerRole = 6;
  424. public const int PolicyInfoModification = 9;
  425. public const int PolicyInfoDnsDomain = 12;
  426. public class LsarSidPtr : NdrObject
  427. {
  428. public Rpc.SidT Sid;
  429. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  430. public override void Encode(NdrBuffer dst)
  431. {
  432. dst.Align(4);
  433. dst.Enc_ndr_referent(Sid, 1);
  434. if (Sid != null)
  435. {
  436. dst = dst.Deferred;
  437. Sid.Encode(dst);
  438. }
  439. }
  440. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  441. public override void Decode(NdrBuffer src)
  442. {
  443. src.Align(4);
  444. int sidp = src.Dec_ndr_long();
  445. if (sidp != 0)
  446. {
  447. if (Sid == null)
  448. {
  449. Sid = new Rpc.SidT();
  450. }
  451. src = src.Deferred;
  452. Sid.Decode(src);
  453. }
  454. }
  455. }
  456. public class LsarSidArray : NdrObject
  457. {
  458. public int NumSids;
  459. public LsarSidPtr[] Sids;
  460. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  461. public override void Encode(NdrBuffer dst)
  462. {
  463. dst.Align(4);
  464. dst.Enc_ndr_long(NumSids);
  465. dst.Enc_ndr_referent(Sids, 1);
  466. if (Sids != null)
  467. {
  468. dst = dst.Deferred;
  469. int sidss = NumSids;
  470. dst.Enc_ndr_long(sidss);
  471. int sidsi = dst.Index;
  472. dst.Advance(4 * sidss);
  473. dst = dst.Derive(sidsi);
  474. for (int i = 0; i < sidss; i++)
  475. {
  476. Sids[i].Encode(dst);
  477. }
  478. }
  479. }
  480. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  481. public override void Decode(NdrBuffer src)
  482. {
  483. src.Align(4);
  484. NumSids = src.Dec_ndr_long();
  485. int sidsp = src.Dec_ndr_long();
  486. if (sidsp != 0)
  487. {
  488. src = src.Deferred;
  489. int sidss = src.Dec_ndr_long();
  490. int sidsi = src.Index;
  491. src.Advance(4 * sidss);
  492. if (Sids == null)
  493. {
  494. if (sidss < 0 || sidss > unchecked(0xFFFF))
  495. {
  496. throw new NdrException(NdrException.InvalidConformance);
  497. }
  498. Sids = new LsarSidPtr[sidss];
  499. }
  500. src = src.Derive(sidsi);
  501. for (int i = 0; i < sidss; i++)
  502. {
  503. if (Sids[i] == null)
  504. {
  505. Sids[i] = new LsarSidPtr();
  506. }
  507. Sids[i].Decode(src);
  508. }
  509. }
  510. }
  511. }
  512. public const int SidNameUseNone = 0;
  513. public const int SidNameUser = 1;
  514. public const int SidNameDomGrp = 2;
  515. public const int SidNameDomain = 3;
  516. public const int SidNameAlias = 4;
  517. public const int SidNameWknGrp = 5;
  518. public const int SidNameDeleted = 6;
  519. public const int SidNameInvalid = 7;
  520. public const int SidNameUnknown = 8;
  521. public class LsarTranslatedSid : NdrObject
  522. {
  523. public int SidType;
  524. public int Rid;
  525. public int SidIndex;
  526. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  527. public override void Encode(NdrBuffer dst)
  528. {
  529. dst.Align(4);
  530. dst.Enc_ndr_short(SidType);
  531. dst.Enc_ndr_long(Rid);
  532. dst.Enc_ndr_long(SidIndex);
  533. }
  534. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  535. public override void Decode(NdrBuffer src)
  536. {
  537. src.Align(4);
  538. SidType = src.Dec_ndr_short();
  539. Rid = src.Dec_ndr_long();
  540. SidIndex = src.Dec_ndr_long();
  541. }
  542. }
  543. public class LsarTransSidArray : NdrObject
  544. {
  545. public int Count;
  546. public LsarTranslatedSid[] Sids;
  547. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  548. public override void Encode(NdrBuffer dst)
  549. {
  550. dst.Align(4);
  551. dst.Enc_ndr_long(Count);
  552. dst.Enc_ndr_referent(Sids, 1);
  553. if (Sids != null)
  554. {
  555. dst = dst.Deferred;
  556. int sidss = Count;
  557. dst.Enc_ndr_long(sidss);
  558. int sidsi = dst.Index;
  559. dst.Advance(12 * sidss);
  560. dst = dst.Derive(sidsi);
  561. for (int i = 0; i < sidss; i++)
  562. {
  563. Sids[i].Encode(dst);
  564. }
  565. }
  566. }
  567. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  568. public override void Decode(NdrBuffer src)
  569. {
  570. src.Align(4);
  571. Count = src.Dec_ndr_long();
  572. int sidsp = src.Dec_ndr_long();
  573. if (sidsp != 0)
  574. {
  575. src = src.Deferred;
  576. int sidss = src.Dec_ndr_long();
  577. int sidsi = src.Index;
  578. src.Advance(12 * sidss);
  579. if (Sids == null)
  580. {
  581. if (sidss < 0 || sidss > unchecked(0xFFFF))
  582. {
  583. throw new NdrException(NdrException.InvalidConformance);
  584. }
  585. Sids = new LsarTranslatedSid[sidss];
  586. }
  587. src = src.Derive(sidsi);
  588. for (int i = 0; i < sidss; i++)
  589. {
  590. if (Sids[i] == null)
  591. {
  592. Sids[i] = new LsarTranslatedSid();
  593. }
  594. Sids[i].Decode(src);
  595. }
  596. }
  597. }
  598. }
  599. public class LsarTrustInformation : NdrObject
  600. {
  601. public Rpc.Unicode_string Name;
  602. public Rpc.SidT Sid;
  603. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  604. public override void Encode(NdrBuffer dst)
  605. {
  606. dst.Align(4);
  607. dst.Enc_ndr_short(Name.Length);
  608. dst.Enc_ndr_short(Name.MaximumLength);
  609. dst.Enc_ndr_referent(Name.Buffer, 1);
  610. dst.Enc_ndr_referent(Sid, 1);
  611. if (Name.Buffer != null)
  612. {
  613. dst = dst.Deferred;
  614. int nameBufferl = Name.Length / 2;
  615. int nameBuffers = Name.MaximumLength / 2;
  616. dst.Enc_ndr_long(nameBuffers);
  617. dst.Enc_ndr_long(0);
  618. dst.Enc_ndr_long(nameBufferl);
  619. int nameBufferi = dst.Index;
  620. dst.Advance(2 * nameBufferl);
  621. dst = dst.Derive(nameBufferi);
  622. for (int i = 0; i < nameBufferl; i++)
  623. {
  624. dst.Enc_ndr_short(Name.Buffer[i]);
  625. }
  626. }
  627. if (Sid != null)
  628. {
  629. dst = dst.Deferred;
  630. Sid.Encode(dst);
  631. }
  632. }
  633. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  634. public override void Decode(NdrBuffer src)
  635. {
  636. src.Align(4);
  637. src.Align(4);
  638. if (Name == null)
  639. {
  640. Name = new Rpc.Unicode_string();
  641. }
  642. Name.Length = (short)src.Dec_ndr_short();
  643. Name.MaximumLength = (short)src.Dec_ndr_short();
  644. int nameBufferp = src.Dec_ndr_long();
  645. int sidp = src.Dec_ndr_long();
  646. if (nameBufferp != 0)
  647. {
  648. src = src.Deferred;
  649. int nameBuffers = src.Dec_ndr_long();
  650. src.Dec_ndr_long();
  651. int nameBufferl = src.Dec_ndr_long();
  652. int nameBufferi = src.Index;
  653. src.Advance(2 * nameBufferl);
  654. if (Name.Buffer == null)
  655. {
  656. if (nameBuffers < 0 || nameBuffers > unchecked(0xFFFF))
  657. {
  658. throw new NdrException(NdrException.InvalidConformance);
  659. }
  660. Name.Buffer = new short[nameBuffers];
  661. }
  662. src = src.Derive(nameBufferi);
  663. for (int i = 0; i < nameBufferl; i++)
  664. {
  665. Name.Buffer[i] = (short)src.Dec_ndr_short();
  666. }
  667. }
  668. if (sidp != 0)
  669. {
  670. if (Sid == null)
  671. {
  672. Sid = new Rpc.SidT();
  673. }
  674. src = src.Deferred;
  675. Sid.Decode(src);
  676. }
  677. }
  678. }
  679. public class LsarRefDomainList : NdrObject
  680. {
  681. public int Count;
  682. public LsarTrustInformation[] Domains;
  683. public int MaxCount;
  684. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  685. public override void Encode(NdrBuffer dst)
  686. {
  687. dst.Align(4);
  688. dst.Enc_ndr_long(Count);
  689. dst.Enc_ndr_referent(Domains, 1);
  690. dst.Enc_ndr_long(MaxCount);
  691. if (Domains != null)
  692. {
  693. dst = dst.Deferred;
  694. int domainss = Count;
  695. dst.Enc_ndr_long(domainss);
  696. int domainsi = dst.Index;
  697. dst.Advance(12 * domainss);
  698. dst = dst.Derive(domainsi);
  699. for (int i = 0; i < domainss; i++)
  700. {
  701. Domains[i].Encode(dst);
  702. }
  703. }
  704. }
  705. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  706. public override void Decode(NdrBuffer src)
  707. {
  708. src.Align(4);
  709. Count = src.Dec_ndr_long();
  710. int domainsp = src.Dec_ndr_long();
  711. MaxCount = src.Dec_ndr_long();
  712. if (domainsp != 0)
  713. {
  714. src = src.Deferred;
  715. int domainss = src.Dec_ndr_long();
  716. int domainsi = src.Index;
  717. src.Advance(12 * domainss);
  718. if (Domains == null)
  719. {
  720. if (domainss < 0 || domainss > unchecked(0xFFFF))
  721. {
  722. throw new NdrException(NdrException.InvalidConformance);
  723. }
  724. Domains = new LsarTrustInformation[domainss];
  725. }
  726. src = src.Derive(domainsi);
  727. for (int i = 0; i < domainss; i++)
  728. {
  729. if (Domains[i] == null)
  730. {
  731. Domains[i] = new LsarTrustInformation();
  732. }
  733. Domains[i].Decode(src);
  734. }
  735. }
  736. }
  737. }
  738. public class LsarTranslatedName : NdrObject
  739. {
  740. public short SidType;
  741. public Rpc.Unicode_string Name;
  742. public int SidIndex;
  743. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  744. public override void Encode(NdrBuffer dst)
  745. {
  746. dst.Align(4);
  747. dst.Enc_ndr_short(SidType);
  748. dst.Enc_ndr_short(Name.Length);
  749. dst.Enc_ndr_short(Name.MaximumLength);
  750. dst.Enc_ndr_referent(Name.Buffer, 1);
  751. dst.Enc_ndr_long(SidIndex);
  752. if (Name.Buffer != null)
  753. {
  754. dst = dst.Deferred;
  755. int nameBufferl = Name.Length / 2;
  756. int nameBuffers = Name.MaximumLength / 2;
  757. dst.Enc_ndr_long(nameBuffers);
  758. dst.Enc_ndr_long(0);
  759. dst.Enc_ndr_long(nameBufferl);
  760. int nameBufferi = dst.Index;
  761. dst.Advance(2 * nameBufferl);
  762. dst = dst.Derive(nameBufferi);
  763. for (int i = 0; i < nameBufferl; i++)
  764. {
  765. dst.Enc_ndr_short(Name.Buffer[i]);
  766. }
  767. }
  768. }
  769. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  770. public override void Decode(NdrBuffer src)
  771. {
  772. src.Align(4);
  773. SidType = (short)src.Dec_ndr_short();
  774. src.Align(4);
  775. if (Name == null)
  776. {
  777. Name = new Rpc.Unicode_string();
  778. }
  779. Name.Length = (short)src.Dec_ndr_short();
  780. Name.MaximumLength = (short)src.Dec_ndr_short();
  781. int nameBufferp = src.Dec_ndr_long();
  782. SidIndex = src.Dec_ndr_long();
  783. if (nameBufferp != 0)
  784. {
  785. src = src.Deferred;
  786. int nameBuffers = src.Dec_ndr_long();
  787. src.Dec_ndr_long();
  788. int nameBufferl = src.Dec_ndr_long();
  789. int nameBufferi = src.Index;
  790. src.Advance(2 * nameBufferl);
  791. if (Name.Buffer == null)
  792. {
  793. if (nameBuffers < 0 || nameBuffers > unchecked(0xFFFF))
  794. {
  795. throw new NdrException(NdrException.InvalidConformance);
  796. }
  797. Name.Buffer = new short[nameBuffers];
  798. }
  799. src = src.Derive(nameBufferi);
  800. for (int i = 0; i < nameBufferl; i++)
  801. {
  802. Name.Buffer[i] = (short)src.Dec_ndr_short();
  803. }
  804. }
  805. }
  806. }
  807. public class LsarTransNameArray : NdrObject
  808. {
  809. public int Count;
  810. public LsarTranslatedName[] Names;
  811. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  812. public override void Encode(NdrBuffer dst)
  813. {
  814. dst.Align(4);
  815. dst.Enc_ndr_long(Count);
  816. dst.Enc_ndr_referent(Names, 1);
  817. if (Names != null)
  818. {
  819. dst = dst.Deferred;
  820. int namess = Count;
  821. dst.Enc_ndr_long(namess);
  822. int namesi = dst.Index;
  823. dst.Advance(16 * namess);
  824. dst = dst.Derive(namesi);
  825. for (int i = 0; i < namess; i++)
  826. {
  827. Names[i].Encode(dst);
  828. }
  829. }
  830. }
  831. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  832. public override void Decode(NdrBuffer src)
  833. {
  834. src.Align(4);
  835. Count = src.Dec_ndr_long();
  836. int namesp = src.Dec_ndr_long();
  837. if (namesp != 0)
  838. {
  839. src = src.Deferred;
  840. int namess = src.Dec_ndr_long();
  841. int namesi = src.Index;
  842. src.Advance(16 * namess);
  843. if (Names == null)
  844. {
  845. if (namess < 0 || namess > unchecked(0xFFFF))
  846. {
  847. throw new NdrException(NdrException.InvalidConformance);
  848. }
  849. Names = new LsarTranslatedName[namess];
  850. }
  851. src = src.Derive(namesi);
  852. for (int i = 0; i < namess; i++)
  853. {
  854. if (Names[i] == null)
  855. {
  856. Names[i] = new LsarTranslatedName();
  857. }
  858. Names[i].Decode(src);
  859. }
  860. }
  861. }
  862. }
  863. public class LsarClose : DcerpcMessage
  864. {
  865. public override int GetOpnum()
  866. {
  867. return unchecked(0x00);
  868. }
  869. public int Retval;
  870. public Rpc.PolicyHandle Handle;
  871. public LsarClose(Rpc.PolicyHandle handle)
  872. {
  873. this.Handle = handle;
  874. }
  875. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  876. public override void Encode_in(NdrBuffer dst)
  877. {
  878. Handle.Encode(dst);
  879. }
  880. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  881. public override void Decode_out(NdrBuffer src)
  882. {
  883. Handle.Decode(src);
  884. Retval = src.Dec_ndr_long();
  885. }
  886. }
  887. public class LsarQueryInformationPolicy : DcerpcMessage
  888. {
  889. public override int GetOpnum()
  890. {
  891. return unchecked(0x07);
  892. }
  893. public int Retval;
  894. public Rpc.PolicyHandle Handle;
  895. public short Level;
  896. public NdrObject Info;
  897. public LsarQueryInformationPolicy(Rpc.PolicyHandle handle, short level, NdrObject
  898. info)
  899. {
  900. this.Handle = handle;
  901. this.Level = level;
  902. this.Info = info;
  903. }
  904. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  905. public override void Encode_in(NdrBuffer dst)
  906. {
  907. Handle.Encode(dst);
  908. dst.Enc_ndr_short(Level);
  909. }
  910. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  911. public override void Decode_out(NdrBuffer src)
  912. {
  913. int infop = src.Dec_ndr_long();
  914. if (infop != 0)
  915. {
  916. src.Dec_ndr_short();
  917. Info.Decode(src);
  918. }
  919. Retval = src.Dec_ndr_long();
  920. }
  921. }
  922. public class LsarLookupSids : DcerpcMessage
  923. {
  924. public override int GetOpnum()
  925. {
  926. return unchecked(0x0f);
  927. }
  928. public int Retval;
  929. public Rpc.PolicyHandle Handle;
  930. public LsarSidArray Sids;
  931. public LsarRefDomainList Domains;
  932. public LsarTransNameArray Names;
  933. public short Level;
  934. public int Count;
  935. public LsarLookupSids(Rpc.PolicyHandle handle, LsarSidArray sids, LsarRefDomainList
  936. domains, LsarTransNameArray names, short level, int count)
  937. {
  938. this.Handle = handle;
  939. this.Sids = sids;
  940. this.Domains = domains;
  941. this.Names = names;
  942. this.Level = level;
  943. this.Count = count;
  944. }
  945. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  946. public override void Encode_in(NdrBuffer dst)
  947. {
  948. Handle.Encode(dst);
  949. Sids.Encode(dst);
  950. Names.Encode(dst);
  951. dst.Enc_ndr_short(Level);
  952. dst.Enc_ndr_long(Count);
  953. }
  954. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  955. public override void Decode_out(NdrBuffer src)
  956. {
  957. int domainsp = src.Dec_ndr_long();
  958. if (domainsp != 0)
  959. {
  960. if (Domains == null)
  961. {
  962. Domains = new LsarRefDomainList();
  963. }
  964. Domains.Decode(src);
  965. }
  966. Names.Decode(src);
  967. Count = src.Dec_ndr_long();
  968. Retval = src.Dec_ndr_long();
  969. }
  970. }
  971. public class LsarOpenPolicy2 : DcerpcMessage
  972. {
  973. public override int GetOpnum()
  974. {
  975. return unchecked(0x2c);
  976. }
  977. public int Retval;
  978. public string SystemName;
  979. public LsarObjectAttributes ObjectAttributes;
  980. public int DesiredAccess;
  981. public Rpc.PolicyHandle PolicyHandle;
  982. public LsarOpenPolicy2(string systemName, LsarObjectAttributes objectAttributes
  983. , int desiredAccess, Rpc.PolicyHandle policyHandle)
  984. {
  985. this.SystemName = systemName;
  986. this.ObjectAttributes = objectAttributes;
  987. this.DesiredAccess = desiredAccess;
  988. this.PolicyHandle = policyHandle;
  989. }
  990. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  991. public override void Encode_in(NdrBuffer dst)
  992. {
  993. dst.Enc_ndr_referent(SystemName, 1);
  994. if (SystemName != null)
  995. {
  996. dst.Enc_ndr_string(SystemName);
  997. }
  998. ObjectAttributes.Encode(dst);
  999. dst.Enc_ndr_long(DesiredAccess);
  1000. }
  1001. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  1002. public override void Decode_out(NdrBuffer src)
  1003. {
  1004. PolicyHandle.Decode(src);
  1005. Retval = src.Dec_ndr_long();
  1006. }
  1007. }
  1008. public class LsarQueryInformationPolicy2 : DcerpcMessage
  1009. {
  1010. public override int GetOpnum()
  1011. {
  1012. return unchecked(0x2e);
  1013. }
  1014. public int Retval;
  1015. public Rpc.PolicyHandle Handle;
  1016. public short Level;
  1017. public NdrObject Info;
  1018. public LsarQueryInformationPolicy2(Rpc.PolicyHandle handle, short level, NdrObject
  1019. info)
  1020. {
  1021. this.Handle = handle;
  1022. this.Level = level;
  1023. this.Info = info;
  1024. }
  1025. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  1026. public override void Encode_in(NdrBuffer dst)
  1027. {
  1028. Handle.Encode(dst);
  1029. dst.Enc_ndr_short(Level);
  1030. }
  1031. /// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
  1032. public override void Decode_out(NdrBuffer src)
  1033. {
  1034. int infop = src.Dec_ndr_long();
  1035. if (infop != 0)
  1036. {
  1037. src.Dec_ndr_short();
  1038. Info.Decode(src);
  1039. }
  1040. Retval = src.Dec_ndr_long();
  1041. }
  1042. }
  1043. }
  1044. }