Freigeben über


IsBadWritePtr-Funktion (winbase.h)

Überprüft, ob der aufrufende Prozess Schreibzugriff 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 IsBadWritePtr(
  [in] LPVOID   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 Schreibzugriff auf alle Bytes im angegebenen Speicherbereich hat, ist der Rückgabewert 0.

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

Wenn die Anwendung unter einem Debugger ausgeführt wird und der Prozess keinen Schreibzugriff auf alle Bytes im angegebenen Speicherbereich hat, verursacht die Funktion eine erste Chance STATUS_ACCESS_VIOLATION Ausnahme. Der Debugger kann so konfiguriert werden, dass er für diese Bedingung unterbrochen wird. Nachdem die Prozessausführung im Debugger fortgesetzt wurde, wird die Funktion wie gewohnt fortgesetzt und gibt den Wert "Nonzero" zurück. Dieses Verhalten ist standardmäßig und dient 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 Schreibzugriff auf einige, aber nicht alle Bytes im angegebenen Speicherbereich hat, ist der Rückgabewert nonzero.

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 Schreibzugriff 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.

IsBadWritePtr ist nicht multithreadsicher. Um sie ordnungsgemäß für einen Zeiger zu verwenden, der von mehreren Threads geteilt wird, rufen Sie ihn in einem kritischen Codebereich auf, in dem nur ein Thread auf den überprüften Arbeitsspeicher zugreifen kann. Verwenden Sie Objekte auf Betriebssystemebene, z. B. kritische Abschnitte oder Mutexe oder die verriegelten Funktionen, um den kritischen Codebereich zu erstellen.

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

IsBadReadPtr

IsBadStringPtr