Windows95 系のスクリーンセーバのパスワード認証処理は,その画面表示の処理をスクリーンセーバ側で制御する必要があるらしい.
普通のパスワード認証ダイアログを表示させるには WM_CLOSE メッセージが来たときに以下のように処理する.
BOOL VerifyPassword(HWND hwnd)
{
HINSTANCE hpwdcpl = ::LoadLibrary("PASSWORD.CPL");
if(hpwdcpl == NULL) {
return TRUE;
}
typedef BOOL (WINAPI *VERIFYSCREENSAVEPWD)(HWND hwnd);
VERIFYSCREENSAVEPWD VerifyScreenSavePwd;
VerifyScreenSavePwd = (VERIFYSCREENSAVEPWD)GetProcAddress(hpwdcpl, "VerifyScreenSavePwd");
if(VerifyScreenSavePwd == NULL) {
FreeLibrary(hpwdcpl);
return TRUE;
}
BOOL bResule = VerifyScreenSavePwd(hwnd); // 画面の表示
FreeLibrary(hpwdcpl);
return nResult;
}
つまりこの部分を書き換える事で,独自のユーザ認証処理(例えば音声認識とか)を行う
ことができる.
ただし,NT 系ではこの辺の処理を OS 側で抱え込んでるみたいなので実装は難しい.
参照
パスワードの一致
スクリーンセーバーの起動オプション