ReallocADsMem function

The ReallocADsMem function reallocates and copies an existing memory block.

Syntax

LPVOID ReallocADsMem(
  LPVOID pOldMem,
  DWORD  cbOld,
  DWORD  cbNew
);

Parameters

pOldMem

Type: LPVOID

Pointer to the memory to copy. ReallocADsMem will free this memory with FreeADsMem after it has been copied. If additional memory cannot be allocated, this memory is not freed. This memory must have been allocated with the AllocADsMem, AllocADsStr, ReallocADsMem, or ReallocADsStr function.

The caller must free this memory when it is no longer required by passing this pointer to FreeADsMem.

cbOld

Type: DWORD

Size, in bytes, of the memory to copy.

cbNew

Type: DWORD

Size, in bytes, of the memory to allocate.

Return Value

Type: LPVOID

When successful, the function returns a pointer to the new allocated memory. Otherwise it returns NULL.

Remarks

If cbNew is less than cbOld, the existing memory is truncated to fit the new memory size.

Examples

The following code example shows how to use ReallocADsMem to enlarge a string.

LPWSTR pwszPrefix = L"LDAP://"
DWORD dwOldSize = (lstrlenW(pwszPrefix) + 1) * sizeof(WCHAR);

LPWSTR pwszADsPath = (LPWSTR)AllocADsMem(dwOldSize);
if(pwszADsPath)
{
    LPWSTR pwszDN = L"DC=fabrikam,DC=com";

    wcsncpy_s(pwszADsPath, pwszPrefix); // Path becomes "LDAP://"
    wprintf(L"path = %s\n", pwszADsPath);

    DWORD dwNewSize = (lstrlenW(pwszPrefix) + lstrlenW(pwszDN) + 1) * sizeof(WCHAR);
    
    /*
    If successful, this will free the old path buffer, so it does not have to be 
    freed manually. But if it fails, the original memory still exists, so the 
    reallocated memory pointer is temporarily placed in another variable.
    */
    LPWSTR pwszNewPath = (LPWSTR)ReallocADsMem(pwszADsPath, dwOldSize, dwNewSize);
    if(pwszNewPath)
    {
        pwszADsPath = pwszNewPath;

        // Path is still "LDAP://"
        wcsncat_s(pwszADsPath, pwszDN);

        // Path is "LDAP://DC=fabrikam,DC=com"
        wprintf(L"path = %s\n", pwszADsPath);
    }
    else
    {
        wprintf(L"Unable to allocate additional memory.");
    }

    // Free remaining memory.
    FreeADsMem(pwszADsPath);
}

Requirements

   
Minimum supported client Windows Vista
Minimum supported server Windows Server 2008
Target Platform Windows
Header adshlp.h
Library Activeds.lib
DLL Activeds.dll

See Also

ADSI Functions

AllocADsMem

AllocADsStr

FreeADsMem

ReallocADsMem