2016-04-20 16 views
1

私はVS 2013で私のプロジェクトのコード分析を実行していて、セキュリティ警告の下にあります。私のコードでセキュリティ警告を取得する

CA5122 P/Invoke宣言は安全ではありません。 P/Invokeメソッド 'InfoParameters.GetVolumeInformationInvoke(string、StringBuilder、uint、out uint、out uint、out uint、StringBuilder、uint)'は安全クリティカルとマークされています。 P/Invokeはクリティカルコードによってのみ呼び出すことができるため、この宣言はセキュリティに重大なものとしてマークするか、誤解を避けるためにアノテーションを完全に削除する必要があります。 AmericanEPayWebPunch PunchInOutBLL.cs 785

enter image description here

はコード

class InfoParameters 
{ 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
    static extern bool GetVolumeInformation(string Volume, StringBuilder VolumeName, uint VolumeNameSize, out uint SerialNumber, out uint SerialNumberLength, out uint flags, StringBuilder fs, uint fs_size); 

} 

以下のためにそうhttps://msdn.microsoft.com/en-in/library/dn621099.aspxにMSが提供するドキュメントごとに、私は私のメソッドのラッパーメソッドを作成したが、それでも同じ問題を取得します

[assembly: System.Security.AllowPartiallyTrustedCallers] 
internal static class SafeNativeMethods 
{ 
    [System.Security.SecurityCritical] 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, EntryPoint = "GetVolumeInformation")] 
    internal static extern bool GetVolumeInformationInvoke(string volume, StringBuilder volumeName, uint volumeNameSize, 
     out uint serialNumber, out uint serialNumberLength, out uint flags, StringBuilder fs, uint fsSize); 
} 

class InfoParameters 
{ 
    [SecuritySafeCritical] 
    public static bool GetVolumeInformation(string Volume, StringBuilder VolumeName, uint VolumeNameSize, out uint SerialNumber, out uint SerialNumberLength, out uint flags, StringBuilder fs, uint fs_size) 
    { 
     return SafeNativeMethods.GetVolumeInformationInvoke(Volume, VolumeName, VolumeNameSize, out SerialNumber, out SerialNumberLength, out flags, fs, fs_size); 
    } 
} 

私はまだgettiによって@Luccaの提案を試みました同じ警告です。下のスクリーンショットを参照してください。 enter image description here

+0

チェックhttps://msdn.microsoft.com/en-in/library/dn621099:

これは実際にここで働いコード(マーシャリングに関する警告のカップルはとにかく、まだあります)です。 aspx – MusicLovingIndianGirl

+0

は既に同じことを試みましたが、私は私の質問で同じリンクを共有しました –

+0

@MusicLovingIndianGirl - 既に質問の途中でリンクされていませんか? OPが欠落していると思うという具体的なアドバイスはありますか?もしそうなら、 "あなたがすでに読んだことを言っているこのページをお読みください"というより、詳細を強調する価値があります。 –

答えて

0

あなたは正しく任意の最終的な危険な組立コールのセキュリティを管理する[assembly: AllowPartiallyTrustedCallers]属性を使用している場合は、両方のSecuritySafeCriticalSecurityCritical属性が必要です。 AllowPartiallyTrustedCallersを取り外す必要がない場合は、警告が消えるはずです。

internal static class SafeNativeMethods 
{ 
    [SecurityCritical] 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, EntryPoint = "GetVolumeInformation")] 
    internal static extern bool GetVolumeInformationInvoke(string volume, StringBuilder volumeName, uint volumeNameSize, 
     out uint serialNumber, out uint serialNumberLength, out uint flags, StringBuilder fs, uint fsSize); 
} 

[SecuritySafeCritical] 
public static bool GetVolumeInformation(string Volume, StringBuilder VolumeName, uint VolumeNameSize, out uint SerialNumber, out uint SerialNumberLength, out uint flags, StringBuilder fs, uint fs_size) 
{ 
    return SafeNativeMethods.GetVolumeInformationInvoke(Volume, VolumeName, VolumeNameSize, out SerialNumber, out SerialNumberLength, out flags, fs, fs_size); 
} 
+0

それはすでにそこにあった、私は私の質問に書くことを忘れてしまった。これは問題を解決しません –

+0

両方のメソッドがすでにクラスにhttps://msdn.microsoft.com/en-in/library/dn621099.aspxとして既にあります。私は質問を変更 –

+0

[OK]を、これを解明することがわかったエラー[assembly:AllowPartiallyTrustedCallers]を使用する必要があります。それがなければ、セキュリティ呼び出しに関するエラーは発生しません。 [assembly:AllowPartiallyTrustedCallers]が必要な場合は、両方のSecurityAttributesが必要です。私はその答えを更新しました。 –

関連する問題