CA2006: Použijte SafeHandle pro zapouzdření nativních prostředků
Název_typu |
UseSafeHandleToEncapsulateNativeResources |
CheckId |
CA2006 |
Kategorie |
Microsoft.Reliability |
Změnit rozdělení |
Bez rozdělení |
Příčina
Spravovaného kódu používá IntPtr přístup k prostředkům na nativní.
Popis pravidla
Použít IntPtr spravovaný kód může znamenat potenciální problém zabezpečení a spolehlivost.Veškeré IntPtr musí být přezkoumána, určit, zda použití SafeHandle , nebo podobné technologie je na jeho místo.Pokud dojde k potížím IntPtr představuje některé nativní prostředek, například paměti, popisovač souboru nebo soketu, že spravovaný kód je považována za vlastní.Pokud spravovaný kód vlastní zdroje, ji musí také uvolnit prostředky nativní přidruženy, protože se nepodařilo provést by způsobit únik prostředků.
V takových případech problémy zabezpečení a spolehlivosti bude také existovat, pokud podprocesy přístup povolen IntPtr a způsob uvolnění prostředků, který je představován IntPtr je k dispozici.Tyto problémy se týkají recyklace IntPtr hodnotu na uvolnění prostředků při souběžné používání prostředku se provádí v jiném podprocesu.To může způsobit sporech, kde můžete číst nebo zapisovat data spojená s Chybný prostředek jeden podproces.Pokud typ vašeho uloží popisovač OS, jako například IntPtr a umožňuje uživatelům volání i Close a jiné metody, která používá popisovače současně a bez nějaký druh synchronizaci, kód má popisovač recyklace problém.
Tento popisovač recyklace problém může způsobit poškození dat a často se zabezpečením.SafeHandleTřída jeho sourozenců a CriticalHandle poskytují mechanismus k zapouzdření nativní popisovač prostředku tak, aby takové problémy podprocesů se lze vyhnout.Navíc můžete použít SafeHandle a jeho třída na stejné úrovni jako CriticalHandle jiných podprocesů problémů, například pečlivě životnost spravovaných objektů, které obsahují kopie nativní popisovač přes volání nativních metod řízení.V této situaci můžete odebrat často volání na GC.KeepAlive.Výkon režijní thay, které jsou účtovány při použití SafeHandle a v menší míře CriticalHandle, často lze snížit návrhem opatrní.
Jak opravit porušení
Převést IntPtr využití SafeHandle bezpečně spravovat přístup k prostředkům na nativní.Najdete SafeHandle tématu Referenční příklady.
Při potlačení upozornění
Nepotlačovat by toto upozornění.