Retrieving Properties of a Directory Object with DAPIRead
Let me extend the example in previous subsection with a call to
DAPIRead. DAPIRead function obtains properties of an individual directory
object. Suppose I want to retrieve properties of an Mailbox object. You may take
a look at this object in your Recipient Container. Here is this sample code
(DAPIRead sample):
uses DAPI;
procedure
TForm1.Button1Click(Sender: TObject);
var
DSession:DAPI_HANDLE; (* Points to the handle of the
directory operation session *)
DAPIParms:DAPI_PARMS; (* Points to a DAPI_PARMS
structure containing the directory interface object. *)
pDAPIEvent:PDAPI_EVENT; (* The DAPI_EVENT structure
contains information about errors that are encountered during the execution of a
DAPI function *)
pValues, (* Points to the address where the pointer to a DAPI_ENTRY
structure containing the values read from the DIT entry is stored *)
pAttributes: PDAPI_ENTRY; (* Points to the address where a DAPI_ENTRY
structure containing the names of the attributes read from the DIT is stored. *)
begin
DAPIParms.dwDAPISignature:=DAPI_SIGNATURE;
DAPIParms.dwFlags := DAPI_EVENT_ALL;
// Initialize DAPI
pDAPIEvent:=DAPIStart(@DSession,@DAPIParms);
if Assigned(pDAPIEvent) then
ShowMessage('Error')
else
// We have DAPI
session. Use it now for read.
begin
pValue:=nil;
pAttributes:=nil;
pDAPIEvent:=DAPIRead(
DSession,
DAPI_READ_ALL_ATTRIBUTES,
'/o=IMIBO Corporation/ou=DEV/cn=Recipients/cn=Administrator',
nil,
@pValue,
@pAttributes);
if Assigned(pDAPIEvent) then
ShowMessage('Error')
else
begin
// Process pAttributes and
pValue
...
...
end;
// Deallocate memory
if Assigned(pValue) then DAPIFreeMemory(pValue);
if Assigned(pAttributes) then DAPIFreeMemory(pAttributes);
// Terminate DAPI session
DAPIEnd(@DSession);
end;
end;
Notice that I have passed DAPI session in first parameter to DAPIRead, and
full name of Mailbox object in third parameter. You may easily obtain this name
if you start Exchange Administrator in raw mode, obtain a list of raw properties
for the object ("Raw Properties" on "File" menu) and then
look into its Obj-Dist-Name property. You may even cut and paste this long
string from Exchange Administrator into your code. Obviously, some components of
this long string will be different in your particular case.
When you step over the DAPIRead function in the above example in the
debugger, you should see that pValues and pAttributes have been assigned new
values (I assume the function call is successful). You may expand the pointers
in the debugger's watch window and observe components of the structures.
Notice two calls to DAPIFreeMemory before I call DAPIEnd. This is what
Microsoft recommends in the description of the DAPIRead function.
Compiled DELPHI 5 Apllication
|