Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA2101 |
| Cím | P/Invoke karakterlánc argumentumok elrendezésének megadása |
| Kategória | Globalizáció |
| A javítás romboló vagy nem romboló | Nem törhető |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Javaslatként |
| Alkalmazandó nyelvek | C# és Visual Basic |
Ok
A platforminvokációs tag lehetővé teszi a részlegesen megbízható hívókat, rendelkezik string paraméterrel, és nem explicit módon kezeli a stringet.
Szabály leírása
Unicode-ról ANSI-vé való konvertáláskor előfordulhat, hogy nem minden Unicode-karakter jelenik meg egy adott ANSI-kódlapon. A legjobban illeszkedő leképezés úgy próbálja megoldani ezt a problémát, hogy egy olyan karaktert helyettesít a karakterrel, amely nem jeleníthető meg. A funkció használata biztonsági rést okozhat, mert nem szabályozhatja a választott karaktert. A rosszindulatú kód például szándékosan létrehozhat egy Unicode-sztringet, amely olyan karaktereket tartalmaz, amelyek nem találhatók egy adott kódlapon, amelyeket a rendszer speciális fájlrendszeri karakterekké alakít át, például a "." karaktert. vagy "/". Vegye figyelembe azt is, hogy a speciális karakterek biztonsági ellenőrzése gyakran előfordul a sztring ANSI-vé alakítása előtt.
A legjobb illesztés az alapértelmezett beállítás a nem felügyelt átalakításban (WChar–MByte esetében). Ha nem tiltotta le kifejezetten a legmegfelelőbb párosítást, a kód esetleg kihasználható biztonsági rést tartalmazhat emiatt a probléma miatt.
Figyelemfelhívás
A kódelérési biztonság (CAS) nem tekinthető biztonsági határnak.
Szabálysértések kijavítása
A szabály megsértésének kijavításához explicit módon meg kell adni a karakterlánc adattípusokat.
Mikor kell letiltani a figyelmeztetéseket?
Ne nyomja el a figyelmeztetést ebből a szabályból.
Példa
Az alábbi példa egy olyan módszert mutat be, amely megsérti ezt a szabályt, majd bemutatja a szabálysértés kijavításának módját.
class NativeMethods
{
// Violates rule: SpecifyMarshalingForPInvokeStringArguments.
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
internal static extern int RegCreateKey(IntPtr key, String subKey, out IntPtr result);
// Satisfies rule: SpecifyMarshalingForPInvokeStringArguments.
[DllImport("advapi32.dll", CharSet = CharSet.Unicode)]
internal static extern int RegCreateKey2(IntPtr key, String subKey, out IntPtr result);
}
Friend Class NativeMethods
' Violates rule: SpecifyMarshalingForPInvokeStringArguments.
<DllImport("advapi32.dll", CharSet:=CharSet.Auto)>
Friend Shared Function RegCreateKey(ByVal key As IntPtr, ByVal subKey As String, <Out> ByRef result As IntPtr) As Integer
End Function
' Satisfies rule: SpecifyMarshalingForPInvokeStringArguments.
<DllImport("advapi32.dll", CharSet:=CharSet.Unicode)>
Friend Shared Function RegCreateKey2(ByVal key As IntPtr, ByVal subKey As String, <Out> ByRef result As IntPtr) As Integer
End Function
End Class