IsBadStringPtrA-Funktion (winbase.h)
Überprüft, ob der aufrufende Prozess Lesezugriff auf den angegebenen Speicherbereich hat.
Syntax
BOOL IsBadStringPtrA(
[in] LPCSTR lpsz,
[in] UINT_PTR ucchMax
);
Parameter
[in] lpsz
Ein Zeiger auf eine mit Null beendete Zeichenfolge, entweder Unicode oder ASCII.
[in] ucchMax
Die maximale Größe der Zeichenfolge in TCHARs. Die Funktion überprüft den Lesezugriff in allen Zeichen bis zum endenden NULL-Zeichen der Zeichenfolge oder bis zur Anzahl der von diesem Parameter angegebenen Zeichen, je nachdem, welcher Wert kleiner ist. Wenn dieser Parameter null ist, ist der Rückgabewert null.
Rückgabewert
Wenn der aufrufende Prozess Lesezugriff auf alle Zeichen bis zum Zeichenfolgenende NULL-Zeichen oder bis zur Anzahl der zeichen hat, die von ucchMaxangegeben wird, ist der Rückgabewert Null.
Wenn der aufrufende Prozess keinen Lesezugriff auf alle Zeichen bis zum Zeichenfolgenende NULL-Zeichen oder bis zur Anzahl der zeichen hat, die durch ucchMaxangegeben wird, ist der Rückgabewert ungleich Null.
Wenn die Anwendung als Debugversion kompiliert wird und der Prozess keinen Lesezugriff auf den gesamten angegebenen Speicherbereich hat, verursacht die Funktion eine Assertion und bricht in den Debugger auf. Wenn Sie den Debugger verlassen, wird die Funktion wie gewohnt fortgesetzt und gibt einen Wert ungleich Null zurück. Dieses Verhalten ist beabsichtigt, als Debugginghilfe.
Bemerkungen
Diese Funktion wird in der Regel verwendet, wenn Sie mit Zeigern arbeiten, die von Drittanbieterbibliotheken zurückgegeben werden, wo Sie das Speicherverwaltungsverhalten in der DLL eines Drittanbieters nicht ermitteln können.
Threads in einem Prozess werden erwartet, dass sie so zusammenarbeiten, dass man keinen Arbeitsspeicher freigibt, den die andere benötigt. Die Verwendung dieser Funktion führt nicht dazu, dass dies erforderlich ist. Wenn dies nicht geschehen ist, schlägt die Anwendung möglicherweise unvorhersehbar fehl.
Die Ableitung potenziell ungültiger Zeiger kann die Stapelerweiterung in anderen Threads deaktivieren. Ein Thread, der seinen Stapel erschöpft, wenn die Stapelerweiterung deaktiviert wurde, führt zum sofortigen Beenden des übergeordneten Prozesses ohne Popupfehlerfenster oder Diagnoseinformationen.
Wenn der aufrufende Prozess Lesezugriff auf einige, aber nicht alle, des angegebenen Speicherbereichs hat, ist der Rückgabewert ungleich Null.
In einer präemptiven Multitaskingumgebung ist es möglich, dass ein anderer Thread den Zugriff des Prozesses auf den getesteten Speicher ändert. Selbst wenn die Funktion angibt, dass der Prozess Lesezugriff auf den angegebenen Speicher hat, sollten Sie strukturierte Ausnahmebehandlung verwenden, wenn Sie versuchen, auf den Speicher zuzugreifen. Die Verwendung der strukturierten Ausnahmebehandlung ermöglicht es dem System, den Prozess zu benachrichtigen, wenn eine Zugriffsverletzungs ausnahme auftritt und dem Prozess die Möglichkeit gibt, die Ausnahme zu behandeln.
Anmerkung
Der winbase.h-Header definiert IsBadStringPtr als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows XP [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows Server 2003 [Nur Desktop-Apps] |
Zielplattform- | Fenster |
Header- | winbase.h (enthalten Windows.h) |
Library | Kernel32.lib |
DLL- | Kernel32.dll |