私は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
はコード
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の提案を試みました同じ警告です。下のスクリーンショットを参照してください。
チェックhttps://msdn.microsoft.com/en-in/library/dn621099:
これは実際にここで働いコード(マーシャリングに関する警告のカップルはとにかく、まだあります)です。 aspx – MusicLovingIndianGirl
は既に同じことを試みましたが、私は私の質問で同じリンクを共有しました –
@MusicLovingIndianGirl - 既に質問の途中でリンクされていませんか? OPが欠落していると思うという具体的なアドバイスはありますか?もしそうなら、 "あなたがすでに読んだことを言っているこのページをお読みください"というより、詳細を強調する価値があります。 –