SAS

少し前に Vista で変更されたという話をココでやったばかりなので、WindowsNT4/2000/XP の話。Vista では多少違うんだろう。(未調査)
id:yaneurao:20070317#p1 のコメント欄で

正しい解決方法は、キーボードドライバが無効な状態で起動させて、CTRL+ALT+DELとALT+F4を防止するソフトがキーボードドライバを復元するべきか?(よくわからん)』

とありますが、キーボードの Ctrl+Alt+Delete の手順は SAS の発行手順の1つであり、Windows OS が起動した状態でデフォルトで *無効* です。ただし、Windows が標準で使用している GINA (ようするにユーザ名とパスワードを入力してログインする最初のアレの中身)では、このキーボード操作による SAS の発行を有効化にするようになっています。
というわけで、GINA を入れ替えれば簡単に無効化することができる・・・というか、有効化しないという選択ができます。GINA の変更による SAS の入れ替え機能としては、IC カードなどのハードウェアによる認証システムが代表的です。

  • 未ログインの状態の Windows PC、ログインダイアログが表示されているが入力欄はなし(つけてもいいけど)
  • カードをカードリーダーに差し込むことで SAS → カードによる認証が発生しログオン状態へ移行
  • カードを抜くことで SAS → 自動でワークステーションのロックを実施
  • カードを指しなおすことでワークステーションのロックを解除
  • ログオフしてカードを抜いて使用終了

という感じですね。テレホンカードのような度数システムによる時間課金も加えれば空港の端末とかでも使えそうだが、ロック状態で放置されると困るなどの運用的問題を対処しないといけないだろう。*1
SAS の発行は、このようにキーボード以外のハードウェアからも実施することができるので、外部に用意した再起動ボタンも SAS の発行ハードウェアとし、WINLOGON/GINA 側で処理してしまうと

OSが起動した瞬間にはCTRL+ALT+DELを防止するためのソフトがまだ起動していないので

なんてことはなくなります。

開発経験的な話をすると

GINA のスレッドは権限も小さくて、ネットワークアクセスなどには偽装などのユーザトークンを利用したプログラミング経験がないと苦労するかもしれない。また、スタックも少ないので 1kb とかの配列を確保するとスタックオーバーフローするので注意。

*1:ロックダウン状態からタイムアウトで自動ログオフする実装は簡単である。