Re: getting the PwdLastSet attrib value though .net
From: Sameh Ahmed (essoplus_at_hotmail.com)
Date: 10/02/04
- Next message: Larry Chen: "questions about writing files"
- Previous message: Agnes: "Define 8 parameters in a Object's function ~~"
- In reply to: Joe Kaplan \(MVP - ADSI\): "Re: getting the PwdLastSet attrib value though .net"
- Messages sorted by: [ date ] [ thread ]
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
> >> >
> >> >
> >>
> >>
> >
> >
>
>
- Next message: Larry Chen: "questions about writing files"
- Previous message: Agnes: "Define 8 parameters in a Object's function ~~"
- In reply to: Joe Kaplan \(MVP - ADSI\): "Re: getting the PwdLastSet attrib value though .net"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|