Share via


ReallocADsMem-Funktion (adshlp.h)

Mit der Funktion ReallocADsMem wird ein vorhandener Speicherblock neu zugeordnet und kopiert.

Syntax

LPVOID ReallocADsMem(
  [in] LPVOID pOldMem,
  [in] DWORD  cbOld,
  [in] DWORD  cbNew
);

Parameter

[in] pOldMem

Typ: LPVOID

Zeiger auf den zu kopierenden Speicher. ReallocADsMem gibt diesen Speicher mit FreeADsMem frei, nachdem er kopiert wurde. Wenn kein zusätzlicher Arbeitsspeicher zugewiesen werden kann, wird dieser Arbeitsspeicher nicht freigegeben. Dieser Arbeitsspeicher muss mit der Funktion AllocADsMem, AllocADsStr, ReallocADsMem oder ReallocADsStr zugeordnet worden sein.

Der Aufrufer muss diesen Arbeitsspeicher freigeben, wenn er nicht mehr benötigt wird, indem er diesen Zeiger an FreeADsMem übergibt.

[in] cbOld

Art: DWORD

Größe des zu kopierenden Arbeitsspeichers in Bytes.

[in] cbNew

Art: DWORD

Größe des zu zuweisenden Arbeitsspeichers in Bytes.

Rückgabewert

Typ: LPVOID

Bei erfolgreicher Ausführung gibt die Funktion einen Zeiger auf den neuen zugeordneten Speicher zurück. Andernfalls wird NULL zurückgegeben.

Hinweise

Wenn cbNew kleiner als cbOld ist, wird der vorhandene Arbeitsspeicher abgeschnitten, um der neuen Speichergröße zu entsprechen.

Beispiele

Das folgende Codebeispiel zeigt, wie Sie ReallocADsMem verwenden, um eine Zeichenfolge zu vergrößern.

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);
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile adshlp.h
Bibliothek Activeds.lib
DLL Activeds.dll

Weitere Informationen

ADSI-Funktionen

AllocADsMem

AllocADsStr

FreeADsMem

ReallocADsMem