Re: getting the PwdLastSet attrib value though .net

Tech-Archive recommends: Fix windows errors by optimizing your registry

From: Sameh Ahmed (essoplus_at_hotmail.com)
Date: 10/02/04


Date: Sat, 2 Oct 2004 15:48:02 +0200

Thanks
worded perfectly
"Joe Kaplan (MVP - ADSI)" <joseph.e.kaplan@removethis.accenture.com> wrote
in message news:OrUMxWDqEHA.536@TK2MSFTNGP11.phx.gbl...
> You need to import the System.Runtime.InteropServices namespace in order
to
> get those attribute definitions.
>
> Joe K.
>
> "Sameh Ahmed" <essoplus@hotmail.com> wrote in message
> news:%23EYG8JCqEHA.2588@TK2MSFTNGP12.phx.gbl...
> > Dear Joe
> > Thanks for replying
> > as i am totaly new to the develeopment field i tried to understand the
> > code
> > that you sent.
> > But after a long time i decided to copy it to my form and see what
happens
> > this part (that i failed to understand)
> > <ComImport(), Guid("9068270b-0939-11D1-8be1-00c04fd8d503"),
> > InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)> _
> > Public Interface IADsLargeInteger
> > Property HighPart() As Int32
> > Property LowPart() As Int32
> > End Interface
> >
> > fails with the following errors:
> >
> > Attribute cannot be used on 'IADsLargeInteger'.
> > Type 'ComImport' is not defined.
> > Type 'InterfaceTypeAttribute' is not defined.
> >
> > i would rerall appriciate it if you tell me what i should do .
> > thanks again
> >
> > "Joe Kaplan (MVP - ADSI)" <joseph.e.kaplan@removethis.accenture.com>
wrote
> > in message news:e0z5IH3pEHA.3988@tk2msftngp13.phx.gbl...
> >> There are basically two ways to get the Int64 value you need.
> >>
> >> If you use the DirectorySearcher, it marshals AD INTEGER8 types to .NET
> >> Int64 automatically, so no work needs to be done. This is by far the
> >> easiest way.
> >>
> >> If you use the DirectoryEntry, it marshals the value as an ADSI
> >> IADsLargeInteger type, which at runtime is a System.__ComObject. This
is
> >> annoying, but you can get the value with a little interop and some data
> >> munging. This works for me:
> >>
> >> dim entry as new DirectoryEntry("LDAP://yourdn here")
> >> dim pwd as object = entry.Properties("pwdLastSet").Value
> >> dim pwdDate as DateTime
> >> pwdDate = DateTime.FromFileTimeUtc(GetInt64FromLargeInteger(pwd))
> >>
> >> Function GetInt64FromLargeInteger(byval largeInteger as Object) as
Int64
> >>
> >> dim low as int32
> >> dim high as int32
> >> dim valBytes(7) as byte
> >>
> >> dim longInt as IADsLargeInteger = Ctype(largeInteger,
IADsLargeInteger)
> >> low = longInt.LowPart
> >> high = longInt.HighPart
> >>
> >> BitConverter.GetBytes(low).CopyTo(valBytes, 0)
> >> BitConverter.GetBytes(high).CopyTo(valBytes, 4)
> >>
> >> Return BitConverter.ToInt64(valBytes, 0)
> >>
> >> End Function
> >>
> >>
> >> <ComImport(), Guid("9068270b-0939-11D1-8be1-00c04fd8d503"),
> >> InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)> _
> >> public interface IADsLargeInteger
> >> property HighPart as int32
> >> property LowPart as int32
> >> end interface
> >>
> >> Note that you can also get the high and low values via reflection and
> >> late
> >> binding or by importing the activeds.dll COM object into .NET.
> >>
> >> Note that the DateTime you get back will be in Utc, so if you need
local
> >> time, make sure you call ToLocalTime.
> >>
> >> HTH,
> >>
> >> Joe K.
> >>
> >> "Sameh Ahmed" <essoplus@hotmail.com> wrote in message
> >> news:uM5ZMazpEHA.3868@TK2MSFTNGP15.phx.gbl...
> >> > Hello there
> >> > I need to get the "PwdLastSet" of a user object to know when he last
> >> > set
> >> > his
> >> > password.
> >> > I am using DirectoryServices.DirectoryEntry to bind to the user
object,
> >> > but
> >> > it either gives "Argument 'Prompt' cannot be converted to type
> > 'String'."
> >> > or
> >> > when I use .tostring it returns "system._comobject"
> >> > I even tried to use this line but it also failed
> >> > dater.FromFileTimeUtc(entry.Properties("pwdlastset").Value) 'ast
> >> > from
> >> > type '_ComObject' to type 'Long' is not valid.
> >> > I use the code below:
> >> > Dim entry As New DirectoryServices.DirectoryEntry
> >> > entry.Path = "LDAP://cn=sameh
> >> > ahmed,ou=infrastracture,ou=masreya,dc=masreya,dc=local"
> >> > MsgBox(entry.Properties("homedirectory").Item(0).ToString) 'works
fine
> >> > MsgBox(entry.Properties("pwdlastset").Item(0).ToString) 'returns
> >> > "system._comobject"
> >> > MsgBox(entry.Properties("pwdlastset").Value.ToString) 'returns
> >> > "system._comobject"
> >> > MsgBox(entry.Properties("pwdlastset").Value) 'returns
> > "system._comobject"
> >> > '
> >> > "Argument 'Prompt' cannot be converted to type 'String'."
> >> > Any ideas?
> >> > Thanks in advance
> >> > Sameh
> >> >
> >> >
> >>
> >>
> >
> >
>
>



Relevant Pages

  • Re: Simple question about vbCrLf is not declared
    ... How do I include the Microsoft.VisualBasic namespace? ... Joe ... >> Imports System.IO ... >> End Sub ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: Network Connection Event Listener
    ... I have played around with the WBEM-object browser. ... There is much to learn about the WMI namespaces. ... > Hi Joe, ... > the root\wmi namespace is the right place. ...
    (microsoft.public.dotnet.framework)
  • Re: Is it possible to programatically change the Meta Tag HTML
    ... "Ross Culver" wrote in message ... Joe Blow clicks a button and Joe_Blow.aspx is created. ... But I need to be able to change the Title, description and keywords html tags for that new page automatically. ... I'd probably just use the System.IO namespace to open the newly created file, read its contents, do a find and replace as necessary and then save the file... ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: Change the DN of a user.
    ... The rename works well. ... Dev ... > System.DirectoryServices namespace. ... > Joe K. ...
    (microsoft.public.windows.server.active_directory)