次の方法で共有


CreateWaitableTimerW 関数 (synchapi.h)

待機可能タイマー オブジェクトを作成または開きます。

オブジェクトのアクセス マスクを指定するには、CreateWaitableTimerEx 関数を使用します。

構文

HANDLE CreateWaitableTimerW(
  [in, optional] LPSECURITY_ATTRIBUTES lpTimerAttributes,
  [in]           BOOL                  bManualReset,
  [in, optional] LPCWSTR               lpTimerName
);

パラメーター

[in, optional] lpTimerAttributes

新しいタイマー オブジェクトのセキュリティ記述子を指定し、子プロセスが返されたハンドルを継承できるかどうかを判断する SECURITY_ATTRIBUTES 構造体へのポインター。

lpTimerAttributes が NULL場合、タイマー オブジェクトは既定のセキュリティ記述子を取得し、ハンドルを継承できません。 タイマーの既定のセキュリティ記述子の ACL は、作成者のプライマリ トークンまたは偽装トークンから取得されます。

[in] bManualReset

このパラメーターが TRUE場合、タイマーは手動リセット通知タイマーです。 それ以外の場合、タイマーは同期タイマーです。

[in, optional] lpTimerName

タイマー オブジェクトの名前。 名前は MAX_PATH 文字に制限されています。 名前の比較では大文字と小文字が区別されます。

lpTimerName NULL場合、タイマー オブジェクトは名前なしで作成されます。

lpTimerName が既存のイベント、セマフォ、ミューテックス、ジョブ、またはファイル マッピング オブジェクトの名前と一致する場合、関数は失敗し、GetLastError ERROR_INVALID_HANDLEを返します。 これは、これらのオブジェクトが同じ名前空間を共有しているために発生します。

名前には、グローバル名前空間またはセッション名前空間にオブジェクトを明示的に作成するための "Global" または "Local" プレフィックスを付けることができます。 名前の残りの部分には、円記号 (\) を除く任意の文字を含めることができます。 詳細については、「カーネル オブジェクト名前空間を参照してください。 高速ユーザー切り替えは、ターミナル サービス セッションを使用して実装されます。 カーネル オブジェクト名は、アプリケーションが複数のユーザーをサポートできるように、ターミナル サービスに関して概説されているガイドラインに従う必要があります。

オブジェクトはプライベート名前空間に作成できます。 詳細については、「オブジェクト名前空間の」を参照してください。

戻り値

関数が成功した場合、戻り値はタイマー オブジェクトへのハンドルです。 関数呼び出しの前に名前付きタイマー オブジェクトが存在する場合、関数は既存のオブジェクトへのハンドルを返し、GetLastError ERROR_ALREADY_EXISTSを返します。

関数が失敗した場合、戻り値は NULL。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

CreateWaitableTimer によって返されるハンドルは、TIMER_ALL_ACCESS アクセス権を使用して作成されます。呼び出し元にアクセス権が付与されている場合は、タイマー オブジェクトへのハンドルを必要とする任意の関数で使用できます。 別のユーザーを偽装しているサービスまたはスレッドからタイマーが作成された場合は、タイマーの作成時にセキュリティ記述子を適用するか、既定の DACL を変更して作成プロセスの既定のセキュリティ記述子を変更できます。 詳細については、「同期オブジェクトのセキュリティとアクセス権のを する」を参照してください。

呼び出し元プロセスのすべてのスレッドは、のいずれかの 待機関数の呼び出しでタイマー オブジェクト ハンドルを指定できます。

複数のプロセスが同じタイマー オブジェクトへのハンドルを持つ可能性があり、プロセス間同期にオブジェクトを使用できます。

  • CreateWaitableTime r lpTimerAttributes パラメーターが継承を有効にしている場合、CreateProcess 関数によって作成されたプロセスはタイマー オブジェクト ハンドルを継承できます。
  • プロセスでは、DuplicateHandle 関数の呼び出しでタイマー オブジェクト ハンドルを指定できます。 結果のハンドルは、別のプロセスで使用できます。
  • プロセスでは、OpenWaitableTimer の呼び出しまたは CreateWaitableTimer 関数 呼び出しでタイマー オブジェクトの名前を指定できます。
CloseHandle 関数を使用してハンドルを閉じます。 プロセスが終了すると、システムはハンドルを自動的に閉じます。 タイマー オブジェクトは、最後のハンドルが閉じられたときに破棄されます。

この関数を使用するアプリケーションをコンパイルするには、_WIN32_WINNT を 0x0400 以降として定義します。 詳細については、「Windows ヘッダーの使用」を参照してください。

タイマーをウィンドウに関連付けるには、SetTimer 関数を使用します。

CreateWaitableTimer使用する例については、「待機可能タイマー オブジェクトの使用を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリ |UWP アプリ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリ |UWP アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー synchapi.h (Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

CancelWaitableTimer の

CloseHandle の

CreateProcess の

CreateWaitableTimerEx の

DuplicateHandle の

FILETIME を する

オブジェクト名の

OpenWaitableTimer

SECURITY_ATTRIBUTES

SetWaitableTimer の

同期関数の

待機可能タイマー オブジェクト を する