IsBadWritePtr-Funktion (winbase.h)
Überprüft, ob der aufrufende Prozess Schreibzugriff auf den angegebenen Speicherbereich hat.
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 |