CA1417: Nie używaj OutAttribute
parametrów ciągu dla parametrów P/Invoke
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1417 |
Tytuł | Nie używaj OutAttribute parametrów ciągu dla parametrów P/Invoke |
Kategoria | Współdziałanie |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako ostrzeżenie |
Przyczyna
Parametr ciągu P/Invoke jest przekazywany przez wartość i oznaczony znakiem OutAttribute.
Opis reguły
Środowisko uruchomieniowe platformy .NET automatycznie wykonuje interning ciągu. Jeśli internowany ciąg oznaczony za OutAttribute pomocą jest przekazywany przez wartość do P/Invoke, środowisko uruchomieniowe może być zdestabilizować.
Jak naprawić naruszenia
Jeśli wymagane jest przeładowanie zmodyfikowanych danych ciągu z powrotem do obiektu wywołującego, przekaż ciąg przez odwołanie. OutAttribute W przeciwnym razie można je usunąć bez żadnych innych zmian.
// Violation
[DllImport("MyLibrary")]
private static extern void Foo([Out] string s);
// Fixed: passed by reference
[DllImport("MyLibrary")]
private static extern void Foo(out string s);
// Fixed: marshalling data back to caller is not required
[DllImport("MyLibrary")]
private static extern void Foo(string s);
Kiedy pomijać ostrzeżenia
Nie można bezpiecznie pominąć ostrzeżenia z tej reguły.
Zobacz też
Współpracuj z nami w serwisie GitHub
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.