FindFirstChangeNotificationW 関数 (fileapi.h)

変更通知ハンドルを作成し、初期変更通知フィルター条件を設定します。 指定したディレクトリまたはサブツリーでフィルター条件に一致する変更が発生した場合、通知ハンドルの待機は成功します。 関数は、指定したディレクトリ自体に対する変更を報告しません。

この関数は、待機条件を満たす変更を示すものではありません。 通知の一部として特定の変更に関する情報を取得するには、
ReadDirectoryChangesW 関数。

構文

HANDLE FindFirstChangeNotificationW(
  [in] LPCWSTR lpPathName,
  [in] BOOL    bWatchSubtree,
  [in] DWORD   dwNotifyFilter
);

パラメーター

[in] lpPathName

監視するディレクトリの完全パス。

相対パスまたは空の文字列を指定することはできません。

既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付加します。 詳細については、「ファイル、パス、および名前空間の名前付け」を参照してください。

ヒント

Windows 10 バージョン 1607 以降では、"\\?\" を前に置かずに、MAX_PATHの制限を削除するようにオプトインできます。 詳細については、「 ファイル、パス、および名前空間の名前付け 」の「最大パス長の制限」セクションを参照してください。

[in] bWatchSubtree

このパラメーターが TRUE の場合、関数は指定されたディレクトリにルート化されたディレクトリ ツリーを監視します。 FALSE の場合は、指定されたディレクトリのみを監視します。

[in] dwNotifyFilter

変更通知待機を満たすフィルター条件。 このパラメーターには、次の値の 1 つ以上を指定できます。

説明
FILE_NOTIFY_CHANGE_FILE_NAME
0x00000001
監視対象のディレクトリまたはサブツリーでファイル名が変更されると、変更通知の待機操作から制御が戻ります。 ファイル名の変更とは、ファイル名の変更、作成、削除を指します。
FILE_NOTIFY_CHANGE_DIR_NAME
0x00000002
監視対象のディレクトリまたはサブツリーでディレクトリ名を変更すると、変更通知の待機操作が返されます。 変更には、ディレクトリの作成または削除が含まれます。
FILE_NOTIFY_CHANGE_ATTRIBUTES
0x00000004
監視対象のディレクトリまたはサブツリーで属性が変更されると、変更通知の待機操作から制御が戻ります。
FILE_NOTIFY_CHANGE_SIZE
0x00000008
監視対象のディレクトリまたはサブツリーでファイル サイズが変更されると、変更通知の待機操作から制御が戻ります。 オペレーティング システムでファイル サイズの変更が検出されるのは、ファイルがディスクに書き込まれたときだけです。 拡張キャッシュを使用するオペレーティング システムでこの変更が検出されるのは、キャッシュが十分にフラッシュされたときだけです。
FILE_NOTIFY_CHANGE_LAST_WRITE
0x00000010
監視対象のディレクトリまたはサブツリーでファイルに対する最終書き込み日時が変更されると、変更通知の待機操作から制御が戻ります。 オペレーティング システムでファイルに対する最終書き込み日時の変更が検出されるのは、ファイルがディスクに書き込まれたときだけです。 拡張キャッシュを使用するオペレーティング システムでこの変更が検出されるのは、キャッシュが十分にフラッシュされたときだけです。
FILE_NOTIFY_CHANGE_SECURITY
0x00000100
監視対象のディレクトリまたはサブツリーでセキュリティ記述子を変更すると、変更通知の待機操作が返されます。

戻り値

関数が成功した場合、戻り値は変更検出通知オブジェクトへのハンドルです。

失敗した場合の戻り値は、INVALID_HANDLE_VALUE です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

待機関数は、FindFirstChangeNotification 関数によって返されるハンドルを使用して、指定されたディレクトリまたはサブツリーを監視できます。 監視対象のディレクトリまたはサブツリーでいずれかのフィルター条件が発生した場合、待機は満たされます。

待機が満たされた後、アプリケーションはこの条件に応答し、 FindNextChangeNotification 関数と適切な待機関数を呼び出してディレクトリの監視を続行できます。 ハンドルが不要になった場合は、 FindCloseChangeNotification 関数を使用してハンドルを閉じることができます。

リモート ファイル システムに対して FindFirstChangeNotification を呼び出すときに、通知が返されない場合があります。

シンボリック リンクの動作 : パスがシンボリック リンクを指している場合は、ターゲットの通知ハンドルが作成されます。

シンボリック・リンクを含むディレクトリーの変更通知を受け取るためにアプリケーションが登録されている場合、アプリケーションはシンボリック・リンクが変更されたときにのみ通知され、ターゲット・ファイルは通知されません。

Windows 8とWindows Server 2012では、この関数は次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル はい
SMB 3.0 Transparent Failover (TFO) はい
SMB 3.0 とスケールアウト ファイル共有 (SO) はい
クラスター共有ボリューム ファイル システム (CsvFS) 解説を参照してください
Resilient File System (ReFS) はい
 

CsvFs の一時停止/再開で、アプリケーションで誤検知が発生する可能性があります。

使用例

例については、「 ディレクトリ Change_Notificationsの取得」を参照してください。

注意

fileapi.h ヘッダーは、FindFirstChangeNotification をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー fileapi.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

ディレクトリ管理機能

FindCloseChangeNotification

FindNextChangeNotification

ReadDirectoryChangesW