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 NULL-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 beendenden NULL-Zeichen der Zeichenfolge oder bis zur Anzahl von Zeichen, die durch diesen Parameter angegeben werden, je nachdem, welcher Wert kleiner ist. Wenn dieser Parameter 0 ist, ist der Rückgabewert 0.
Rückgabewert
Wenn der aufrufende Prozess Lesezugriff auf alle Zeichen bis zum beendenden NULL-Zeichen der Zeichenfolge oder bis zur anzahl von ucchMax angegebenen Zeichen hat, ist der Rückgabewert 0.
Wenn der aufrufende Prozess keinen Lesezugriff auf alle Zeichen bis zum beendenden NULL-Zeichen der Zeichenfolge oder bis zur anzahl von ucchMax angegebenen Zeichen hat, ist der Rückgabewert nonzero.
Wenn die Anwendung als Debugversion kompiliert wird und der Prozess keinen Lesezugriff auf den gesamten angegebenen Arbeitsspeicherbereich hat, verursacht die Funktion eine Assertion und bricht in den Debugger ein. Beim Verlassen des Debuggers wird die Funktion wie gewohnt fortgesetzt und gibt einen wert ohne Zero zurück. Dieses Verhalten ist standardmäßig als Debughilfe.
Hinweise
Diese Funktion wird in der Regel verwendet, wenn Sie mit Zeigern arbeiten, die von Bibliotheken von Drittanbietern zurückgegeben werden, wobei Sie das Speicherverwaltungsverhalten in der DLL des Drittanbieters nicht bestimmen können.
Es wird erwartet, dass Threads in einem Prozess so zusammenarbeiten, dass einer keinen Speicher freigibt, den der andere benötigt. Die Verwendung dieser Funktion macht dies nicht erforderlich. Wenn dies nicht geschieht, schlägt die Anwendung möglicherweise unvorhersehbar fehl.
Durch deeferencing potenziell ungültige Zeiger kann die Stapelerweiterung in anderen Threads deaktiviert werden. Ein Thread, der seinen Stapel erschöpft, wenn die Stapelerweiterung deaktiviert wurde, führt zur sofortigen Beendigung 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 nichtzero.
In einer präemptiven Multitasking-Umgebung ist es möglich, dass ein anderer Thread den Zugriff des Prozesses auf den zu testenden Arbeitsspeicher ändert. Auch wenn die Funktion angibt, dass der Prozess Lesezugriff auf den angegebenen Arbeitsspeicher hat, sollten Sie beim Versuch, auf den Arbeitsspeicher zuzugreifen, eine strukturierte Ausnahmebehandlung verwenden. Mithilfe der strukturierten Ausnahmebehandlung kann das System den Prozess benachrichtigen, wenn eine Zugriffsverletzungsausnahme auftritt, sodass der Prozess die Möglichkeit erhält, die Ausnahme zu behandeln.
Hinweis
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 nicht codierungsneutralem Code 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 |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | winbase.h (einschließlich Windows.h) |
Bibliothek | Kernel32.lib |
DLL | Kernel32.dll |