<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>El blog de Lluis Franco : HowTo</title><link>http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx</link><description>Tags: HowTo</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>HowTo: Obtener TODOS los usuarios de un grupo del Directorio Activo</title><link>http://msmvps.com/blogs/lfranco/archive/2009/11/30/howto-obtener-todos-los-usuarios-de-un-grupo-del-directorio-activo.aspx</link><pubDate>Mon, 30 Nov 2009 16:58:36 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1743070</guid><dc:creator>lfranco</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1743070</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2009/11/30/howto-obtener-todos-los-usuarios-de-un-grupo-del-directorio-activo.aspx#comments</comments><description>&lt;p align="justify"&gt;Siguiendo con el tema de las últimas entradas, vamos a ver cómo obtener TODOS los usuarios que pertenecen a un grupo del directorio activo. Y cuando digo TODOS los usuarios, me refiero a TODOS (por algo lo he puesto en mayúsculas :-D). Es decir, dentro de un grupo podemos tener otros grupos, que a su vez contengan otros grupos y así succesivamente... y nuestro objetivo es obtener todos los usuarios de forma recursiva.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://www.uyssoft.com/blog/images/HowToObtenerTODOSlosusuariosdeungrupodel_E9D0/ADGroups.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="ADGroups" border="0" alt="ADGroups" src="http://www.uyssoft.com/blog/images/HowToObtenerTODOSlosusuariosdeungrupodel_E9D0/ADGroups_thumb.png" width="571" height="451" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Para obtener los datos de estos usuarios vamos a crear una clase, para ir almacenando las propiedades que deseamos obtener de cada usuario. Y una función que obtenga los usuarios de un grupo, y se llame a sí misma de forma recursiva en caso que este grupo contenga otros grupos.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;El código de la clase:&lt;/p&gt;  &lt;div&gt;   &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ADUser&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] Sid { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Name { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; DistinguishedName { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; SAMAccountName { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; RoleType { get; set; }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ADUser(&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] sid, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name, &lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; distinguishedName, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sAMAccountName)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        Sid = sid;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        Name = name;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        DistinguishedName = distinguishedName;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        SAMAccountName = sAMAccountName;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sIDtoString()&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        SecurityIdentifier sid = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SecurityIdentifier(Sid, 0);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; sid.ToString();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Y el método que devuelve todos los usuarios de un grupo de forma recursiva:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; Alpha.Code&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; SecurityContextEx&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; getDomainName()&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; IPGlobalProperties.GetIPGlobalProperties().DomainName;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; getLDAPDomainName(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; domainName)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            StringBuilder sb = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] dcItems = domainName.Split(&lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;.ToCharArray());&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            sb.Append(&lt;span style="color:#006080;"&gt;&amp;quot;LDAP://&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; item &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; dcItems)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                sb.AppendFormat(&lt;span style="color:#006080;"&gt;&amp;quot;DC={0},&amp;quot;&lt;/span&gt;, item);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; sb.ToString().Substring(0, sb.ToString().Length - 1);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; List&amp;lt;ADUser&amp;gt; GetUsersInGroup(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; group)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            List&amp;lt;ADUser&amp;gt; users = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;ADUser&amp;gt;();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ldapDomainName = SecurityContext.getLDAPDomainName(SecurityContext.getDomainName());&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; domainName = ldapDomainName.Replace(&lt;span style="color:#006080;"&gt;&amp;quot;LDAP://&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; groupMemebers = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            DirectoryEntry de = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DirectoryEntry(ldapDomainName);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            DirectorySearcher ds = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DirectorySearcher(de, &lt;span style="color:#006080;"&gt;&amp;quot;(objectClass=person)&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            ds.Filter = &lt;span style="color:#006080;"&gt;&amp;quot;(&amp;amp;(objectClass=group)(cn=&amp;quot;&lt;/span&gt; + group + &lt;span style="color:#006080;"&gt;&amp;quot;))&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (SearchResult result &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; ds.FindAll())&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                var dir = result.GetDirectoryEntry();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                var list = dir.Invoke(&lt;span style="color:#006080;"&gt;&amp;quot;Members&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                IEnumerable entries = (IEnumerable)list;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var entry &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; entries)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    DirectoryEntry member = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DirectoryEntry(entry);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (member.SchemaClassName == &lt;span style="color:#006080;"&gt;&amp;quot;group&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        List&amp;lt;ADUser&amp;gt; usersInGroup =&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            GetUsersInGroup(member.Properties[&lt;span style="color:#006080;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;][0].ToString());&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ADUser aduser &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; usersInGroup)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!users.ToDictionary(u =&amp;gt; u.Name).ContainsKey(aduser.Name))&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                                users.Add(aduser);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        ADUser aduser = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ADUser(&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            (&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[])member.Properties[&lt;span style="color:#006080;"&gt;&amp;quot;objectSid&amp;quot;&lt;/span&gt;][0],&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            member.Properties[&lt;span style="color:#006080;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;][0].ToString(),&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            member.Properties[&lt;span style="color:#006080;"&gt;&amp;quot;distinguishedName&amp;quot;&lt;/span&gt;][0].ToString(),&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                            member.Properties[&lt;span style="color:#006080;"&gt;&amp;quot;sAMAccountName&amp;quot;&lt;/span&gt;][0].ToString());&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        users.Add(aduser);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; users;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p align="justify"&gt;Aparte de la función &lt;strong&gt;GetUsersInGroup&lt;/strong&gt;, también existen un par de métodos de apoyo para averiguar el nombre de nuestro dominio, que creo recordar que he publicado con anterioridad, pero por si acaso os los he publicado también.&lt;/p&gt;

&lt;p&gt;Si deseamos obtener los usuarios de un grupo en particular, basta con usarlo de este modo:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;List&amp;lt;ADUser&amp;gt; users = SecurityContextEx.GetUsersInGroup(&lt;span style="color:#006080;"&gt;&amp;quot;My users&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Nota:&lt;/u&gt;&lt;/strong&gt; En ocasiones, puede resultar una buena práctica para la administración de la seguridad de nuestras aplicaciones, crear un grupo en el directorio activo con el mismo nombre de la aplicación. Y de este modo conceder acceso a todos los miembros de dicho grupo a nuestra aplicación. En este caso todavía resultaría más sencillo mostrar todos los usuarios a los que hemos concedido acceso:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;List&amp;lt;ADUser&amp;gt; users = SecurityContextEx.GetUsersInGroup(Application.ProductName);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Espero que os haya gustado,&lt;/p&gt;

&lt;p&gt;Un saludo desde las frías tierras de Andorra :-) &lt;/p&gt;

&lt;p&gt;Y después de la nevada de ayer, esta vez más frías que nunca…&lt;/p&gt;

&lt;p&gt;Noviembre 2009&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1743070" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/LDAP/default.aspx">LDAP</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2009/default.aspx">2009</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Users/default.aspx">Users</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Active+Directory/default.aspx">Active Directory</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Groups/default.aspx">Groups</category></item><item><title>HowTo: Agrupando grupos :-)</title><link>http://msmvps.com/blogs/lfranco/archive/2009/11/26/howto-agrupando-grupos.aspx</link><pubDate>Thu, 26 Nov 2009 11:53:51 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1742271</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1742271</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2009/11/26/howto-agrupando-grupos.aspx#comments</comments><description>&lt;p&gt;Una entrada rápida, no como la de &lt;a href="http://geeks.ms/blogs/lfranco/archive/2009/11/25/how-to-191-como-saber-si-el-usuario-actual-es-administrador-del-dominio.aspx" target="_blank"&gt;ayer&lt;/a&gt;. Aunque el tema está bastante relacionado ya que ambos tratan de Active Directory e identidades.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.uyssoft.com/blog/images/HowToAgrupandogrupos_9B56/GroupPolicy.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="GroupPolicy" border="0" alt="GroupPolicy" src="http://www.uyssoft.com/blog/images/HowToAgrupandogrupos_9B56/GroupPolicy_thumb.jpg" width="244" height="142" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Hoy vamos a ver una forma sencilla de obtener todos los grupos a los que pertenece un usuario, y agruparlos por su nombre de dominio. Y todo esto mediante una sola sentencia LINQ to objects. A ver quién es el guapo o guapa que me dice que LINQ to objects no es una maravilla!&lt;/p&gt;  &lt;p&gt;El resultado que vamos a obtener es el siguiente (algunos nombres se han omitido por razones obvias :-P):&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;Groups under:      &lt;br /&gt;&amp;#160; - Group name: Todos      &lt;br /&gt;&amp;#160; - Group name: LOCAL      &lt;br /&gt;Groups under: BUILTIN      &lt;br /&gt;&amp;#160; - Group name: Usuarios      &lt;br /&gt;&amp;#160; - Group name: Administradores      &lt;br /&gt;Groups under: PRIMARY_DOMAIN_NAME      &lt;br /&gt;&amp;#160; - Group name: xxx1      &lt;br /&gt;&amp;#160; - Group name: xxx2      &lt;br /&gt;&amp;#160; - Group name: xxx3      &lt;br /&gt;&amp;#160; - Group name: xxx4      &lt;br /&gt;&amp;#160; - Group name: xxxN      &lt;br /&gt;Groups under: NT AUTHORITY      &lt;br /&gt;&amp;#160; - Group name: INTERACTIVE      &lt;br /&gt;&amp;#160; - Group name: Usuarios autentificados&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Y el código resultante es un método extensor para la clase WindowsIdentity, con dos funciones auxiliares en forma de métodos extensores de la clase NTAccount:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div&gt;   &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.DirectoryServices;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.DirectoryServices.ActiveDirectory;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Net.NetworkInformation;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Security.Principal;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; Alpha.Code&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; SecurityExtensions&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IOrderedEnumerable&amp;lt;IGrouping &amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;, NTAccount&amp;gt;&amp;gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            GetGroupsUnderDomains(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; WindowsIdentity identity)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            var groups =&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        from grIdentity &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; identity.Groups&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; grIdentity.IsValidTargetType(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(NTAccount))&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        select grIdentity.Translate(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(NTAccount)) &lt;span style="color:#0000ff;"&gt;as&lt;/span&gt; NTAccount into ntAccounts&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        let domainName = ntAccounts.GetDomainName()&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        let groupName = ntAccounts.GetAccountName()&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        orderby domainName&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        group ntAccounts by domainName into domainGroups&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        orderby domainGroups.Key&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                        select domainGroups;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; groups;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetDomainName(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; NTAccount account)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] split = account.Value.Split(&lt;span style="color:#006080;"&gt;&amp;#39;\\&amp;#39;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            return split.Length == 1 ? string.Empty : split[0];&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        public static string GetAccountName(this NTAccount account)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            string[] split = account.Value.Split(&amp;#39;&lt;/span&gt;\\&amp;#39;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; split[split.Length - 1];&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Para probarlo y ver el resultado:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;
    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;var groups = WindowsIdentity.GetCurrent().GetGroupsUnderDomains();&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var dg &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groups)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Groups under: {0}&amp;quot;&lt;/span&gt;, dg.Key));&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var g &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; dg)&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;  - Group name: {0}&amp;quot;&lt;/span&gt;, g.GetAccountName()));&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Un saludo desde las frías tierras de Andorra :-)&lt;/p&gt;

&lt;p&gt;Noviembre 2009&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1742271" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/LDAP/default.aspx">LDAP</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2009/default.aspx">2009</category></item><item><title>How To: ¿Como saber si el usuario actual es administrador del dominio?</title><link>http://msmvps.com/blogs/lfranco/archive/2009/11/25/how-to-191-como-saber-si-el-usuario-actual-es-administrador-del-dominio.aspx</link><pubDate>Wed, 25 Nov 2009 18:03:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1742245</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1742245</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2009/11/25/how-to-191-como-saber-si-el-usuario-actual-es-administrador-del-dominio.aspx#comments</comments><description>&lt;blockquote&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Es una pregunta que me encuentro de forma recurrente en los foros de desarrollo, as&amp;iacute; que lo apunto aqu&amp;iacute; para tener una referencia.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;El escenario&lt;/h4&gt;
&lt;p align="justify"&gt;Cuando desarrollamos una aplicaci&amp;oacute;n de escritorio, puede ser interesante saber a qu&amp;eacute; grupos pertenece el usuario que est&amp;aacute; ejecutando nuestra aplicaci&amp;oacute;n, para mostrar / ocultar / permitir / revocar ciertas acciones, u opciones. Por ejemplo, yo acostumbro a tener un bot&amp;oacute;n en la barra de estado de mis aplicaciones que permite cambiar la cadena de conexi&amp;oacute;n, y evidentemente, solo est&amp;aacute; visible cuando el usuario pertenece al grupo &amp;ldquo;Administradores del dominio&amp;rdquo;.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://www.uyssoft.com/blog/images/HowToComosabersielusuarioactualesadminis_EA12/privileges.jpg"&gt;&lt;img height="244" width="244" src="http://www.uyssoft.com/blog/images/HowToComosabersielusuarioactualesadminis_EA12/privileges_thumb.jpg" alt="privileges" border="0" title="privileges" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;IsInRole&lt;/h4&gt;
&lt;p align="justify"&gt;Para ello, el objeto &lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.security.principal.windowsprincipal(VS.80).aspx"&gt;WindowsPrincipal&lt;/a&gt; dispone de un m&amp;eacute;todo &lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.security.principal.windowsprincipal.isinrole(VS.80).aspx"&gt;IsInRole&lt;/a&gt;, que nos dir&amp;agrave; si un usuario pertenece a un grupo determinado. Genial, adem&amp;aacute;s este m&amp;eacute;todo tiene varias sobrecargas, de modo que podemos usarlo pasando el RID, SID, el nombre e incluso una constante basada en la enumeraci&amp;oacute;n &lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.security.principal.windowsbuiltinrole(VS.80).aspx"&gt;WindowsBuiltIOnRole&lt;/a&gt;: &lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="179"&gt;&lt;strong&gt;Nombre de miembro&lt;/strong&gt;&lt;/td&gt;
&lt;td width="1693"&gt;&lt;strong&gt;Descripci&amp;oacute;n&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountOperator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los operadores de cuentas administran las cuentas de los usuarios de un equipo o dominio. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Administrator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los administradores tienen acceso completo y sin restricciones al equipo o dominio. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BackupOperator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los operadores de copia de seguridad pueden reemplazar las restricciones de seguridad con el &amp;uacute;nico prop&amp;oacute;sito de hacer copias de seguridad de los archivos o de restaurarlas. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los invitados tienen m&amp;aacute;s restricciones que los usuarios. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PowerUser&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los usuarios avanzados poseen la mayor&amp;iacute;a de los permisos administrativos, con algunas restricciones. De este modo, los usuarios avanzados pueden ejecutar aplicaciones heredadas, adem&amp;aacute;s de aplicaciones certificadas. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PrintOperator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los operadores de impresi&amp;oacute;n pueden tomar el control de una impresora. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replicator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los replicadores permiten la duplicaci&amp;oacute;n de archivos en un dominio. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SystemOperator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los operadores del sistema administran un equipo en particular. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los usuarios no pueden realizar cambios accidentales o intencionados en todo el sistema. En consecuencia, pueden ejecutar aplicaciones certificadas, pero no la mayor&amp;iacute;a de las aplicaciones heredadas.&amp;nbsp; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p align="justify"&gt;De modo que para saber si nuestro usuario es administrador local, basta con hacer esto:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;WindowsPrincipal wp = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; WindowsPrincipal(WindowsIdentity.GetCurrent());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; wp.IsInRole(WindowsBuiltInRole.Administrator);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Sencillo, verdad? A partir del usuario que ejecuta nuestra aplicaci&amp;oacute;n (v&amp;aacute;lido tambi&amp;eacute;n en caso de impersonaci&amp;oacute;n), creamos un objeto Principal e invocamos al m&amp;eacute;todo pas&amp;aacute;ndole el grupo contra el que deseamos validar.&lt;/p&gt;
&lt;p&gt;El problema de esta enumeraci&amp;oacute;n es que como su nombre indica, &lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;s&amp;oacute;lo contempla los grupos locales&lt;/span&gt;&lt;/strong&gt;. As&amp;iacute; que si queremos saber si pertenece a un grupo del dominio parece que tendremos que buscar el SID del grupo, o el nombre, y hardcodearlo &amp;lsquo;a mano&amp;rsquo; en nuestra aplicaci&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;Feo verdad? Pues la verdad es que si, muy feo&amp;hellip; vamos a investigar un poco m&amp;aacute;s, a ver si encontramos otra forma.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nota&lt;/strong&gt;: Por motivos de rendimiento, para determinar la funci&amp;oacute;n del usuario se recomienda utilizar la sobrecarga de &lt;a href="http://msdn.microsoft.com/es-es/library/wak3kd03(VS.80).aspx"&gt;IsInRole(SecurityIdentifier)&lt;/a&gt; como sobrecarga preferible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;WellKnownSidType&lt;/h4&gt;
&lt;p&gt;Existe una enumeraci&amp;oacute;n llamada &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.security.principal.wellknownsidtype.aspx"&gt;WellKnownSidType&lt;/a&gt;, que devuelve los identificadores de seguridad m&amp;aacute;s utilizados, vamos a darle un vistazo:&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="385"&gt;
&lt;p&gt;&lt;strong&gt;Member name&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="1737"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NullSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a null SID.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WorldSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches everyone.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LocalSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a local SID.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CreatorOwnerSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the owner or creator of an object.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CreatorGroupSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the creator group of an object.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CreatorOwnerServerSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a creator owner server SID.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CreatorGroupServerSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a creator group server SID.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NTAuthoritySid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for the Windows NT authority.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DialupSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for a dial-up account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NetworkSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for a network account. This SID is added to the process of a token when it logs on across a network.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BatchSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for a batch process. This SID is added to the process of a token when it logs on as a batch job.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;InteractiveSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for an interactive account. This SID is added to the process of a token when it logs on interactively.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ServiceSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for a service. This SID is added to the process of a token when it logs on as a service.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AnonymousSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for the anonymous account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ProxySid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a proxy SID.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EnterpriseControllersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for an enterprise controller.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SelfSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for self.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AuthenticatedUserSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for an authenticated user.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RestrictedCodeSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID for restricted code.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TerminalServerSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches a terminal server account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RemoteLogonIdSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches remote logons.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LogonIdsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches logon IDs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LocalSystemSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the local system.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LocalServiceSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches a local service.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NetworkServiceSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches a network service.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinDomainSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the domain account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinAdministratorsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the administrator account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinUsersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches built-in user accounts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinGuestsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the guest account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinPowerUsersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the power users group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinAccountOperatorsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the account operators account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinSystemOperatorsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the system operators group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinPrintOperatorsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the print operators group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinBackupOperatorsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the backup operators group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinReplicatorSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the replicator account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinPreWindows2000CompatibleAccessSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches pre-Windows 2000 compatible accounts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinRemoteDesktopUsersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches remote desktop users.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinNetworkConfigurationOperatorsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the network operators group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountAdministratorSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the account administrators group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountGuestSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the account guest group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountKrbtgtSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the account Kerberos target group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;AccountDomainAdminsSid&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="color:#ff0000;"&gt;Indicates a SID that matches the account domain administrator group.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountDomainUsersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the account domain users group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountDomainGuestsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the account domain guests group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountComputersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the account computer group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountControllersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the account controller group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountCertAdminsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the certificate administrators group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountSchemaAdminsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the schema administrators group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountEnterpriseAdminsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the enterprise administrators group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountPolicyAdminsSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the policy administrators group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AccountRasAndIasServersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the RAS and IAS server account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NtlmAuthenticationSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID present when the Microsoft NTLM authentication package authenticated the client.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DigestAuthenticationSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID present when the Microsoft Digest authentication package authenticated the client.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SChannelAuthenticationSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID present when the Secure Channel (SSL/TLS) authentication package authenticated the client.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ThisOrganizationSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID present when the user authenticated from within the forest or across a trust that does not have the selective authentication option enabled. If this SID is present, then OtherOrganizationSid cannot be present.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OtherOrganizationSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID present when the user authenticated across a forest with the selective authentication option enabled. If this SID is present, then ThisOrganizationSid cannot be present.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinIncomingForestTrustBuildersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that allows a user to create incoming forest trusts. It is added to the token of users who are a member of the Incoming Forest Trust Builders built-in group in the root domain of the forest.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinPerformanceMonitoringUsersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the group of users that have remote access to schedule logging of performance counters on this computer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinPerformanceLoggingUsersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the group of users that have remote access to monitor the computer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;BuiltinAuthorizationAccessSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID that matches the Windows Authorization Access group.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WinBuiltinTerminalServerLicenseServersSid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates a SID is present in a server that can issue Terminal Server licenses.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MaxDefined&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indicates the maximum defined SID in the WellKnownSidType enumeration.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;BINGO!!! Parece que tenemos el SID del grupo de admnistradores del dominio (lo he marcado en rojo en la tabla anterior).&lt;/p&gt;
&lt;p&gt;Ahora vamos a generar el SID del grupo de adminstradores del dominio y ya podemos volver a probar el m&amp;eacute;todo IsInRole:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;WindowsPrincipal wp = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; WindowsPrincipal(WindowsIdentity.GetCurrent());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;SecurityIdentifier sid = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SecurityIdentifier(WellKnownSidType.AccountDomainAdminsSid, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; wp.IsInRole(sid);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ops! Nuestro gozo en un pozo&amp;hellip; se necesita informar el segundo argumento del constructor para el SID del grupo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.uyssoft.com/blog/images/HowToComosabersielusuarioactualesadminis_EA12/DomainSidError.png"&gt;&lt;img height="126" width="798" src="http://www.uyssoft.com/blog/images/HowToComosabersielusuarioactualesadminis_EA12/DomainSidError_thumb.png" alt="DomainSidError" border="0" title="DomainSidError" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;DomainSid&lt;/h4&gt;
&lt;p align="justify"&gt;&amp;iquest;Y que &lt;strong&gt;kkgrnn$#&lt;/strong&gt; representa que es este identificador? Pues seg&amp;uacute;n pone en &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/214122bs.aspx"&gt;la ayuda del constructor&lt;/a&gt;, debe proporcionarse el SID del dominio para que el constructor pueda devolver algunos identificadores de WellKnownSidType, entre los cuales est&amp;aacute; el de los administradores del dominio. &lt;/p&gt;
&lt;p align="justify"&gt;Dicho de otro modo, o sabemos el SID de nuestro dominio o todo lo anterior no vale para nada&amp;hellip; :-(&lt;/p&gt;
&lt;p align="justify"&gt;&amp;iquest;Y c&amp;oacute;mo podemos saber el SID de dominio? Despu&amp;eacute;s de buscar un ratito, lo &amp;uacute;nico que he encontrado es una utilidad de consola llamada &lt;a href="http://www.microsoft.com/technet/sysinternals/utilities/psgetsid.mspx"&gt;PsGetSid&lt;/a&gt;, que forma parte de las PSTools del inefable Mark Russinovich. Basta descargar esta utilidad y ejecutarla desde la consola de este modo para saber el SID de nuestro dominio (el nombre de dominio en formato &amp;ldquo;microsoft.com&amp;rdquo; o &amp;ldquo;net.volvo.com&amp;rdquo;):&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://www.uyssoft.com/blog/images/HowToComosabersielusuarioactualesadminis_EA12/DomainSidConsole.png"&gt;&lt;img height="342" width="673" src="http://www.uyssoft.com/blog/images/HowToComosabersielusuarioactualesadminis_EA12/DomainSidConsole_thumb.png" alt="DomainSidConsole" border="0" title="DomainSidConsole" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Sin embargo, me niego a tener que hacer esto para saber el identificador del dominio. As&amp;iacute; que vamos a probar si podemos recuperar esta propiedad del esquema de AD mediante un DirectoryEntry. Para ello utilizaremos la clase Domain:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;Domain d = Domain.GetDomain(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    DirectoryContext(DirectoryContextType.Domain, getDomainName()));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (DirectoryEntry de = d.GetDirectoryEntry())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] domSid = (&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[])de.Properties[&lt;span style="color:#006080;"&gt;&amp;quot;objectSid&amp;quot;&lt;/span&gt;].Value;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sdomainSid = sIDtoString(domSid);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(sdomainSid);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}   &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;Nota: Aqu&amp;iacute; necesitaremos dos funciones de apoyo, la primera nos devuelve el nombre del domino, y la segunda transforma el array de bits del SID en su representaci&amp;oacute;n textual:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; getDomainName()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; IPGlobalProperties.GetIPGlobalProperties().DomainName;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sIDtoString(&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] sidBinary)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    SecurityIdentifier sid = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SecurityIdentifier(sidBinary, 0);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; sid.ToString();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;A todo esto el valor de la variable &lt;strong&gt;sdomainSid&lt;/strong&gt; es el esperado!!! :-D&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Poni&amp;eacute;ndolo todo junto&lt;/h4&gt;
&lt;p&gt;Al igual que &lt;a target="_blank" href="http://msmvps.com/blogs/jmtorres/default.aspx"&gt;el alegre bandolero&lt;/a&gt;, tambi&amp;eacute;n soy un fan&amp;aacute;tico de los m&amp;eacute;todos extensores, as&amp;iacute; que vamos a encapsular todo esto en un m&amp;eacute;todo que extienda la clase WindowsIdentity. Aqu&amp;iacute; va todo el c&amp;oacute;digo junto:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.DirectoryServices;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.DirectoryServices.ActiveDirectory;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Net.NetworkInformation;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Security.Principal;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; Alpha.Code&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; SecurityExtensions&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IsDomainAdmin (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; WindowsIdentity identity)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            Domain d = Domain.GetDomain(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                DirectoryContext(DirectoryContextType.Domain, getDomainName()));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (DirectoryEntry de = d.GetDirectoryEntry())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] bdomSid = (&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[])de.Properties[&lt;span style="color:#006080;"&gt;&amp;quot;objectSid&amp;quot;&lt;/span&gt;].Value;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sdomainSid = sIDtoString(bdomSid);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                WindowsPrincipal wp = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; WindowsPrincipal(identity);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                SecurityIdentifier dsid = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SecurityIdentifier(sdomainSid);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                SecurityIdentifier dasid = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SecurityIdentifier(&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                    WellKnownSidType.AccountDomainAdminsSid, dsid);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; wp.IsInRole(dasid);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; getDomainName()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; IPGlobalProperties.GetIPGlobalProperties().DomainName;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; sIDtoString(&lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] sidBinary)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            SecurityIdentifier sid = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SecurityIdentifier(sidBinary, 0);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; sid.ToString();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Y la forma de usarlo es tan sencilla como esto:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (WindowsIdentity.GetCurrent().IsDomainAdmin())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#008000;"&gt;//Acciones a realizar si el usuario es administrador de dominio... &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Un saludo desde las fr&amp;iacute;as tierras de Andorra :-)&lt;/p&gt;
&lt;p&gt;Noviembre 2009&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1742245" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/LDAP/default.aspx">LDAP</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2009/default.aspx">2009</category></item><item><title>SharePoint 2007 + Outlook 2007: Guardar correos de forma masiva (VII)</title><link>http://msmvps.com/blogs/lfranco/archive/2009/03/20/sharepoint-2007-outlook-2007-guardar-correos-de-forma-masiva-vii.aspx</link><pubDate>Fri, 20 Mar 2009 08:07:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1679840</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1679840</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2009/03/20/sharepoint-2007-outlook-2007-guardar-correos-de-forma-masiva-vii.aspx#comments</comments><description>&lt;p align="justify"&gt;Entradas anteriores de la serie:&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://msmvps.com/blogs/lfranco/archive/2009/02/02/sharepoint-2007-outlook-2007-guardar-correos-de-forma-masiva-i.aspx"&gt;SharePoint 2007 + Outlook 2007: Guardar correos de forma masiva (I)&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://msmvps.com/blogs/lfranco/archive/2009/02/02/sharepoint-2007-outlook-2007-guardar-correos-de-forma-masiva-ii.aspx"&gt;SharePoint 2007 + Outlook 2007: Guardar correos de forma masiva (II)&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://msmvps.com/blogs/lfranco/archive/2009/02/02/sharepoint-2007-outlook-2007-guardar-correos-de-forma-masiva-iii.aspx"&gt;SharePoint 2007 + Outlook 2007: Guardar correos de forma masiva (III)&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://msmvps.com/blogs/lfranco/archive/2009/02/02/sharepoint-2007-outlook-2007-guardar-correos-de-forma-masiva-iv.aspx"&gt;SharePoint 2007 + Outlook 2007: Guardar correos de forma masiva (IV)&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://msmvps.com/blogs/lfranco/archive/2009/02/02/sharepoint-2007-outlook-2007-guardar-correos-de-forma-masiva-v.aspx"&gt;SharePoint 2007 + Outlook 2007: Guardar correos de forma masiva (V)&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://msmvps.com/blogs/lfranco/archive/2009/02/02/sharepoint-2007-outlook-2007-guardar-correos-de-forma-masiva-vi.aspx"&gt;SharePoint 2007 + Outlook 2007: Guardar correos de forma masiva (VI)&lt;/a&gt;&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;hr /&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;&lt;a href="http://blogimages.uyssoft.com/SharePoint2007Outlook2007Guardarcorreosd_C4F0/bender3.jpg"&gt;&lt;img border="0" width="244" src="http://blogimages.uyssoft.com/SharePoint2007Outlook2007Guardarcorreosd_C4F0/bender3_thumb.jpg" alt="bender3" height="182" title="bender3" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Han pasado unos d&amp;iacute;as desde que publiqu&amp;eacute; la &amp;uacute;ltima entrada, y es que voy absolutamente desbordado de curro.&lt;/p&gt;
&lt;p align="justify"&gt;Pero como lo prometido es deuda, vamos a proseguir con el tema, ya quedan un par de temas por ver antes de concluir la serie:&lt;/p&gt;
&lt;li&gt;
&lt;p align="justify"&gt;C&amp;oacute;mo ejecutar distintos threads y mostrar el progreso (&lt;strong&gt;Callbacks&lt;/strong&gt;). &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p align="justify"&gt;C&amp;oacute;mo distribuir nuestro complemento, creando un archivo MSI (&lt;strong&gt;Windows Installer packages&lt;/strong&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;p align="justify"&gt;Adem&amp;aacute;s, os dije que en el &amp;uacute;ltimo post publicar&amp;iacute;a el c&amp;oacute;digo fuente del proyecto&amp;hellip; y varios de vosotros ya lo hab&amp;eacute;is reclamado con insistencia :-P&lt;/p&gt;
&lt;p align="justify"&gt;De modo que vamos a hacerlo al rev&amp;eacute;s: Hoy publico el c&amp;oacute;digo fuente del proyecto, y ma&amp;ntilde;ana (espero) continuar&amp;eacute; el resto de la serie. De este modo al menos ya tendreis el c&amp;oacute;digo para jugar con &amp;eacute;l, y poder machacarme a preguntas&amp;hellip;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://blogimages.uyssoft.com/SharePoint2007Outlook2007Guardarcorreosd_7F07/ProjectExplorer.png"&gt;&lt;img border="0" width="328" src="http://blogimages.uyssoft.com/SharePoint2007Outlook2007Guardarcorreosd_7F07/ProjectExplorer_thumb.png" alt="ProjectExplorer" height="421" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" title="ProjectExplorer" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;El proyecto incluye el c&amp;oacute;digo de ejemplo del Add-In y el proyecto de instalaci&amp;oacute;n, y lo pod&amp;eacute;is descargar desde este enlace de Skydrive:&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://cid-f3a970280830b5fe.skydrive.live.com/self.aspx/MSDN%20Samples/OutlookToMOSS/OutlookToMOSS.zip" title="http://cid-f3a970280830b5fe.skydrive.live.com/self.aspx/MSDN%20Samples/OutlookToMOSS/OutlookToMOSS.zip"&gt;http://cid-f3a970280830b5fe.skydrive.live.com/self.aspx/MSDN%20Samples/OutlookToMOSS/OutlookToMOSS.zip&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Saludos desde Andorra,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1679840" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Sharepoint/default.aspx">Sharepoint</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Utilidad/default.aspx">Utilidad</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Ejemplo/default.aspx">Ejemplo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Serie/default.aspx">Serie</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Beerware/default.aspx">Beerware</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Add-In/default.aspx">Add-In</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>Series: Resumen de los enlaces</title><link>http://msmvps.com/blogs/lfranco/archive/2008/10/23/series-resumen-de-los-enlaces.aspx</link><pubDate>Thu, 23 Oct 2008 08:24:52 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1651730</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1651730</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/10/23/series-resumen-de-los-enlaces.aspx#comments</comments><description>&lt;p align="justify"&gt;Últimamente estoy recibiendo bastantes correos preguntándome cosas acerca de las series de posts que publiqué hace un tiempo. Os dejo aquí un resumen de los enlaces y el código fuente disponible en ellas. Ya estaba todo publicado pero de forma dispersa, así que aquí lo teneis todo juntito.&lt;/p&gt;  &lt;p align="justify"&gt;Aviso: Todas las series son ejemplos reales que muestran cómo realizar algunas de las tareas cotidianas (o no tanto) mediante C#. En ningún caso pretenden ser aplicaciones reales, de modo que deben tomarse como lo que realmente son: Meros ejemplos didácticos.&lt;/p&gt;  &lt;hr /&gt;  &lt;h4&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/AccederalacachdeInternetExplorerI_E6DA/Internet2_2.jpg"&gt;&lt;img style="display:inline;margin-left:0px;margin-right:0px;" height="102" alt="Internet2" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/AccederalacachdeInternetExplorerI_E6DA/Internet2_thumb.jpg" width="100" border="0" /&gt;&lt;/a&gt;&lt;/h4&gt;  &lt;h3&gt;Acceder a la caché de Internet Explorer&lt;/h3&gt;  &lt;p&gt;Resumen:&lt;/p&gt;  &lt;p align="justify"&gt;Ejemplo de cómo crear un servicio de Windows que monitoriza la caché de archivos temporales de Internet Explorer y exporta un fichero log a una ubicación remota (por si el usuario decide vaciar la caché). Contiene ejemplos de cómo usar las API de acceso a la caché, cómo serializar objetos, realizar impersonation, y cómo crear y distribuir un servicio de Windows.&lt;/p&gt;  &lt;p&gt;Artículos:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/05/20/acceder-a-la-cach-233-de-internet-explorer-i.aspx" target="_blank"&gt;Acceder a la caché de Internet Explorer (I)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/05/20/acceder-a-la-cach-233-de-internet-explorer-ii.aspx" target="_blank"&gt;Acceder a la caché de Internet Explorer (II)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/05/20/acceder-a-la-cach-233-de-internet-explorer-iii.aspx" target="_blank"&gt;Acceder a la caché de Internet Explorer (III)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/05/20/acceder-a-la-cach-233-de-internet-explorer-iv.aspx" target="_blank"&gt;Acceder a la caché de Internet Explorer (IV)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/10/acceder-a-la-cach-233-de-internet-explorer-v-y-final.aspx"&gt;Acceder a la caché de Internet Explorer (V)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Código de ejemplo:&lt;/p&gt; &lt;iframe style="border-right:#dde5e9 1px solid;padding-right:0px;border-top:#dde5e9 1px solid;padding-left:0px;padding-bottom:0px;margin:3px;border-left:#dde5e9 1px solid;width:240px;padding-top:0px;border-bottom:#dde5e9 1px solid;height:66px;background-color:#ffffff;" src="http://cid-f3a970280830b5fe.skydrive.live.com/embedrowdetail.aspx/Downloads/Projects/IECacheQuery/IECacheQuery.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;hr /&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/AccediendoaLDAPconCI_1029E/ldap1_2.jpg"&gt;&lt;img height="100" alt="ldap1" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/AccediendoaLDAPconCI_1029E/ldap1_thumb.jpg" width="161" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Accediendo al directorio activo de la organización desde .NET&lt;/h3&gt;  &lt;p&gt;Resumen:&lt;/p&gt;  &lt;p align="justify"&gt;Ejemplo de cómo crear una aplicación Windows que accede al directorio activo de la organización. Contiene ejemplos de cómo validar unas credenciales (usuario y password) en un dominio, cómo realizar impersonation para ejecutar nuestra aplicación con los credenciales de otro usuario, recuperar los nombres de las propiedades del objeto user del AD, y cómo obtener información y los grupos a los que pertenece el usuario actual.&lt;/p&gt;  &lt;p&gt;Artículos:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/11/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-i.aspx"&gt;Accediendo al directorio activo de la organización desde .NET (I)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/11/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-ii.aspx"&gt;Accediendo al directorio activo de la organización desde .NET (II)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/11/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-iii.aspx"&gt;Accediendo al directorio activo de la organización desde .NET (III)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/06/11/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-iv.aspx"&gt;Accediendo al directorio activo de la organización desde .NET (IV)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Artículos relacionados:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/07/10/correcci-243-n-funci-243-n-getuserldapproperties.aspx"&gt;Corrección función getUserLDAPProperties&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/07/16/howto-ldap-obtener-propiedades-de-la-clase-user.aspx"&gt;HowTo: LDAP, obtener propiedades de la clase user&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Código de ejemplo:&lt;/p&gt; &lt;iframe style="border-right:#dde5e9 1px solid;padding-right:0px;border-top:#dde5e9 1px solid;padding-left:0px;padding-bottom:0px;margin:3px;border-left:#dde5e9 1px solid;width:240px;padding-top:0px;border-bottom:#dde5e9 1px solid;height:66px;background-color:#ffffff;" src="http://cid-f3a970280830b5fe.skydrive.live.com/embedrowdetail.aspx/Downloads/Projects/LDAPServices/LDAPSample.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Saludos desde Andorra,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1651730" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Ejemplo/default.aspx">Ejemplo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Serie/default.aspx">Serie</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category></item><item><title>VBTeam - How Do I Videos (WPF Forms over Data)</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/18/vbteam-how-do-i-videos-wpf-forms-over-data.aspx</link><pubDate>Fri, 18 Jul 2008 08:00:48 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1641317</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1641317</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/18/vbteam-how-do-i-videos-wpf-forms-over-data.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/VBTeamHowDoIVideosWPFFormsoverData_7E7F/movie_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="97" alt="movie" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/VBTeamHowDoIVideosWPFFormsoverData_7E7F/movie_thumb.jpg" width="128" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/bethmassi/"&gt;Beth Massi&lt;/a&gt; del equipo de VB, ha publicado nuevos videos en el sitio “How Do I” Videos — Visual Basic. En este caso se trata de dos videos que muestran cómo crear formularios basados en datos en Windows Presentation Foundation usando Visual Studio 2008. &lt;p&gt;&lt;strong&gt;How Do I: Create a Simple Data Entry Form in WPF?&lt;/strong&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc707833.aspx"&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/bb466226.howdoi_vb_wpffod_01(en-us).jpg" /&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc707833.aspx"&gt;#1 | How Do I: Create a Simple Data Entry Form in WPF?&lt;/a&gt;&lt;br /&gt;(24 minutes, 32 seconds) &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc720679.aspx"&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/bb466226.howdoi_vb_wpffod_02(en-us).jpg" /&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc720679.aspx"&gt;#2 | How Do I: Display Data in a List in WPF?&lt;/a&gt;&lt;br /&gt;(11 minutes, 47 seconds) &lt;p&gt;El link en: &lt;a title="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx#wpfdata" href="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx#wpfdata"&gt;http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx#wpfdata&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Si no conoceis el sitio &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx"&gt;“How Do I” Videos&lt;/a&gt; darle un vistazo, que merece la pena y mucho... :-)&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1641317" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/WPF/default.aspx">WPF</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Videos/default.aspx">Videos</category></item><item><title>HowTo: LDAP, obtener propiedades de la clase user</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/16/howto-ldap-obtener-propiedades-de-la-clase-user.aspx</link><pubDate>Wed, 16 Jul 2008 16:23:42 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1641103</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1641103</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/16/howto-ldap-obtener-propiedades-de-la-clase-user.aspx#comments</comments><description>&lt;p&gt;Hace poco publicaba una &lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/07/10/correcci-243-n-funci-243-n-getuserldapproperties.aspx"&gt;actualización&lt;/a&gt; del método getUserLDAProperties de la clase LDAPservices. Esta función se encarga de recuperar todas las propiedades de la clase &amp;#39;user&amp;#39; definidas&amp;nbsp; en el esquema del AD de la organización.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/HowToLDAPobtenerpropiedadesdelaclaseuser_F452/LDAPUserProperties.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="244" alt="LDAPUserProperties" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/HowToLDAPobtenerpropiedadesdelaclaseuser_F452/LDAPUserProperties_thumb.png" width="213" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;La verdad es que dicha corrección no me terminaba de satisfacer. Así que después de bucear un poco por el modelo de objetos del namespace System.DirectoryServices.ActiveDirectory he encontrado un método más elegante, y que además permite acceder a más propiedades opcionales (algo que la anterior versión no permitía).&lt;/p&gt; &lt;p&gt;Os dejo aquí el código y en cuando tenga un minuto actualizo el código fuente de LDAPServices en skydrive.&lt;/p&gt; &lt;div&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    getUserLDAPProperties(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; LDAPURL)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;{&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; properties =&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    ActiveDirectorySchema objADSchema = ActiveDirectorySchema.GetCurrentSchema();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    ActiveDirectorySchemaClass objADUserSchema;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    ActiveDirectorySchemaPropertyCollection objADPropertiesCollection;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    objADUserSchema = objADSchema.FindClass(&lt;span style="color:#006080;"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    objADPropertiesCollection = objADUserSchema.MandatoryProperties;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ActiveDirectorySchemaProperty objADSchemaProperty &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; objADPropertiesCollection)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        properties.Add(objADSchemaProperty.Name);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    objADPropertiesCollection = objADUserSchema.OptionalProperties;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ActiveDirectorySchemaProperty objADSchemaProperty &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; objADPropertiesCollection)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        properties.Add(objADSchemaProperty.Name);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (from p &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; properties orderby p select p).ToList();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Nos vemos!&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1641103" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/LDAP/default.aspx">LDAP</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Correccion/default.aspx">Correccion</category></item><item><title>How to: Utilizar en modelo de proveedores de datos de ADO.NET 2.0</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/12/how-to-utilizar-en-modelo-de-proveedores-de-datos-de-ado-net-2-0.aspx</link><pubDate>Sat, 12 Jul 2008 10:03:31 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1640868</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1640868</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/12/how-to-utilizar-en-modelo-de-proveedores-de-datos-de-ado-net-2-0.aspx#comments</comments><description>&lt;p&gt;(*) Este post es bastante antiguo y lo tenía publicado en otro blog que ya no existe, pero como veo que es un tema recurrente en los &lt;a href="http://forums.microsoft.com/MSDN-ES/default.aspx?SiteID=11"&gt;foros de MSDN&lt;/a&gt; he decidido publicarlo de nuevo. &lt;p&gt;A petición del inefable &lt;a href="http://geeks.ms/members/juansa.aspx"&gt;Juansa&lt;/a&gt;, vamos a ver cómo funciona el modelo de proveedores de ADO.NET 2.0. &lt;p&gt;&lt;a href="http://community.uyssoft.com/blogs/losbelmontes/WindowsLiveWriter/Utilizarenmodelodeproveedoresdedatos.NET_9250/1_2.jpg"&gt;&lt;img height="127" alt="1" src="http://community.uyssoft.com/blogs/losbelmontes/WindowsLiveWriter/Utilizarenmodelodeproveedoresdedatos.NET_9250/1_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;p&gt;Estre modelo es ideal para todas aquellas aplicaciones que deben utilizar distintos proveedores de datos (Access, SQL Server, Oracle), ya que disponen de unas factorías de objetos que proporcionan un nivel de abstracción. Por ejemplo, si deseamos usar el proveedor de SQL Server ya no es necesario usar las clases conexión, comando, etc. que hay dentro del namespace System.Data.SqlClient, ahora podemos crear una factoría basada en SQL Server y pedirle que nos cree una clase de tipo connection, comando, etc. &lt;p&gt;De este modo, si deseamos cambiar el proveedor de datos basta con cambiar el string del nombre del proveedor y la cadena de conexión. Para muestra un botón:&lt;br /&gt; &lt;div&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; TestFactoryProviders()    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; ProviderName &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#006080;"&gt;&amp;quot;System.Data.SqlClient&amp;quot;&lt;/span&gt;    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; CnnStr &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#006080;"&gt;&amp;quot;Data Source=TU_SERVIDOR_SQL;&amp;quot;&lt;/span&gt; + _      &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#006080;"&gt;&amp;quot;Initial Catalog=TU_BD;&amp;quot;&lt;/span&gt; + _      &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#006080;"&gt;&amp;quot;Integrated Security=True&amp;quot;&lt;/span&gt;    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; SQLStr &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#006080;"&gt;&amp;quot;SELECT * FROM TU_TABLA&amp;quot;&lt;/span&gt;    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#008000;"&gt;&amp;#39;Crea la factoria en base al proveedor especificado    &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; Factory &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DbProviderFactory = DbProviderFactories.GetFactory(ProviderName)    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#008000;"&gt;&amp;#39;Crea la conexión del tipo apropiado (según proveedor)    &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; Con &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DbConnection = Factory.CreateConnection()    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    Using Con        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;&amp;#39;Asigna la cadena de conexión        &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        Con.ConnectionString = CnnStr        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        Con.Open()        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;&amp;#39;Crea un command del tipo apropiado (según proveedor)        &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; Cmd &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DbCommand = Con.CreateCommand()        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        Using Cmd            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            Cmd.CommandType = CommandType.Text            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            Cmd.CommandText = SQLStr            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#008000;"&gt;&amp;#39;Crea un DataTable y lo llena a partir del             &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            &lt;span style="color:#008000;"&gt;&amp;#39;DataReader que devuelve el comando            &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; dt &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DataTable = &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; DataTable(&lt;span style="color:#006080;"&gt;&amp;quot;dt1&amp;quot;&lt;/span&gt;)            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            dt.Load(Cmd.ExecuteReader())            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;For&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Each&lt;/span&gt; row &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DataRow &lt;span style="color:#0000ff;"&gt;In&lt;/span&gt; dt.Rows                &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;span style="color:#008000;"&gt;&amp;#39;Haz lo que quieras con los datos... :-P            &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Using        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        Con.Close()    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Using&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Según el ejemplo, cambiando los valores de las dos primeras variables podemos utilizar cualquier origen de datos de forma indistinta.&lt;br /&gt;Happy coding!&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1640868" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Foros/default.aspx">Foros</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/ADO.NET/default.aspx">ADO.NET</category></item><item><title>How to: Cómo insertar un WinForm dentro de un control TabPanel</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/01/how-to-c-243-mo-insertar-un-winform-dentro-de-un-control-tabpanel.aspx</link><pubDate>Tue, 01 Jul 2008 12:10:32 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1638984</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1638984</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/01/how-to-c-243-mo-insertar-un-winform-dentro-de-un-control-tabpanel.aspx#comments</comments><description>&lt;p&gt;:-)&lt;br /&gt;Hoy he visto en el &lt;a href="http://forums.microsoft.com/MSDN-ES/ShowForum.aspx?ForumID=297&amp;amp;SiteID=11" target="_blank"&gt;foro de VB&lt;/a&gt; una duda que planteaba Tito, acerca de la posibilidad de usar un entorno de formularios hijos dentro de un TabPanel (al estilo del editor de Visual Studio). No es la primera vez que veo esta duda, así que le he dedicado un ratillo y aquí publico una posible solución.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/HowtoCmoinsertarunWinFormdentrodeunTabPa_B79F/FormInTabPanel.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="164" alt="FormInTabPanel" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/HowtoCmoinsertarunWinFormdentrodeunTabPa_B79F/FormInTabPanel_thumb.png" width="244" border="0" /&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;De este modo podemos tener un formulario que actúa como contenedor de otros, pero sin utilizar MDI (que por otra parte me parece ya bastante pasado de moda :-P). La técnica a usar muy sencilla y lo único que hacemos es cada vez que creamos un form, creamos también un objeto TabPage e insertamos el formulario dentro de la nueva pestaña. La única cosa que tenemos que tener en cuenta es establecer la propiedad TopLevel del nuevo formulario &amp;#39;hijo&amp;#39; a False, ya que de otro modo recibiremos un error.&lt;/p&gt; &lt;p&gt;Una muestra:&lt;/p&gt; &lt;div&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; ShowForm()&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; r &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Random()&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Static&lt;/span&gt; i &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    i += 1&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; key &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#006080;"&gt;&amp;quot;f&amp;quot;&lt;/span&gt; + i.ToString()&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#008000;"&gt;&amp;#39;Crea el nuevo form (copia de form2)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; f &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; Form2&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    f.BackColor = Color.FromArgb(r.&lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;(0, 255), r.&lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;(0, 255), r.&lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;(0, 255))&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    f.Text = &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Nuevo form {0}&amp;quot;&lt;/span&gt;, i)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#008000;"&gt;&amp;#39;Crea el tab que lo contiene&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Tabs.TabPages.Add(key, f.Text)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    f.TopLevel = &lt;span style="color:#0000ff;"&gt;False&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    f.FormBorderStyle = Windows.Forms.FormBorderStyle.None&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    f.Dock = DockStyle.Fill&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Tabs.TabPages(key).Controls.Add(f)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Tabs.SelectedTab = &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Tabs.TabPages(key)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#008000;"&gt;&amp;#39;Asigna el nuevo form al tag del tabpage&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Tabs.TabPages(key).Tag = f&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#008000;"&gt;&amp;#39;Por si desde el propio form quieres cerrar y eliminar el tab&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    f.Tag = &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Tabs.TabPages(key)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    f.Show()&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Podeis descargar el proyecto de ejemplo desde:&lt;/p&gt;&lt;iframe style="border-right:#dde5e9 1px solid;padding-right:0px;border-top:#dde5e9 1px solid;padding-left:0px;padding-bottom:0px;margin:3px;border-left:#dde5e9 1px solid;width:240px;padding-top:0px;border-bottom:#dde5e9 1px solid;height:66px;background-color:#ffffff;" src="http://cid-f3a970280830b5fe.skydrive.live.com/embedrowdetail.aspx/MSDN%20Samples/MDITabbedForms/MDITabbedForms.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;
&lt;p&gt;Y para los que siempre me tiráis los puntosycoma en cara, lo he realizado en VB (eh Jorge? :-D).&lt;br /&gt;Un saludo desde Andorra!&lt;/p&gt;
&lt;p align="center"&gt;&lt;strong&gt;** Modificación (02/07/2008) para agregar un menú contextual a las pestañas **&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A petición de Carlos. De este modo es puede cerrar la pestaña actual o todas las pestañas menos la que estamos viendo ahora. El menú es un objeto ContextMenuStrip, de modo que es totalmente extensible para agregar vuestra propia funcionalidad.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/HowtoCmoinsertarunWinFormdentrodeunTabPa_B79F/FormInTabPanel_Menu.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="164" alt="FormInTabPanel_Menu" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/HowtoCmoinsertarunWinFormdentrodeunTabPa_B79F/FormInTabPanel_Menu_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;La nueva versión está disponible en:&lt;/p&gt;&lt;iframe style="border-right:#dde5e9 1px solid;padding-right:0px;border-top:#dde5e9 1px solid;padding-left:0px;padding-bottom:0px;margin:3px;border-left:#dde5e9 1px solid;width:240px;padding-top:0px;border-bottom:#dde5e9 1px solid;height:66px;background-color:#ffffff;" src="http://cid-f3a970280830b5fe.skydrive.live.com/embedrowdetail.aspx/MSDN%20Samples/MDITabbedForms/MDITabbedForms|_ContextMenu.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;
&lt;p&gt;Saludos,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1638984" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Foros/default.aspx">Foros</category></item></channel></rss>