Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
CA1417: Nie używaj
| 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 10 | 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.