Freigeben über


IsBadReadPtr-Funktion (winbase.h)

Überprüft, ob der aufrufende Prozess Lesezugriff auf den angegebenen Speicherbereich hat.

Wichtig Diese Funktion ist veraltet und sollte nicht verwendet werden. Trotz seines Namens garantiert er nicht, dass der Zeiger gültig ist oder dass der Speicher, auf den verwiesen wird, sicher ist. Weitere Informationen finden Sie unter Hinweise auf dieser Seite.
 

Syntax

BOOL IsBadReadPtr(
  [in] const VOID *lp,
  [in] UINT_PTR   ucb
);

Parameter

[in] lp

Ein Zeiger auf das erste Byte des Speicherblocks.

[in] ucb

Die Größe des Speicherblocks in Bytes. Wenn dieser Parameter 0 ist, ist der Rückgabewert 0.

Rückgabewert

Wenn der aufrufende Prozess Lesezugriff auf alle Bytes im angegebenen Speicherbereich hat, ist der Rückgabewert 0.

Wenn der aufrufende Prozess keinen Lesezugriff auf alle Bytes im angegebenen Speicherbereich hat, ist der Rückgabewert nonzero.

Wenn die Anwendung als Debugversion kompiliert wird und der Prozess keinen Lesezugriff auf alle Bytes im angegebenen Speicherbereich 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 von Grund auf als Debughilfe festgelegt.

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 Bytes im angegebenen Speicherbereich 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.

Anforderungen

   
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

Siehe auch

IsBadCodePtr

IsBadStringPtr

IsBadWritePtr