ホームページ >バックエンド開発 >C++ >Win32 API を使用して .NET でファイルをロックしているプロセスを特定する方法

Win32 API を使用して .NET でファイルをロックしているプロセスを特定する方法

DDD
DDDオリジナル
2025-01-19 22:36:09897ブラウズ

How to Identify Processes Locking a File in .NET Using the Win32 API?

謎を解く: .NET でファイルをロックしているプロセスを特定する

.NET Framework を Win32 API と組み合わせることで、特定のファイルをロックしているプロセスを特定するための強力なソリューションが提供されます。このガイドでは、そのプロセスについて詳しく説明します。

Restart Manager API の活用

Windows は、再起動マネージャー API を使用して、ファイル ロックを保持しているプロセスを追跡します。 この API は、これらのプロセスを識別するための堅牢なメカニズムを提供します。 次のコードはこれを示しています:

<code class="language-c#">using System.Runtime.InteropServices;
using System.Diagnostics;
using System;
using System.Collections.Generic;

public static class FileUtil
{
    ...
    // See code in provided response
    ...
}</code>

実装手順

このコードを使用してファイル ロック プロセスを特定するには、次の手順に従います。

<code class="language-c#">// Initialize a list to hold processes with file locks.
var processes = new List<Process>();

// Set up required variables and resources.
uint handle;
string key = Guid.NewGuid().ToString();

int res = RmStartSession(out handle, 0, key);

if (res != 0) { throw new Exception("Restart session initiation failed. Unable to identify file locker."); }

try
{
    const int ERROR_MORE_DATA = 234;
    uint pnProcInfoNeeded = 0,
         pnProcInfo = 0,
         lpdwRebootReasons = RmRebootReasonNone;

    string[] resources = new string[] { path };

    res = RmRegisterResources(handle, (uint)resources.Length, resources, 0, null, 0, null);

    if (res != 0) { throw new Exception("Resource registration failed."); }

    res = RmGetList(handle, out pnProcInfoNeeded, ref pnProcInfo, null, ref lpdwRebootReasons);

    if (res == ERROR_MORE_DATA)
    {
        ...  // See code in provided response

    }
    else if (res != 0) 
    { 
        throw new Exception("Failed to list processes locking the resource. Could not retrieve result size."); 
    }
}
finally
{
    RmEndSession(handle);
}</code>

path を実際のファイル パスに置き換えることを忘れないでください。

制限された権限への対処

制限された権限で実行されているプロセス (IIS 下のプロセスなど) では、アクセスの問題が発生する可能性があります。 このようなシナリオでは、代替方法が必要になる場合や、関連するレジストリ キーに対するアクセス許可の調整を慎重に検討する必要がある場合があります。 権限を変更するときは、セキュリティのベスト プラクティスを優先してください。

以上がWin32 API を使用して .NET でファイルをロックしているプロセスを特定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。