source: trunk/samba/docs/htmldocs/Samba3-Developers-Guide/ntdomain.html @ 30

Last change on this file since 30 was 1, checked in by Paul Smedley, 14 years ago

Initial code import

File size: 91.1 KB
Line 
1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 2. NT Domain RPC's</title><link rel="stylesheet" href="samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.68.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt01.html" title="Part I. The protocol"><link rel="prev" href="unix-smb.html" title="Chapter 1. NetBIOS in a Unix World"><link rel="next" href="pt02.html" title="Part II. Samba Basics"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. NT Domain RPC's</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unix-smb.html">Prev</a> </td><th width="60%" align="center">Part I. The protocol</th><td width="20%" align="right"> <a accesskey="n" href="pt02.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ntdomain"></a>Chapter 2. NT Domain RPC's</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Luke</span> <span class="surname">Leighton</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a href="mailto:lkcl@switchboard.net">lkcl@switchboard.net</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Paul</span> <span class="surname">Ashton</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a href="mailto:paul@argo.demon.co.uk">paul@argo.demon.co.uk</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Duncan</span> <span class="surname">Stansfield</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a href="mailto:duncans@sco.com">duncans@sco.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">01 November 97(version 0.0.24)</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ntdomain.html#id285756">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id285896">Sources</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id285923">Credits</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id285952">Notes and Structures</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id285958">Notes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id286014">Enumerations</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id286183">Structures</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id288480">MSRPC over Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id288490">MSRPC Pipes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id288559">Header</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id289234">Tail</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id289270">RPC Bind / Bind Ack</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id289407">NTLSA Transact Named Pipe</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id289535">LSA Open Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id289634">LSA Query Info Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id289716">LSA Enumerate Trusted Domains</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id289788">LSA Open Secret</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id289875">LSA Close</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id289926">LSA Lookup SIDS</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id290090">LSA Lookup Names</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id290267">NETLOGON rpc Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id290392">LSA Request Challenge</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id290495">LSA Authenticate 2</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id290608">LSA Server Password Set</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id290695">LSA SAM Logon</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id290771">LSA SAM Logoff</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id290842">\\MAILSLOT\NET\NTLOGON</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id290854">Query for PDC</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id291059">SAM Logon</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id291315">SRVSVC Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id291350">Net Share Enum</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id291522">Net Server Get Info</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id291613">Cryptographic side of NT Domain Authentication</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id291619">Definitions</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id291744">Protocol</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id291808">Comments</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id291841">SIDs and RIDs</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id291871">Well-known SIDs</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id292120">Well-known RIDS</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id285756"></a>Introduction</h2></div></div></div><p>
2This document contains information to provide an NT workstation with login
3services, without the need for an NT server. It is the sgml version of <a href="http://mailhost.cb1.com/~lkcl/cifsntdomain.txt" target="_top">http://mailhost.cb1.com/~lkcl/cifsntdomain.txt</a>, controlled by Luke.
4</p><p>
5It should be possible to select a domain instead of a workgroup (in the NT
6workstation's TCP/IP settings) and after the obligatory reboot, type in a
7username, password, select a domain and successfully log in.  I would
8appreciate any feedback on your experiences with this process, and any
9comments, corrections and additions to this document.
10</p><p>
11The packets described here can be easily derived from (and are probably
12better understood using) Netmon.exe.  You will need to use the version
13of Netmon that matches your system, in order to correctly decode the
14NETLOGON, lsarpc and srvsvc Transact pipes.  This document is derived from
15NT Service Pack 1 and its corresponding version of Netmon.  It is intended
16that an annotated packet trace be produced, which will likely be more
17instructive than this document.
18</p><p>
19Also needed, to fully implement NT Domain Login Services, is the
20document describing the cryptographic part of the NT authentication.
21This document is available from comp.protocols.smb; from the ntsecurity.net
22digest and from the samba digest, amongst other sources.
23</p><p>
24A copy is available from:
25</p><p><a href="http://ntbugtraq.rc.on.ca/SCRIPTS/WA.EXE?A2=ind9708;L=ntbugtraq;O=A;P=2935" target="_top">http://ntbugtraq.rc.on.ca/SCRIPTS/WA.EXE?A2=ind9708;L=ntbugtraq;O=A;P=2935</a></p><p><a href="http://mailhost.cb1.com/~lkcl/crypt.html" target="_top">http://mailhost.cb1.com/~lkcl/crypt.html</a></p><p>
26A c-code implementation, provided by <a href="mailto:linus@incolumitas.se" target="_top">Linus Nordberg</a>
27of this protocol is available from:
28</p><p><a href="http://samba.org/cgi-bin/mfs/01/digest/1997/97aug/0391.html" target="_top">http://samba.org/cgi-bin/mfs/01/digest/1997/97aug/0391.html</a></p><p><a href="http://mailhost.cb1.com/~lkcl/crypt.txt" target="_top">http://mailhost.cb1.com/~lkcl/crypt.txt</a></p><p>
29Also used to provide debugging information is the Check Build version of
30NT workstation, and enabling full debugging in NETLOGON.  This is
31achieved by setting the following REG_SZ registry key to 0x1ffffff:
32</p><p><code class="filename">HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters</code></p><p><span class="emphasis"><em>Incorrect direct editing of the registry can cause your
33machine to fail. Then again, so can incorrect implementation of this
34protocol. See "Liability:" above.</em></span></p><p>
35Bear in mind that each packet over-the-wire will have its origin in an
36API call.  Therefore, there are likely to be structures, enumerations
37and defines that are usefully documented elsewhere.
38</p><p>
39This document is by no means complete or authoritative.  Missing sections
40include, but are not limited to:
41</p><div class="orderedlist"><ol type="1"><li><p>Mappings of RIDs to usernames (and vice-versa).</p></li><li><p>What a User ID is and what a Group ID is.</p></li><li><p>The exact meaning/definition of various magic constants or enumerations.</p></li><li><p>The reply error code and use of that error code when a
42workstation becomes a member of a domain (to be described later). 
43Failure to return this error code will make the workstation report
44that it is already a member of the domain.</p></li><li><p>the cryptographic side of the NetrServerPasswordSet command,
45which would allow the workstation to change its password.  This password is
46used to generate the long-term session key.  [It is possible to reject this
47command, and keep the default workstation password].</p></li></ol></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id285896"></a>Sources</h3></div></div></div><table class="simplelist" border="0" summary="Simple list"><tr><td>cket Traces from Netmonitor (Service Pack 1 and above)</td></tr><tr><td>ul Ashton and Luke Leighton's other "NT Domain" doc.</td></tr><tr><td>FS documentation - cifs6.txt</td></tr><tr><td>FS documentation - cifsrap2.txt</td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id285923"></a>Credits</h3></div></div></div><table class="simplelist" border="0" summary="Simple list"><tr><td>Paul Ashton: loads of work with Net Monitor; understanding the NT authentication system; reference implementation of the NT domain support on which this document is originally based.</td></tr><tr><td>Duncan Stansfield: low-level analysis of MSRPC Pipes.</td></tr><tr><td>Linus Nordberg: producing c-code from Paul's crypto spec.</td></tr><tr><td>Windows Sourcer development team</td></tr></table></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id285952"></a>Notes and Structures</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id285958"></a>Notes</h3></div></div></div><div class="orderedlist"><ol type="1"><li><p>
48In the SMB Transact pipes, some "Structures", described here, appear to be
494-byte aligned with the SMB header, at their start.  Exactly which
50"Structures" need aligning is not precisely known or documented.
51</p></li><li><p>
52In the UDP NTLOGON Mailslots, some "Structures", described here, appear to be
532-byte aligned with the start of the mailslot, at their start.
54</p></li><li><p>
55Domain SID is of the format S-revision-version-auth1-auth2...authN.
56e.g S-1-5-123-456-789-123-456.  the 5 could be a sub-revision.
57</p></li><li><p>
58any undocumented buffer pointers must be non-zero if the string buffer it
59refers to contains characters.  exactly what value they should be is unknown.
600x0000 0002 seems to do the trick to indicate that the buffer exists.  a
61NULL buffer pointer indicates that the string buffer is of zero length.
62If the buffer pointer is NULL, then it is suspected that the structure it
63refers to is NOT put into (or taken out of) the SMB data stream.  This is
64empirically derived from, for example, the LSA SAM Logon response packet,
65where if the buffer pointer is NULL, the user information is not inserted
66into the data stream.  Exactly what happens with an array of buffer pointers
67is not known, although an educated guess can be made.
68</p></li><li><p>
69an array of structures (a container) appears to have a count and a pointer.
70if the count is zero, the pointer is also zero.  no further data is put
71into or taken out of the SMB data stream.  if the count is non-zero, then
72the pointer is also non-zero.  immediately following the pointer is the
73count again, followed by an array of container sub-structures.  the count
74appears a third time after the last sub-structure.
75</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id286014"></a>Enumerations</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286020"></a>MSRPC Header type</h4></div></div></div><p>command number in the msrpc packet header</p><div class="variablelist"><dl><dt><span class="term">MSRPC_Request:</span></dt><dd><p>0x00</p></dd><dt><span class="term">MSRPC_Response:</span></dt><dd><p>0x02</p></dd><dt><span class="term">MSRPC_Bind:</span></dt><dd><p>0x0B</p></dd><dt><span class="term">MSRPC_BindAck:</span></dt><dd><p>0x0C</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286079"></a>MSRPC Packet info</h4></div></div></div><p>The meaning of these flags is undocumented</p><div class="variablelist"><dl><dt><span class="term">FirstFrag:</span></dt><dd><p>0x01 </p></dd><dt><span class="term">LastFrag:</span></dt><dd><p>0x02 </p></dd><dt><span class="term">NotaFrag:</span></dt><dd><p>0x04  </p></dd><dt><span class="term">RecRespond:</span></dt><dd><p>0x08  </p></dd><dt><span class="term">NoMultiplex:</span></dt><dd><p>0x10  </p></dd><dt><span class="term">NotForIdemp:</span></dt><dd><p>0x20  </p></dd><dt><span class="term">NotforBcast:</span></dt><dd><p>0x40  </p></dd><dt><span class="term">NoUuid:</span></dt><dd><p>0x80 </p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id286183"></a>Structures</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286189"></a>VOID *</h4></div></div></div><p>sizeof VOID* is 32 bits.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286198"></a>char</h4></div></div></div><p>sizeof char is 8 bits.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286207"></a>UTIME</h4></div></div></div><p>UTIME is 32 bits, indicating time in seconds since 01jan1970.  documented in cifs6.txt (section 3.5 page, page 30).</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286216"></a>NTTIME</h4></div></div></div><p>NTTIME is 64 bits.  documented in cifs6.txt (section 3.5 page, page 30).</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286226"></a>DOM_SID (domain SID structure)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>num of sub-authorities in domain SID</p></dd><dt><span class="term">UINT8</span></dt><dd><p>SID revision number</p></dd><dt><span class="term">UINT8</span></dt><dd><p>num of sub-authorities in domain SID</p></dd><dt><span class="term">UINT8[6]</span></dt><dd><p>6 bytes for domain SID - Identifier Authority.</p></dd><dt><span class="term">UINT16[n_subauths]</span></dt><dd><p>domain SID sub-authorities</p></dd></dl></div><p><span class="emphasis"><em>Note: the domain SID is documented elsewhere.</em></span>
76</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286299"></a>STR (string)</h4></div></div></div><p>STR (string) is a char[] : a null-terminated string of ascii characters.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286309"></a>UNIHDR (unicode string header) </h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>length of unicode string</p></dd><dt><span class="term">UINT16</span></dt><dd><p>max length of unicode string</p></dd><dt><span class="term">UINT32</span></dt><dd><p>4 - undocumented.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286353"></a>UNIHDR2 (unicode string header plus buffer pointer)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UNIHDR</span></dt><dd><p>unicode string header</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286386"></a>UNISTR (unicode string)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16[]</span></dt><dd><p>null-terminated string of unicode characters.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286407"></a>NAME (length-indicated unicode string)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>length of unicode string</p></dd><dt><span class="term">UINT16[]</span></dt><dd><p>null-terminated string of unicode characters.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286440"></a>UNISTR2 (aligned unicode string)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with the start of the SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>max length of unicode string</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>length of unicode string</p></dd><dt><span class="term">UINT16[]</span></dt><dd><p>string of uncode characters</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286507"></a>OBJ_ATTR (object attributes)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0x18 - length (in bytes) including the length field.</p></dd><dt><span class="term">VOID*</span></dt><dd><p>0 - root directory (pointer)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>0 - object name (pointer)</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - attributes (undocumented)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>0 - security descriptior (pointer)</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - security quality of service</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286580"></a>POL_HND (LSA policy handle)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[20]</span></dt><dd><p>policy handle</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286601"></a>DOM_SID2 (domain SID structure, SIDS stored in unicode)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>5 - SID type</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UNIHDR2</span></dt><dd><p>domain SID unicode string header</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain SID unicode string</p></dd></dl></div><p><span class="emphasis"><em>Note:  there is a conflict between the unicode string header and the unicode string itself as to which to use to indicate string length.  this will need to be resolved.</em></span></p><p><span class="emphasis"><em>Note:    the SID type indicates, for example, an alias; a well-known group etc. this is documented somewhere.</em></span></p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286667"></a>DOM_RID (domain RID structure)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>5 - well-known SID.  1 - user SID (see ShowACLs)</p></dd><dt><span class="term">UINT32</span></dt><dd><p>5 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>domain RID </p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - domain index out of above reference domains</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286721"></a>LOG_INFO (server, account, client structure)</h4></div></div></div><p><span class="emphasis"><em>Note:        logon server name starts with two '\' characters and is upper case.</em></span></p><p><span class="emphasis"><em>Note:  account name is the logon client name from the LSA Request Challenge, with a $ on the end of it, in upper case.</em></span></p><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>account name unicode string</p></dd><dt><span class="term">UINT16</span></dt><dd><p>sec_chan - security channel type</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon client machine unicode string</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286799"></a>CLNT_SRV (server, client names structure)</h4></div></div></div><p><span class="emphasis"><em>Note:     logon server name starts with two '\' characters and is upper case.</em></span></p><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon client machine unicode string</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286859"></a>CREDS (credentials + time stamp)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[8]</span></dt><dd><p>credentials</p></dd><dt><span class="term">UTIME</span></dt><dd><p>time stamp</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286892"></a>CLNT_INFO2 (server, client structure, client credentials)</h4></div></div></div><p><span class="emphasis"><em>Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will beused in subsequent credential checks.  the presumed intention is to
77        maintain an authenticated request/response trail.</em></span></p><div class="variablelist"><dl><dt><span class="term">CLNT_SRV</span></dt><dd><p>client and server names</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>???? padding, for 4-byte alignment with SMB header.</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to client credentials.</p></dd><dt><span class="term">CREDS</span></dt><dd><p>client-calculated credentials + client time</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286954"></a>CLNT_INFO (server, account, client structure, client credentials)</h4></div></div></div><p><span class="emphasis"><em>Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will be used in subsequent credential checks.  the presumed intention is to maintain an authenticated request/response trail.</em></span></p><div class="variablelist"><dl><dt><span class="term">LOG_INFO</span></dt><dd><p>logon account info</p></dd><dt><span class="term">CREDS</span></dt><dd><p>client-calculated credentials + client time</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id286993"></a>ID_INFO_1 (id info structure, auth level 1)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>ptr_id_info_1</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>domain name unicode header</p></dd><dt><span class="term">UINT32</span></dt><dd><p>param control</p></dd><dt><span class="term">UINT64</span></dt><dd><p>logon ID</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>user name unicode header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>workgroup name unicode header</p></dd><dt><span class="term">char[16]</span></dt><dd><p>arc4 LM OWF Password</p></dd><dt><span class="term">char[16]</span></dt><dd><p>arc4 NT OWF Password</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>domain name unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>user name unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>workstation name unicode string</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id287127"></a>SAM_INFO (sam logon/logoff id info structure)</h4></div></div></div><p><span class="emphasis"><em>Note: presumably, the return credentials is supposedly for the server to verify that the credential chain hasn't been compromised.</em></span></p><div class="variablelist"><dl><dt><span class="term">CLNT_INFO2</span></dt><dd><p>client identification/authentication info</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to return credentials.</p></dd><dt><span class="term">CRED</span></dt><dd><p>return credentials - ignored.</p></dd><dt><span class="term">UINT16</span></dt><dd><p>logon level</p></dd><dt><span class="term">UINT16</span></dt><dd><p>switch value</p></dd></dl></div><pre class="programlisting">
78        switch (switch_value)
79        case 1:
80        {
81            ID_INFO_1     id_info_1;
82        }
83</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id287207"></a>GID (group id info)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>group id</p></dd><dt><span class="term">UINT32</span></dt><dd><p>user attributes (only used by NT 3.1 and 3.51)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id287238"></a>DOM_REF (domain reference info)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num referenced domains?</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name buffer pointer.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>32 - max number of entries</p></dd><dt><span class="term">UINT32</span></dt><dd><p>4 - num referenced domains?</p></dd><dt><span class="term">UNIHDR2</span></dt><dd><p>domain name unicode string header</p></dd><dt><span class="term">UNIHDR2[num_ref_doms-1]</span></dt><dd><p>referenced domain unicode string headers</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain name unicode string</p></dd><dt><span class="term">DOM_SID[num_ref_doms]</span></dt><dd><p>referenced domain SIDs</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id287350"></a>DOM_INFO (domain info, levels 3 and 5 are the same))</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8[]</span></dt><dd><p>??? padding to get 4-byte alignment with start of SMB header</p></dd><dt><span class="term">UINT16</span></dt><dd><p>domain name string length * 2</p></dd><dt><span class="term">UINT16</span></dt><dd><p>domain name string length * 2</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name string buffer pointer</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain SID string buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>domain name (unicode string)</p></dd><dt><span class="term">DOM_SID</span></dt><dd><p>domain SID</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id287437"></a>USER_INFO (user logon info)</h4></div></div></div><p><span class="emphasis"><em>Note: it would be nice to know what the 16 byte user session key is for.</em></span></p><div class="variablelist"><dl><dt><span class="term">NTTIME</span></dt><dd><p>logon time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>logoff time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>kickoff time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>password last set time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>password can change time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>password must change time</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>username unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>user's full name unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>logon script unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>profile path unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>home directory unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>home directory drive unicode string header</p></dd><dt><span class="term">UINT16</span></dt><dd><p>logon count</p></dd><dt><span class="term">UINT16</span></dt><dd><p>bad password count</p></dd><dt><span class="term">UINT32</span></dt><dd><p>User ID</p></dd><dt><span class="term">UINT32</span></dt><dd><p>Group ID</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num groups</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer to groups.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>user flags</p></dd><dt><span class="term">char[16]</span></dt><dd><p>user session key</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>logon server unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>logon domain unicode string header</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented logon domain id pointer</p></dd><dt><span class="term">char[40]</span></dt><dd><p>40 undocumented padding bytes.  future expansion?</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - num_other_sids?</p></dd><dt><span class="term">VOID*</span></dt><dd><p>NULL - undocumented pointer to other domain SIDs.</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>username unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>user's full name unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon script unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>profile path unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>home directory unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>home directory drive unicode string</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num groups</p></dd><dt><span class="term">GID[num_groups]</span></dt><dd><p>group info</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon domain unicode string</p></dd><dt><span class="term">DOM_SID</span></dt><dd><p>domain SID</p></dd><dt><span class="term">DOM_SID[num_sids]</span></dt><dd><p>other domain SIDs?</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id287881"></a>SH_INFO_1_PTR (pointers to level 1 share info strings)</h4></div></div></div><p><span class="emphasis"><em>Note:   see cifsrap2.txt section5, page 10.</em></span></p><table class="simplelist" border="0" summary="Simple list"><tr><td>0 for shi1_type indicates a  Disk.</td></tr><tr><td>1 for shi1_type indicates a  Print Queue.</td></tr><tr><td>2 for shi1_type indicates a  Device.</td></tr><tr><td>3 for shi1_type indicates an IPC pipe.</td></tr><tr><td>0x8000 0000 (top bit set in shi1_type) indicates a hidden share.</td></tr></table><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>shi1_netname - pointer to net name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>shi1_type    - type of share.  0 - undocumented.</p></dd><dt><span class="term">VOID*</span></dt><dd><p>shi1_remark  - pointer to comment.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id287954"></a>SH_INFO_1_STR (level 1 share info strings)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UNISTR2</span></dt><dd><p>shi1_netname - unicode string of net name</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>shi1_remark  - unicode string of comment.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id287987"></a>SHARE_INFO_1_CTR</h4></div></div></div><p>share container with 0 entries:</p><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0 - EntriesRead</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - Buffer</p></dd></dl></div><p>share container with &gt; 0 entries:</p><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>EntriesRead</p></dd><dt><span class="term">UINT32</span></dt><dd><p>non-zero - Buffer</p></dd><dt><span class="term">UINT32</span></dt><dd><p>EntriesRead</p></dd><dt><span class="term">SH_INFO_1_PTR[EntriesRead]</span></dt><dd><p>share entry pointers</p></dd><dt><span class="term">SH_INFO_1_STR[EntriesRead]</span></dt><dd><p>share entry strings</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with start of the SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>EntriesRead</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - padding</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id288120"></a>SERVER_INFO_101</h4></div></div></div><p><span class="emphasis"><em>Note: see cifs6.txt section 6.4 - the fields described therein will be of assistance here.  for example, the type listed below is the         same as fServerType, which is described in 6.4.1. </em></span></p><div class="variablelist"><dl><dt><span class="term">SV_TYPE_WORKSTATION</span></dt><dd><p>0x00000001  All workstations</p></dd><dt><span class="term">SV_TYPE_SERVER</span></dt><dd><p>0x00000002  All servers</p></dd><dt><span class="term">SV_TYPE_SQLSERVER</span></dt><dd><p>0x00000004  Any server running with SQL server</p></dd><dt><span class="term">SV_TYPE_DOMAIN_CTRL</span></dt><dd><p>0x00000008  Primary domain controller</p></dd><dt><span class="term">SV_TYPE_DOMAIN_BAKCTRL</span></dt><dd><p>0x00000010  Backup domain controller</p></dd><dt><span class="term">SV_TYPE_TIME_SOURCE</span></dt><dd><p>0x00000020  Server running the timesource service</p></dd><dt><span class="term">SV_TYPE_AFP</span></dt><dd><p>0x00000040  Apple File Protocol servers</p></dd><dt><span class="term">SV_TYPE_NOVELL</span></dt><dd><p>0x00000080  Novell servers</p></dd><dt><span class="term">SV_TYPE_DOMAIN_MEMBER</span></dt><dd><p>0x00000100  Domain Member</p></dd><dt><span class="term">SV_TYPE_PRINTQ_SERVER</span></dt><dd><p>0x00000200  Server sharing print queue</p></dd><dt><span class="term">SV_TYPE_DIALIN_SERVER</span></dt><dd><p>0x00000400  Server running dialin service.</p></dd><dt><span class="term">SV_TYPE_XENIX_SERVER</span></dt><dd><p>0x00000800  Xenix server</p></dd><dt><span class="term">SV_TYPE_NT</span></dt><dd><p>0x00001000  NT server</p></dd><dt><span class="term">SV_TYPE_WFW</span></dt><dd><p>0x00002000  Server running Windows for </p></dd><dt><span class="term">SV_TYPE_SERVER_NT</span></dt><dd><p>0x00008000  Windows NT non DC server</p></dd><dt><span class="term">SV_TYPE_POTENTIAL_BROWSER</span></dt><dd><p>0x00010000  Server that can run the browser service</p></dd><dt><span class="term">SV_TYPE_BACKUP_BROWSER</span></dt><dd><p>0x00020000  Backup browser server</p></dd><dt><span class="term">SV_TYPE_MASTER_BROWSER</span></dt><dd><p>0x00040000  Master browser server</p></dd><dt><span class="term">SV_TYPE_DOMAIN_MASTER</span></dt><dd><p>0x00080000  Domain Master Browser server</p></dd><dt><span class="term">SV_TYPE_LOCAL_LIST_ONLY</span></dt><dd><p>0x40000000  Enumerate only entries marked "local"</p></dd><dt><span class="term">SV_TYPE_DOMAIN_ENUM</span></dt><dd><p>0x80000000  Enumerate Domains. The pszServer and pszDomain parameters must be NULL.</p></dd></dl></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>500 - platform_id</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>5 - major version</p></dd><dt><span class="term">UINT32</span></dt><dd><p>4 - minor version</p></dd><dt><span class="term">UINT32</span></dt><dd><p>type (SV_TYPE_... bit field)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to comment</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>sv101_name - unicode string of server name</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>sv_101_comment  - unicode string of server comment.</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with start of the SMB header.</p></dd></dl></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id288480"></a>MSRPC over Transact Named Pipe</h2></div></div></div><p>For details on the SMB Transact Named Pipe, see cifs6.txt</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id288490"></a>MSRPC Pipes</h3></div></div></div><p>
84The MSRPC is conducted over an SMB Transact Pipe with a name of
85<code class="filename">\PIPE\</code>.  You must first obtain a 16 bit file handle, by
86sending a SMBopenX with the pipe name <code class="filename">\PIPE\srvsvc</code> for
87example.  You can then perform an SMB Trans,
88and must carry out an SMBclose on the file handle once you are finished.
89</p><p>
90Trans Requests must be sent with two setup UINT16s, no UINT16 params (none
91known about), and UINT8 data parameters sufficient to contain the MSRPC
92header, and MSRPC data.  The first UINT16 setup parameter must be either
930x0026 to indicate an RPC, or 0x0001 to indicate Set Named Pipe Handle
94state.  The second UINT16 parameter must be the file handle for the pipe,
95obtained above.
96</p><p>
97The Data section for an API Command of 0x0026 (RPC pipe) in the Trans
98Request is the RPC Header, followed by the RPC Data.  The Data section for
99an API Command of 0x0001 (Set Named Pipe Handle state) is two bytes.  The
100only value seen for these two bytes is 0x00 0x43.
101</p><p>
102MSRPC Responses are sent as response data inside standard SMB Trans
103responses, with the MSRPC Header, MSRPC Data and MSRPC tail.
104</p><p>
105It is suspected that the Trans Requests will need to be at least 2-byte
106aligned (probably 4-byte).  This is standard practice for SMBs.  It is also
107independent of the observed 4-byte alignments with the start of the MSRPC
108header, including the 4-byte alignment between the MSRPC header and the
109MSRPC data.
110</p><p>
111First, an SMBtconX connection is made to the IPC$ share.  The connection
112must be made using encrypted passwords, not clear-text.  Then, an SMBopenX
113is made on the pipe.  Then, a Set Named Pipe Handle State must be sent,
114after which the pipe is ready to accept API commands.  Lastly, and SMBclose
115is sent.
116</p><p>
117To be resolved:
118</p><p>
119lkcl/01nov97 there appear to be two additional bytes after the null-terminated \PIPE\ name for the RPC pipe.  Values seen so far are
120listed below:</p><pre class="programlisting">
121        initial SMBopenX request:         RPC API command 0x26 params:
122        "\\PIPE\\lsarpc"                  0x65 0x63; 0x72 0x70; 0x44 0x65;
123        "\\PIPE\\srvsvc"                  0x73 0x76; 0x4E 0x00; 0x5C 0x43;
124</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id288559"></a>Header</h3></div></div></div><p>[section to be rewritten, following receipt of work by Duncan Stansfield]</p><p>Interesting note: if you set packed data representation to 0x0100 0000
125then all 4-byte and 2-byte word ordering is turned around!</p><p>The start of each of the NTLSA and NETLOGON named pipes begins with:</p><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>00</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>5 - RPC major version</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>01</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - RPC minor version</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>02</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>2 - RPC response packet</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>03</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>3 - (FirstFrag bit-wise or with LastFrag)</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>04</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT32</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0x1000 0000 - packed data representation</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>08</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT16</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>fragment length - data size (bytes) inc header and tail.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>0A</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT16</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - authentication length </div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>0C</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT32</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>call identifier. matches 12th UINT32 of incoming RPC data.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>10</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT32</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>allocation hint - data size (bytes) minus header and tail.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>14</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT16</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - presentation context identifier</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>16</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - cancel count</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>17</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>in replies: 0 - reserved; in requests: opnum - see #defines.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>18</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>......</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>start of data (goes on for allocation_hint bytes)</div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id288709"></a>RPC_Packet for request, response, bind and bind acknowledgement</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8 versionmaj</span></dt><dd><p>reply same as request (0x05)</p></dd><dt><span class="term">UINT8 versionmin</span></dt><dd><p>reply same as request (0x00)</p></dd><dt><span class="term">UINT8 type</span></dt><dd><p>one of the MSRPC_Type enums</p></dd><dt><span class="term">UINT8 flags</span></dt><dd><p>reply same as request (0x00 for Bind, 0x03 for Request)</p></dd><dt><span class="term">UINT32 representation</span></dt><dd><p>reply same as request (0x00000010)</p></dd><dt><span class="term">UINT16 fraglength</span></dt><dd><p>the length of the data section of the SMB trans packet</p></dd><dt><span class="term">UINT16 authlength</span></dt><dd><p></p></dd><dt><span class="term">UINT32 callid</span></dt><dd><p>call identifier. (e.g. 0x00149594)</p></dd><dt><span class="term">* stub USE TvPacket</span></dt><dd><p>the remainder of the packet depending on the "type"</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id288812"></a>Interface identification</h4></div></div></div><p>the interfaces are numbered. as yet I haven't seen more than one interface used on the same pipe name srvsvc</p><pre class="programlisting">
126abstract (0x4B324FC8, 0x01D31670, 0x475A7812, 0x88E16EBF, 0x00000003)
127transfer (0x8A885D04, 0x11C91CEB, 0x0008E89F, 0x6048102B, 0x00000002)
128</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id288830"></a>RPC_Iface RW</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8 byte[16]</span></dt><dd><p>16 bytes of number</p></dd><dt><span class="term">UINT32 version</span></dt><dd><p>the interface number</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id288861"></a>RPC_ReqBind RW</h4></div></div></div><p>the remainder of the packet after the header if "type" was Bind in the response header, "type" should be BindAck</p><div class="variablelist"><dl><dt><span class="term">UINT16 maxtsize</span></dt><dd><p>maximum transmission fragment size (0x1630)</p></dd><dt><span class="term">UINT16 maxrsize</span></dt><dd><p>max receive fragment size (0x1630)</p></dd><dt><span class="term">UINT32 assocgid</span></dt><dd><p>associated group id (0x0)</p></dd><dt><span class="term">UINT32 numelements</span></dt><dd><p>the number of elements (0x1)</p></dd><dt><span class="term">UINT16 contextid</span></dt><dd><p>presentation context identifier (0x0)</p></dd><dt><span class="term">UINT8 numsyntaxes</span></dt><dd><p>the number of syntaxes (has always been 1?)(0x1)</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>4-byte alignment padding, against SMB header</p></dd><dt><span class="term">* abstractint USE RPC_Iface</span></dt><dd><p>num and vers. of interface client is using</p></dd><dt><span class="term">* transferint USE RPC_Iface</span></dt><dd><p>num and vers. of interface to use for replies</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id288969"></a>RPC_Address RW</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16 length</span></dt><dd><p>length of the string including null terminator</p></dd><dt><span class="term">* port USE string</span></dt><dd><p>the string above in single byte, null terminated form</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289000"></a>RPC_ResBind RW</h4></div></div></div><p>the response to place after the header in the reply packet</p><div class="variablelist"><dl><dt><span class="term">UINT16 maxtsize</span></dt><dd><p>same as request</p></dd><dt><span class="term">UINT16 maxrsize</span></dt><dd><p>same as request</p></dd><dt><span class="term">UINT32 assocgid</span></dt><dd><p>zero</p></dd><dt><span class="term">* secondaddr USE RPC_Address</span></dt><dd><p>the address string, as described earlier</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>4-byte alignment padding, against SMB header</p></dd><dt><span class="term">UINT8 numresults</span></dt><dd><p>the number of results (0x01)</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>4-byte alignment padding, against SMB header</p></dd><dt><span class="term">UINT16 result</span></dt><dd><p>result (0x00 = accept)</p></dd><dt><span class="term">UINT16 reason</span></dt><dd><p>reason (0x00 = no reason specified)</p></dd><dt><span class="term">* transfersyntax USE RPC_Iface</span></dt><dd><p>the transfer syntax from the request</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289116"></a>RPC_ReqNorm RW</h4></div></div></div><p>the remainder of the packet after the header for every other other request</p><div class="variablelist"><dl><dt><span class="term">UINT32 allochint</span></dt><dd><p>the size of the stub data in bytes</p></dd><dt><span class="term">UINT16 prescontext</span></dt><dd><p>presentation context identifier (0x0)</p></dd><dt><span class="term">UINT16 opnum</span></dt><dd><p>operation number (0x15)</p></dd><dt><span class="term">* stub USE TvPacket</span></dt><dd><p>a packet dependent on the pipe name (probably the interface) and the op number)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289172"></a>RPC_ResNorm RW</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32 allochint</span></dt><dd><p># size of the stub data in bytes</p></dd><dt><span class="term">UINT16 prescontext</span></dt><dd><p># presentation context identifier (same as request)</p></dd><dt><span class="term">UINT8 cancelcount</span></dt><dd><p># cancel count? (0x0)</p></dd><dt><span class="term">UINT8 reserved</span></dt><dd><p># 0 - one byte padding</p></dd><dt><span class="term">* stub USE TvPacket</span></dt><dd><p># the remainder of the reply</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id289234"></a>Tail</h3></div></div></div><p>The end of each of the NTLSA and NETLOGON named pipes ends with:</p><div class="variablelist"><dl><dt><span class="term">......</span></dt><dd><p>end of data</p></dd><dt><span class="term">UINT32</span></dt><dd><p>return code</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id289270"></a>RPC Bind / Bind Ack</h3></div></div></div><p>
129RPC Binds are the process of associating an RPC pipe (e.g \PIPE\lsarpc)
130with a "transfer syntax" (see RPC_Iface structure).  The purpose for doing
131this is unknown.
132</p><p><span class="emphasis"><em>Note: The RPC_ResBind SMB Transact request is sent with two uint16 setup parameters.  The first is 0x0026; the second is the file handle
133        returned by the SMBopenX Transact response.</em></span></p><p><span class="emphasis"><em>Note:  The RPC_ResBind members maxtsize, maxrsize and assocgid are the same in the response as the same members in the RPC_ReqBind.  The
134        RPC_ResBind member transfersyntax is the same in the response as
135        the</em></span></p><p><span class="emphasis"><em>Note:  The RPC_ResBind response member secondaddr contains the name of what is presumed to be the service behind the RPC pipe.  The
136        mapping identified so far is:</em></span></p><div class="variablelist"><dl><dt><span class="term">initial SMBopenX request:</span></dt><dd><p>RPC_ResBind response:</p></dd><dt><span class="term">"\\PIPE\\srvsvc"</span></dt><dd><p>"\\PIPE\\ntsvcs"</p></dd><dt><span class="term">"\\PIPE\\samr"</span></dt><dd><p>"\\PIPE\\lsass"</p></dd><dt><span class="term">"\\PIPE\\lsarpc"</span></dt><dd><p>"\\PIPE\\lsass"</p></dd><dt><span class="term">"\\PIPE\\wkssvc"</span></dt><dd><p>"\\PIPE\\wksvcs"</p></dd><dt><span class="term">"\\PIPE\\NETLOGON"</span></dt><dd><p>"\\PIPE\\NETLOGON"</p></dd></dl></div><p><span class="emphasis"><em>Note:       The RPC_Packet fraglength member in both the Bind Request and Bind Acknowledgment must contain the length of the entire RPC data, including the RPC_Packet header.</em></span></p><p>Request:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>RPC_Packet</td></tr><tr><td>RPC_ReqBind</td></tr></table><p>Response:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>RPC_Packet</td></tr><tr><td>RPC_ResBind</td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id289407"></a>NTLSA Transact Named Pipe</h3></div></div></div><p>The sequence of actions taken on this pipe are:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>Establish a connection to the IPC$ share (SMBtconX).  use encrypted passwords.</td></tr><tr><td>Open an RPC Pipe with the name "\\PIPE\\lsarpc".  Store the file handle.</td></tr><tr><td>Using the file handle, send a Set Named Pipe Handle state to 0x4300.</td></tr><tr><td>Send an LSA Open Policy request.  Store the Policy Handle.</td></tr><tr><td>Using the Policy Handle, send LSA Query Info Policy requests, etc.</td></tr><tr><td>Using the Policy Handle, send an LSA Close.</td></tr><tr><td>Close the IPC$ share.</td></tr></table><p>Defines for this pipe, identifying the query are:</p><div class="variablelist"><dl><dt><span class="term">LSA Open Policy:</span></dt><dd><p>0x2c</p></dd><dt><span class="term">LSA Query Info Policy:</span></dt><dd><p>0x07</p></dd><dt><span class="term">LSA Enumerate Trusted Domains:</span></dt><dd><p>0x0d</p></dd><dt><span class="term">LSA Open Secret:</span></dt><dd><p>0xff</p></dd><dt><span class="term">LSA Lookup SIDs:</span></dt><dd><p>0xfe</p></dd><dt><span class="term">LSA Lookup Names:</span></dt><dd><p>0xfd</p></dd><dt><span class="term">LSA Close:</span></dt><dd><p>0x00</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id289535"></a>LSA Open Policy</h3></div></div></div><p><span class="emphasis"><em>Note:      The policy handle can be anything you like.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289546"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>server name - unicode string starting with two '\'s</p></dd><dt><span class="term">OBJ_ATTR</span></dt><dd><p>object attributes</p></dd><dt><span class="term">UINT32</span></dt><dd><p>1 - desired access</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289601"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">return</span></dt><dd><p>0 - indicates success</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id289634"></a>LSA Query Info Policy</h3></div></div></div><p><span class="emphasis"><em>Note:     The info class in response must be the same as that in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289645"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">UINT16</span></dt><dd><p>info class (also a policy handle?)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289675"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UINT16</span></dt><dd><p>info class (same as info class in request).</p></dd></dl></div><pre class="programlisting">
137switch (info class)
138case 3:
139case 5:
140{
141DOM_INFO domain info, levels 3 and 5 (are the same).
142}
143
144return    0 - indicates success
145</pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id289716"></a>LSA Enumerate Trusted Domains</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289722"></a>Request</h4></div></div></div><p>no extra data</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289732"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0 - enumeration context</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - entries read</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - trust information</p></dd><dt><span class="term">return</span></dt><dd><p>0x8000 001a - "no trusted domains" success code</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id289788"></a>LSA Open Secret</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289794"></a>Request</h4></div></div></div><p>no extra data</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289804"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd></dl></div><p>return    0x0C00 0034 - "no such secret" success code</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id289875"></a>LSA Close</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289880"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>policy handle to be closed</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289901"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>0s - closed policy handle (all zeros)</p></dd></dl></div><p>return    0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id289926"></a>LSA Lookup SIDS</h3></div></div></div><p><span class="emphasis"><em>Note:   num_entries in response must be same as num_entries in request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id289937"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain SID buffer pointer</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name buffer pointer</p></dd><dt><span class="term">VOID*[num_entries] undocumented domain SID pointers to be looked up.
146</span></dt><dd><p>DOM_SID[num_entries] domain SIDs to be looked up.</p></dd><dt><span class="term">char[16]</span></dt><dd><p>completely undocumented 16 bytes.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290014"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">DOM_REF</span></dt><dd><p>domain reference response</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">DOM_SID2[num_entries]</span></dt><dd><p>domain SIDs (from Request, listed above).</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd></dl></div><p>return                0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id290090"></a>LSA Lookup Names</h3></div></div></div><p><span class="emphasis"><em>Note:        num_entries in response must be same as num_entries in request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290101"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain SID buffer pointer</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name buffer pointer</p></dd><dt><span class="term">NAME[num_entries]</span></dt><dd><p>names to be looked up.</p></dd><dt><span class="term">char[]</span></dt><dd><p>undocumented bytes - falsely translated SID structure?</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290190"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">DOM_REF</span></dt><dd><p>domain reference response</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">DOM_RID[num_entries]</span></dt><dd><p>domain SIDs (from Request, listed above).</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd></dl></div><p>return                0 - indicates success</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id290267"></a>NETLOGON rpc Transact Named Pipe</h2></div></div></div><p>The sequence of actions taken on this pipe are:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>tablish a connection to the IPC$ share (SMBtconX).  use encrypted passwords.</td></tr><tr><td>en an RPC Pipe with the name "\\PIPE\\NETLOGON".  Store the file handle.</td></tr><tr><td>ing the file handle, send a Set Named Pipe Handle state to 0x4300.</td></tr><tr><td>eate Client Challenge. Send LSA Request Challenge.  Store Server Challenge.</td></tr><tr><td>lculate Session Key.  Send an LSA Auth 2 Challenge.  Store Auth2 Challenge.</td></tr><tr><td>lc/Verify Client Creds.  Send LSA Srv PW Set.  Calc/Verify Server Creds.</td></tr><tr><td>lc/Verify Client Creds.  Send LSA SAM Logon .  Calc/Verify Server Creds.</td></tr><tr><td>lc/Verify Client Creds.  Send LSA SAM Logoff.  Calc/Verify Server Creds.</td></tr><tr><td>ose the IPC$ share.</td></tr></table><p>Defines for this pipe, identifying the query are</p><div class="variablelist"><dl><dt><span class="term">LSA Request Challenge:</span></dt><dd><p>0x04</p></dd><dt><span class="term">LSA Server Password Set:</span></dt><dd><p>0x06</p></dd><dt><span class="term">LSA SAM Logon:</span></dt><dd><p>0x02</p></dd><dt><span class="term">LSA SAM Logoff:</span></dt><dd><p>0x03</p></dd><dt><span class="term">LSA Auth 2:</span></dt><dd><p>0x0f</p></dd><dt><span class="term">LSA Logon Control:</span></dt><dd><p>0x0e</p></dd></dl></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id290392"></a>LSA Request Challenge</h3></div></div></div><p><span class="emphasis"><em>Note:      logon server name starts with two '\' characters and is upper case.</em></span></p><p><span class="emphasis"><em>Note:  logon client is the machine, not the user.</em></span></p><p><span class="emphasis"><em>Note:   the initial LanManager password hash, against which the challenge is issued, is the machine name itself (lower case).  there will becalls issued (LSA Server Password Set) which will change this, later. refusing these calls allows you to always deal with the same password (i.e the LM# of the machine name in lower case).</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290414"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon client unicode string</p></dd><dt><span class="term">char[8]</span></dt><dd><p>client challenge</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290469"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[8]</span></dt><dd><p>server challenge</p></dd></dl></div><p>return    0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id290495"></a>LSA Authenticate 2</h3></div></div></div><p><span class="emphasis"><em>Note:       in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials).</em></span></p><p><span class="emphasis"><em>Note:  neg_flags in the response is the same as that in the request.</em></span></p><p><span class="emphasis"><em>Note:        you must take a copy of the client-calculated credentials received      here, because they will be used in subsequent authentication packets.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290517"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">LOG_INFO</span></dt><dd><p>client identification info</p></dd><dt><span class="term">char[8]</span></dt><dd><p>client-calculated credentials</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to 4-byte align with start of SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>neg_flags - negotiated flags (usual value is 0x0000 01ff)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290570"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[8]</span></dt><dd><p>server credentials.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>neg_flags - same as neg_flags in request.</p></dd></dl></div><p>return    0 - indicates success.  failure value unknown.</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id290608"></a>LSA Server Password Set</h3></div></div></div><p><span class="emphasis"><em>Note: the new password is suspected to be a DES encryption using the old password to generate the key.</em></span></p><p><span class="emphasis"><em>Note: in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials).</em></span></p><p><span class="emphasis"><em>Note: the server credentials are constructed from the client-calculated credentials and the client time + 1 second.</em></span></p><p><span class="emphasis"><em>Note: you must take a copy of the client-calculated credentials received here, because they will be used in subsequent authentication packets.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290636"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">CLNT_INFO</span></dt><dd><p>client identification/authentication info</p></dd><dt><span class="term">char[]</span></dt><dd><p>new password - undocumented.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290668"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">CREDS</span></dt><dd><p>server credentials.  server time stamp appears to be ignored.</p></dd></dl></div><p>return    0 - indicates success; 0xC000 006a indicates failure</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id290695"></a>LSA SAM Logon</h3></div></div></div><p><span class="emphasis"><em>
147Note:   valid_user is True iff the username and password hash are valid for
148        the requested domain.
149</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290706"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">SAM_INFO</span></dt><dd><p>sam_id structure</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290727"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">CREDS</span></dt><dd><p>server credentials.  server time stamp appears to be ignored.</p></dd></dl></div><pre class="programlisting">
150if (valid_user)
151{
152        UINT16      3 - switch value indicating USER_INFO structure.
153    VOID*     non-zero - pointer to USER_INFO structure
154    USER_INFO user logon information
155
156    UINT32    1 - Authoritative response; 0 - Non-Auth?
157
158    return    0 - indicates success
159}
160else
161{
162        UINT16    0 - switch value.  value to indicate no user presumed.
163    VOID*     0x0000 0000 - indicates no USER_INFO structure.
164
165    UINT32    1 - Authoritative response; 0 - Non-Auth?
166
167    return    0xC000 0064 - NT_STATUS_NO_SUCH_USER.
168}
169</pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id290771"></a>LSA SAM Logoff</h3></div></div></div><p><span class="emphasis"><em>
170Note:   presumably, the SAM_INFO structure is validated, and a (currently
171        undocumented) error code returned if the Logoff is invalid.
172</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290782"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">SAM_INFO</span></dt><dd><p>sam_id structure</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290804"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">CREDS</span></dt><dd><p>server credentials.  server time stamp appears to be ignored.</p></dd></dl></div><p>return      0 - indicates success.  undocumented failure indication.</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id290842"></a>\\MAILSLOT\NET\NTLOGON</h2></div></div></div><p><span class="emphasis"><em>
173Note:   mailslots will contain a response mailslot, to which the response
174        should be sent.  the target NetBIOS name is REQUEST_NAME&lt;20&gt;, where
175        REQUEST_NAME is the name of the machine that sent the request.
176</em></span></p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id290854"></a>Query for PDC</h3></div></div></div><p><span class="emphasis"><em>Note:  NTversion, LMNTtoken, LM20token in response are the same as those       given in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290865"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x0007 - Query for PDC</p></dd><dt><span class="term">STR</span></dt><dd><p>machine name</p></dd><dt><span class="term">STR</span></dt><dd><p>response mailslot</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to 2-byte align with start of mailslot.</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id290964"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x000A - Respose to Query for PDC</p></dd><dt><span class="term">STR</span></dt><dd><p>machine name (in uppercase)</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to 2-byte align with start of mailslot.</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion (same as received in request)</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken (same as received in request)</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token (same as received in request)</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id291059"></a>SAM Logon</h3></div></div></div><p><span class="emphasis"><em>Note: machine name in response is preceded by two '\' characters.</em></span></p><p><span class="emphasis"><em>Note:  NTversion, LMNTtoken, LM20token in response are the same as those given in the request.</em></span></p><p><span class="emphasis"><em>Note:      user name in the response is presumably the same as that in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id291080"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x0012 - SAM Logon</p></dd><dt><span class="term">UINT16</span></dt><dd><p>request count</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>user name</p></dd><dt><span class="term">STR</span></dt><dd><p>response mailslot</p></dd><dt><span class="term">UINT32</span></dt><dd><p>alloweable account</p></dd><dt><span class="term">UINT32</span></dt><dd><p>domain SID size</p></dd><dt><span class="term">char[sid_size]</span></dt><dd><p>domain SID, of sid_size bytes.</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>???? padding to 4? 2? -byte align with start of mailslot.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id291225"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x0013 - Response to SAM Logon</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>user name - workstation trust account</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain name </p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token</p></dd></dl></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id291315"></a>SRVSVC Transact Named Pipe</h2></div></div></div><p>Defines for this pipe, identifying the query are:</p><div class="variablelist"><dl><dt><span class="term">Net Share Enum</span></dt><dd><p>0x0f</p></dd><dt><span class="term">Net Server Get Info</span></dt><dd><p>0x15</p></dd></dl></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id291350"></a>Net Share Enum</h3></div></div></div><p><span class="emphasis"><em>Note: share level and switch value in the response are presumably the same as those in the request.</em></span></p><p><span class="emphasis"><em>Note:        cifsrap2.txt (section 5) may be of limited assistance here.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id291366"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>pointer (to server name?)</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>server name</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with the start of the SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>share level</p></dd><dt><span class="term">UINT32</span></dt><dd><p>switch value</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to SHARE_INFO_1_CTR</p></dd><dt><span class="term">SHARE_INFO_1_CTR</span></dt><dd><p>share info with 0 entries</p></dd><dt><span class="term">UINT32</span></dt><dd><p>preferred maximum length (0xffff ffff)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id291464"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>share level</p></dd><dt><span class="term">UINT32</span></dt><dd><p>switch value</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to SHARE_INFO_1_CTR</p></dd><dt><span class="term">SHARE_INFO_1_CTR</span></dt><dd><p>share info (only added if share info ptr is non-zero)</p></dd></dl></div><p>return            0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id291522"></a>Net Server Get Info</h3></div></div></div><p><span class="emphasis"><em>Note:   level is the same value as in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id291532"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UNISTR2</span></dt><dd><p>server name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>switch level</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id291565"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>switch level</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to SERVER_INFO_101</p></dd><dt><span class="term">SERVER_INFO_101</span></dt><dd><p>server info (only added if server info ptr is non-zero)</p></dd></dl></div><p>return            0 - indicates success</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id291613"></a>Cryptographic side of NT Domain Authentication</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id291619"></a>Definitions</h3></div></div></div><div class="variablelist"><dl><dt><span class="term">Add(A1,A2)</span></dt><dd><p>Intel byte ordered addition of corresponding 4 byte words in arrays A1 and A2</p></dd><dt><span class="term">E(K,D)</span></dt><dd><p>DES ECB encryption of 8 byte data D using 7 byte key K</p></dd><dt><span class="term">lmowf()</span></dt><dd><p>Lan man hash</p></dd><dt><span class="term">ntowf()</span></dt><dd><p>NT hash</p></dd><dt><span class="term">PW</span></dt><dd><p>md4(machine_password) == md4(lsadump $machine.acc) ==
177pwdump(machine$) (initially) == md4(lmowf(unicode(machine)))
178</p></dd><dt><span class="term">ARC4(K,Lk,D,Ld)</span></dt><dd><p>ARC4 encryption of data D of length Ld with key K of length Lk</p></dd><dt><span class="term">v[m..n(,l)]</span></dt><dd><p>subset of v from bytes m to n, optionally padded with zeroes to length l</p></dd><dt><span class="term">Cred(K,D)</span></dt><dd><p>E(K[7..7,7],E(K[0..6],D)) computes a credential</p></dd><dt><span class="term">Time()</span></dt><dd><p>4 byte current time</p></dd><dt><span class="term">Cc,Cs</span></dt><dd><p>8 byte client and server challenges Rc,Rs: 8 byte client and server credentials</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id291744"></a>Protocol</h3></div></div></div><pre class="programlisting">
179C-&gt;S ReqChal,Cc
180S-&gt;C Cs
181</pre><pre class="programlisting">
182C &amp; S compute session key Ks = E(PW[9..15],E(PW[0..6],Add(Cc,Cs)))
183</pre><pre class="programlisting">
184C: Rc = Cred(Ks,Cc)
185C-&gt;S Authenticate,Rc
186S: Rs = Cred(Ks,Cs), assert(Rc == Cred(Ks,Cc))
187S-&gt;C Rs
188C: assert(Rs == Cred(Ks,Cs))
189</pre><p>
190On joining the domain the client will optionally attempt to change its
191password and the domain controller may refuse to update it depending
192on registry settings. This will also occur weekly afterwards.
193</p><pre class="programlisting">
194C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc)
195C-&gt;S ServerPasswordSet,Rc',Tc,arc4(Ks[0..7,16],lmowf(randompassword())
196C: Rc = Cred(Ks,Rc+Tc+1)
197S: assert(Rc' == Cred(Ks,Rc+Tc)), Ts = Time()
198S: Rs' = Cred(Ks,Rs+Tc+1)
199S-&gt;C Rs',Ts
200C: assert(Rs' == Cred(Ks,Rs+Tc+1))
201S: Rs = Rs'
202</pre><p>
203User: U with password P wishes to login to the domain (incidental data
204such as workstation and domain omitted)
205</p><pre class="programlisting">
206C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc)
207C-&gt;S NetLogonSamLogon,Rc',Tc,U,arc4(Ks[0..7,16],16,ntowf(P),16), arc4(Ks[0..7,16],16,lmowf(P),16)
208S: assert(Rc' == Cred(Ks,Rc+Tc)) assert(passwords match those in SAM)
209S: Ts = Time()
210</pre><pre class="programlisting">
211S-&gt;C Cred(Ks,Cred(Ks,Rc+Tc+1)),userinfo(logon script,UID,SIDs,etc)
212C: assert(Rs == Cred(Ks,Cred(Rc+Tc+1))
213C: Rc = Cred(Ks,Rc+Tc+1)
214</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id291808"></a>Comments</h3></div></div></div><p>
215On first joining the domain the session key could be computed by
216anyone listening in on the network as the machine password has a well
217known value. Until the machine is rebooted it will use this session
218key to encrypt NT and LM one way functions of passwords which are
219password equivalents. Any user who logs in before the machine has been
220rebooted a second time will have their password equivalent exposed. Of
221course the new machine password is exposed at this time anyway.
222</p><p>
223None of the returned user info such as logon script, profile path and
224SIDs *appear* to be protected by anything other than the TCP checksum.
225</p><p>
226The server time stamps appear to be ignored.
227</p><p>
228The client sends a ReturnAuthenticator in the SamLogon request which I
229can't find a use for.  However its time is used as the timestamp
230returned by the server.
231</p><p>
232The password OWFs should NOT be sent over the network reversibly
233encrypted. They should be sent using ARC4(Ks,md4(owf)) with the server
234computing the same function using the owf values in the SAM.
235</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id291841"></a>SIDs and RIDs</h2></div></div></div><p>
236SIDs and RIDs are well documented elsewhere.
237</p><p>
238A SID is an NT Security ID (see DOM_SID structure).  They are of the form:
239</p><table class="simplelist" border="0" summary="Simple list"><tr><td>revision-NN-SubAuth1-SubAuth2-SubAuth3... </td></tr><tr><td>revision-0xNNNNNNNNNNNN-SubAuth1-SubAuth2-SubAuth3...</td></tr></table><p>
240currently, the SID revision is 1.
241The Sub-Authorities are known as Relative IDs (RIDs).
242</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id291871"></a>Well-known SIDs</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id291877"></a>Universal well-known SIDs</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">Null SID</span></dt><dd><p>S-1-0-0</p></dd><dt><span class="term">World</span></dt><dd><p>S-1-1-0</p></dd><dt><span class="term">Local</span></dt><dd><p>S-1-2-0</p></dd><dt><span class="term">Creator Owner ID</span></dt><dd><p>S-1-3-0</p></dd><dt><span class="term">Creator Group ID</span></dt><dd><p>S-1-3-1</p></dd><dt><span class="term">Creator Owner Server ID</span></dt><dd><p>S-1-3-2</p></dd><dt><span class="term">Creator Group Server ID</span></dt><dd><p>S-1-3-3</p></dd><dt><span class="term">(Non-unique IDs)</span></dt><dd><p>S-1-4</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id291977"></a>NT well-known SIDs</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">NT Authority</span></dt><dd><p>S-1-5</p></dd><dt><span class="term">Dialup</span></dt><dd><p>S-1-5-1</p></dd><dt><span class="term">Network</span></dt><dd><p>S-1-5-2</p></dd><dt><span class="term">Batch</span></dt><dd><p>S-1-5-3</p></dd><dt><span class="term">Interactive</span></dt><dd><p>S-1-5-4</p></dd><dt><span class="term">Service</span></dt><dd><p>S-1-5-6</p></dd><dt><span class="term">AnonymousLogon(aka null logon session)</span></dt><dd><p>S-1-5-7</p></dd><dt><span class="term">Proxy</span></dt><dd><p>S-1-5-8</p></dd><dt><span class="term">ServerLogon(aka domain controller account)</span></dt><dd><p>S-1-5-8</p></dd><dt><span class="term">(Logon IDs)</span></dt><dd><p>S-1-5-5-X-Y</p></dd><dt><span class="term">(NT non-unique IDs)</span></dt><dd><p>S-1-5-0x15-...</p></dd><dt><span class="term">(Built-in domain)</span></dt><dd><p>s-1-5-0x20</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id292120"></a>Well-known RIDS</h3></div></div></div><p>
243A RID is a sub-authority value, as part of either a SID, or in the case
244of Group RIDs, part of the DOM_GID structure, in the USER_INFO_1
245structure, in the LSA SAM Logon response.
246</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id292131"></a>Well-known RID users</h4></div></div></div><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>DOMAIN_USER_RID_ADMIN</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>01F4</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>DOMAIN_USER_RID_GUEST</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>01F5</div></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id292169"></a>Well-known RID groups</h4></div></div></div><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>     DOMAIN_GROUP_RID_ADMINS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0200</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>        DOMAIN_GROUP_RID_USERS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0201</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong> DOMAIN_GROUP_RID_GUESTS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0202</div></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id292218"></a>Well-known RID aliases</h4></div></div></div><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>     DOMAIN_ALIAS_RID_ADMINS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0220</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>        DOMAIN_ALIAS_RID_USERS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0221</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong> DOMAIN_ALIAS_RID_GUESTS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0222</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>        DOMAIN_ALIAS_RID_POWER_USERS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0223</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>   DOMAIN_ALIAS_RID_ACCOUNT_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0224</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>   DOMAIN_ALIAS_RID_SYSTEM_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0225</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>    DOMAIN_ALIAS_RID_PRINT_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0226</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>     DOMAIN_ALIAS_RID_BACKUP_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0227</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>    DOMAIN_ALIAS_RID_REPLICATOR</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0228</div></div></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="unix-smb.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. NetBIOS in a Unix World </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. Samba Basics</td></tr></table></div></body></html>
Note: See TracBrowser for help on using the repository browser.