システムが一時停止または再開されたときに通知を受け取るようにアプリケーションを登録します。 MSDNドキュメント
アプリケーションが通知を受け取った後に実行したい関数(voidとvoid CALLBACKの両方を試しましたが、どちらも同じように機能します):
void isConnectedStandby()
{
printf( "ConnectedStandby Request");
}
最初のケース-isConnectedStandby関数へのポインターを提供しますが、システムは関数へのダブルポインターとして扱います-このコールバックポインターの下にあるアドレスを呼び出します。
HPOWERNOTIFY RegistrationHandle;
PowerRegisterSuspendResumeNotification(
DEVICE_NOTIFY_CALLBACK,
&isConnectedStandby,
&RegistrationHandle
);
2番目のケース-ここでは次のように提供します(このようにして関数コードが実行されます):
typedef void (*StatusFunction_t)();
StatusFunction_t StatusFunction = isConnectedStandby;
HPOWERNOTIFY RegistrationHandle;
PowerRegisterSuspendResumeNotification(
DEVICE_NOTIFY_CALLBACK,
&isConnectedStandby,
&RegistrationHandle
);
システムは、関数をマイニングするだけでなく、最初のアドレスの後のすべてのアドレスを呼び出します(関数の配列を提供すると、有効なコードがない場合に次々に実行されてクラッシュします)
この関数を使用する正しい方法は何ですか?