CComVariant::ReadFromStream() gibt einen Fehler (Zugriff verweigert) für Datenstrom > 1 MB zurück

In diesem Artikel erfahren Sie, wie Sie das Problem beheben können, dass ein Fehler (Zugriff verweigert) auftritt, wenn Ihre Anwendung Daten aus CComVariant::ReadFromStream() einem Datenstrom liest.

Ursprüngliche Produktversion:   Visual C++
Ursprüngliche KB-Nummer:   2831480

Problembeschreibung

Sie haben eine Anwendung entwickelt, die Daten aus einem Datenstrom liest, und es wird eine Fehlermeldung (Zugriff verweigert) für die Streamgröße > CComVariant::ReadFromStream() 1 MB zurückgegeben.

Ursache

Bei der Überprüfung von "atlcomcli.h" stellen wir fest, dass die Größe hier festgelegt wurde:

#ifndef _ATL_STREAM_MAX_SIZE
#define _ATL_STREAM_MAX_SIZE0x100000
#endif

und wenn die Größe des Datenstroms die maximale Länge erhöht, sollte ein Fehler "Zugriff verweigert" ausgelöst werden.

else if (cbStrLen > _ATL_STREAM_MAX_SIZE)
{
    ATLTRACE(atlTraceCOM, 0, _T('String exceeded the maximum allowed size see _ATL_STREAM_MAX_SIZE.'));
    hr = E_ACCESSDENIED;
}

Lösung

Wenn Sie über ein gültiges Szenario verfügen, in dem Sie Daten als Batch-Zu- und Abschnr. (Batch-Vorfall) streamen, das größer als die vordefinierte Größe ist, können Sie sie ändern. Wenn Sie jedoch nicht vertrauenswürdigen Code verwenden, sollte diese Problemumgehung nicht verwendet werden.

Ein Ansatz wäre die CCOmVariant::ReadFromStream() Außerkraftsetzung. Eine andere Möglichkeit besteht in der Änderung _ATL_STREAM_MAX_SIZE selbst.

Weitere Informationen

Wir lesen aus einem Datenstrom, und der Datenstrom kann aus einer nicht vertrauenswürdigen Quelle stammen. Der Wert "MAX" ist vorhanden, um alle Probleme mit Datenströmen zu fangen, die bearbeitet wurden, um den Code zu testen, um eine große Anzahl von Arbeitsspeicher zuzuordnen, die DOS-Angriffe verursacht.