ログオン日付の取得 – プログラミング – Home

通知
すべてクリア

ログオン日付の取得


SK
 SK
(@SK)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

環境:Windows2000(SP2)・IE5.5(SP2)・VC++6.0(SP?)・SDK

Win2000でCtrl+Alt+Delキーを押すと「Windows のセキュリティ」ダイアログが
表示されると思います。
そこに「ログオンの日付」が表示されていますが、この日付を取得するにはどう
すればよろしいでしょうか?
Net系のAPIをMSDNで片っ端から調べましたが、それらしきものは見つかりません
でした(探し方が悪いのかもしれませんが)。

ご存知の方、ご教授願います。


引用解決済
トピックタグ
いもちぃ
 いもちぃ
(@いもちぃ)
ゲスト
結合: 23年前
投稿: 70
 

GetTickCountの説明を読んで、解決したらここに方法を説明してください。
後の人が助かります。(私はちょっと時間がないので。)


返信引用
いもちぃ
 いもちぃ
(@いもちぃ)
ゲスト
結合: 23年前
投稿: 70
 

あ、失礼。2000でログオンした日付でしたね。
それもGetTickCountの説明にちらっと書いてますが・・・あれ?
そんなレジストリあったっけ?
以下MSDNより

Windows NT/2000/XP: To obtain the time elapsed since the computer was started,
retrieve the System Up Time counter in the performance data in the registry key
HKEY_PERFORMANCE_DATA. The value returned is an 8-byte value. For more
information, see Performance Monitoring.


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

> HKEY_PERFORMANCE_DATA
>
稼動中プロセスの列挙をする時、使った記憶が...
プロセスビューアのサンプルプログラムで登場してたと思います。


返信引用
SK
 SK
(@SK)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

レスありがとうございます。

HKEY_PERFORMANCE_DATA の System Up Timeを取得して、time()などで取得した値から
引いてやればいいという考え方ということですね。
HKEY_PERFORMANCE_DATAってレジストリエディタで見えないのでちょっと苦労しそうですが、
試してみて後ほど報告します。

「Windowsのセキュリティ」ダイアログもそうやっているんですかね?
ログオンした日付をレジストリなどに保存しておけばいいだけのような気もしますけどね。


返信引用
ND
 ND
(@ND)
ゲスト
結合: 23年前
投稿: 1
 

「Windowsのセキュリティ」ダイアログはGINA.DLLが持っています。
余計な記録領域を持つことになりますが、GINA.DLL内でログオン時刻をグローバルに持てば、
WinLogon.exeからSASメッセージが渡された時にダイアログへ表示することは出来ます。
ちなみに私はGINA.DLLでログオン時刻をメモリに格納しました。

なんの回答にもなっていないですね。ごめんなさい。


返信引用
SK
 SK
(@SK)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

レスありがとうございます。

ということは「ログオンの日付」はGINAが内部的に持っているので取得することは
できないということですかね...。

HKEY_PERFORMANCE_DATA についてはいまだ進捗なしです。


返信引用
SK
 SK
(@SK)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

遅くなりましたが、報告します。

_USER_INFO_2 *ui;
char str[256];
tm *tmLogon;
long lLogonTime;

if(NetUserGetInfo(NULL, Lusername, 2, (LPBYTE *)&ui) == NERR_Success){
lLogonTime = ui->usri2_last_logon;
tmLogon = localtime(&lLogonTime);
strftime(str, sizeof(str), %Y/%m/%d(%A) %H:%M:%S, tmLogon);
MessageBox(hWnd, str, logon time, MB_OK);

if(ui)
NetApiBufferFree(ui);
}

こんな感じにすればローカルコンピュータにログインした場合にのみ、日付が取得できます。

NetUserGetInfoの第1引数をNetGetDCNameで取得したドメインコントローラにすると
ドメインにログオンした日付も取得できることが分かったのですが、あくまでもドメイン
にログオンした日付(ドメインコントローラのマシンタイム)のためなのか、実際には
「Windowsのセキュリティ」ダイアログの日付とは時刻がずれてしまいます。

やはり、GINAが内部的に持っている情報なんですかね...。

しばらくして解決方法が見つからなければ、これでよしとして解決済みのチェックをしたいと
思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました