Directory Services |
The LDAP_PAGED_RESULT_OID_STRING control is used internally with the LDAP paged search API functions to instruct the server to return the results of a search request in smaller, more manageable packets rather than in one large block.
To use this control, format the control contents using the ldap_create_page_control function, or set the members of the LDAPControl structure as follows.
PWCHAR ldctl_oid = LDAP_PAGED_RESULT_OID_STRING; struct berval ldctl_value; BOOLEAN ldctl_iscritical;
An important benefit of using the paged control is that it enables applications to receive result sets which contain more entries than permitted by server defined limits. For example, by default, Active Directory limits search results to a maximum of 1000 entries. Using the paged control with a paged size of < 1000, an application can retrieve the complete set of results (more than 1000) in packet sizes that do not exceed the server limit.
Client applications should use the LDAP API functions, such as ldap_create_page_control, ldap_search_init_page, ldap_parse_result, ldap_parse_page_control, and so on, instead of attempting to create and manipulate this control directly.
If the value of the ldctl_value sequence argument is required to be created manually, the sequence data is formatted as follows.
Sequence { pageSize INTEGER Cookie OCTET STRING }
Sequence Data | Description |
---|---|
pageSize | Specifies the requested page size from the client, or the estimated result set size returned by the server. |
Cookie | An opaque Octet String that is implementation specific. Initial creation of this control should be a NULL string of 0 length. |
This code example shows how to manually format the sequence data for the first call to an extended LDAP search function.
LDAPControl lControl; BerElement *pber = NULL; PBERVAL pldctrl_value = NULL; ber_int_t iPageSize = 250; int success = -1; // Format and encode the SEQUENCE data in a BerElement. pber = ber_alloc_t(LBER_USE_DER); if(pber==NULL) return BER_ALLOC_FAILURE_CODE; ber_printf(pber,"{io}",iPageSize,NULL,0); // Transfer the encoded data into a BERVAL. success = ber_flatten(pber,&pldctrl_value); if(success == 0) ber_free(pber,1); else { printf("ber_flatten failed"); // Call an error routine. } // Copy the BERVAL data to the LDAPControl structure. lControl.ldctl_oid = LDAP_PAGED_RESULT_OID_STRING; lControl.ldctl_iscritical = TRUE; lControl.ldctl_value.bv_val = new char[pldctrl_value->bv_len]; memcpy(lControl.ldctl_value.bv_val, pldctrl_value->bv_val, pldctrl_value->bv_len); lControl.ldctl_value.bv_len = pldctrl_value->bv_len; // Clean up temporary berval .ber_bvfree(pldctrl_value); // The LDAPControl data is ready for use in ldap_search_ext() // or another call.
Client: Included in Windows XP and
Windows 2000 Professional.
Server: Included in Windows Server 2003 and
Windows 2000 Server.
Redistributable: Requires Active Directory Client Extension
on Windows NT 4.0 SP6a and Windows 95/98/Me.
Header: Declared in Winldap.h.