[Win32API][Winsock][Development]WSAGetLastError()
WSAGetLastError()は、このSocket APIを呼び出したスレッド上でのWinsockエラーコードのようだ。つまり内部的には、TLS(Thread LocalStorage)にエラーコードを保存しているように振舞っている。
これは、プロセス単位のエラーコードではないということだ。スレッドAの上でWinsockエラーが起きた直後に、スレッドB上でWSAGetLastError()を実行しても、信頼できるエラーコードが取得できないということを意味する。
.NET FrameworkやMFCのメッセージマップを使っていたり、スレッドプールをバリバリ使っているようなプログラムだと、とくに問題になりそうな予感がする。
エラー処理をする際には、「誰が」エラーを引き起こしたのか、「誰の」エラーコードを参照したのか、ということを意識しなければならない。スレッド構成が複雑なプログラムであればなおのことこれは難しい問題となるだろう。
だからこそ、マルチスレッドは難しい、と言われるゆえんなのだが。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GetStdHandle(STD_OUTPUT_HANDLE)とprintf
SetStdHandle()を単純に実行するだけでは標準出力を物理ファイルに振り向けることはできないことがあるようだ。
原因はいまいちよくわからないが、printf()が内部的にstdoutのハンドルを複製していて、SetStdhandle()の影響を受けないように保護しているのかもしれない。
まあ、stdoutをソケットにリダイレクトすれば、ネットワーク経由でコンソール操作がだだもれになるわけだし、セキュリティの観点からはそういう実装のほうが正しいのかも。(環境はXP SP3、開発はVS2008)
theme : プログラミング
genre : コンピュータ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ディレクトリの存在チェック
CreateFile(Ex)でディレクトリの存在チェックをするサンプルですが、オプション引数にFILE_FLAG_BACKUP_SEMANTICSという値を使用しています。
この引数をOPEN_EXISTINGにすると失敗することがある(ACCESS_DENIED)のですが、その原因は何なんでしょうか。
まあ、ACCESS_DENIEDであれば、ディレクトリが存在することだけは間違いないのですが。
何か、別のプロセスがアクセスしっぱなしなんですかねぇ。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Win32API]Get/SetEnvironmentVariable()
そのため、PATH環境変数を設定して外部プログラムからのDLLサーチパスを追加する、といったことをやりたいときには、この方法は使えない。
ならば、どうしなければならないかというと、システム環境変数はレジストリの中に実体があるので、レジストリに対して変更を行えばいい。
ちなみに、レジストリ上のパスは HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path
theme : プログラミング
genre : コンピュータ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Win32]STATUS_STACK_BUFFER_OVERRUN
[Development][VC++] 意図的にデッドロックを発生させる
変なコードですが、擬似的な親子二つのプロセスを立ち上げて、一方が他方のプロセスを監視しています(実際にプロセス間に親子関係があるわけではありません)。
先に疑似親プロセスを起動し、続いて疑似子プロセスを起動します。
疑似親子プロセスの間で意図的にデッドロックを発生させています。そのため、疑似子プロセスが消滅(このままだとCTRL+Cなどで意図的に停止しないといけませんが)すると、デッドロック状態が解消され疑似親プロセスも正常終了します。
これら二つのプロセスはどちらも同じ実行ファイルから起動します。疑似親プロセスの起動には/pスイッチを使用して、疑似子プロセスの起動には/cスイッチを使用します。
これだけではほとんど意味はありませんが、常時疑似子プロセスを監視して、疑似子プロセスが消滅した時点で疑似親プロセスに何らかの処理をさせることができます。(こういう場合、ふつうはプロセスのハンドルを取得すると思いますがね・笑)
最後に、疑似親プロセスが、500msecごとにWaitをLoopさせていますが、疑似子プロセスがミューテックスハンドルを握り込んだまま消滅するとオブジェクトの状態が怪しくなるためです。当初は疑似子プロセスが終了したところでWAIT_ABANDONEDが返ってくると予想していたのですが、私がタメしたXP SP3上ではそのまま疑似親プロセスがロックされていました。
ふつうはシステムオブジェクトをロックしたままプロセスを終了させるような凶悪なことはせず、この場合は疑似子プロセスのプロセスハンドルをWaitすると思います。その場合、疑似子プロセスが終了したところでロックが解除され、WAIT_OBJECT_0が返ってくるでしょう。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Other]209/8/28 第6回UMTPモデリング技術セミナー、参加レポート
UMTP Japan - UMTPモデリング技術セミナー 第6回開催(2009-08-28)のご案内
に、参加してきました。
会場はオフィス内でしたので、周辺写真等は撮影しておりません(もっとも、有名なビル街のまっただ中ですので、場所の特定は簡単ですね)。
当日は快晴で、とても暑い一日でした。開始時間が13:30ということで、すこし前までお昼の時間帯でしたから、エキナカから地下道を通ってビルに到着するまで、かなりの人混みだったことを覚えています。
このセミナーは、主にUMTP L2合格者を対象としたものだそうで、中心としているテーマは要件定義でした。その中で、UMLを拡張したsysMLという表記法をご紹介いただきました。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Windows][Visual Studio 2008][VC++]signal(CRT)
VC++環境でsignalの動作を確認してみた。
サンプルは、無限ループでひたすらコンソールに”.”を標準出力する。
いろいろ試してみてわかったこと。
- CTRL+CでSIGINTを発生させても、すぐにプロセスは終了しなかった
(SIGINTを受信するとコンソールに”SIGINT\n”と表示されるが、その後も”.”が何個か表示されていた)
(追記:どうやら、stdio.hで定義された入出力関数はシグナルに同期しない、つまりシグナル関数内では使用禁止の模様) - [タスク マネージャ]の[プロセス]タブから強制終了すると、SIGTERMを受信する前にプロセスが消滅するっぽい?
- taskkill /fすると、SIGTERMを受信する前にプロセスが消滅するっぽい?
強制終了がハンドリングできないところを見ると、上記の下二つは9番(SIGKILL)を投げていると考えればいいのでしょうか。
theme : プログラミング
genre : コンピュータ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Win23API] メールスロット動作検証サンプル
メールスロットのサンプル。
「セッション 0 の分離」対応に使えるかどうかを検証するために使用。
使い方は、ビルドモジュールのインスタンスを二つ立ち上げる。/sスイッチを付けた方がメールスロットサーバで、/cスイッチを付けた方はクライアントとして動作する。
/sをつけて実行したメールスロットサーバは、クライアントからの書き込みを待機する。
/cを付けて実行したクライアントは、"Test."という文字列をポストする。
メールスロットサーバは、ポストを受信したらポストされた内容(=Test.")をコンソールに表示する。
theme : プログラミング
genre : コンピュータ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[wINDOWS]メモ
20009/6/27文の勉強メモ
- [Windows][WindowsNT][Windows Server 2003]システムファイルのバックアップ
- [Windows][WindowsNT][Windows Server 2003]バックアップメディアとバックアップセットへのアクセスを制限する方法
- [Windows][WindowsNT][Windows Server 2003]ボリュームシャドウコピーを開始する方法
- [Windows][WindowsNT][Windows Server 2003]ブートシーケンス
- [Windows]ディスク クォータの容量制限
- [Windows]ディスク クォータ
- [Windows][Windows Server 2003][Active Directory]ビルトインユーザーアカウント
- [Windows][Windows Server 2003][Active Directory]ドメインユーザーアカウント新規作成時の必須項目
- [Windows][Windows Server 2003][Active Directory]ユーザーアカウントをテンプレートのコピーから作成した場合に反映される項目
- [Windows][Windows Server 2003][Active Directory]ドメインローカルグループ
- [Windows][Windows Server 2003][Active Directory]グローバルグループ
- [Windows][Windows Server 2003][Active Directory]ユニバーサルグループ
- [Windows][Windows Server 2003][Active Directory]ドメインIncoming Forest Trust Buildersビルトイングループ
- [Windows][Windows Server 2003][Active Directory]Pre-Windows 2000 Compatible Access
- [Windows][Windows Server 2003][Active Directory]ドメインPerformance Monitor Usersグループ
- [Windows][Windows Server 2003][Active Directory]ドメインPerformance Log Usersグループ
- [Windows][Windows Server 2003][Active Directory]ドメインNetwork Configuration Operatorsグループ
- [Windows]リモートデスクトップクライアント(RDC)の[プログラム]設定
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Visual C++ 2008] (const)char*と_TCHAR*
[Other] 2009/6/20分の勉強日記
- ドメインコントローラとディスクフォーマット
- ベーシックディスクのパーティション拡張制限
- ベーシックディスク上のパーティション制限
- ストライプボリュームの制限事項
- ボリューム拡張時の制限事項
- ボリューム/パーティション作成の権限
- ダイナミックディスクドライブの移行
- ダイナミックディスクへの変換
- mountvol.exe
- Windows Server 2003のFAT32の制限事項
- ダイナミックディスクをサポートしているドライブ
2009/6/21分のメモが、PCとともに飛んでしまった(・ω・`)。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Other] 今日の勉強の成果とかメモとかクリップしたネタとか
- 今日のクリップ(縮退運転中) - ITドカタのWeb巡回日記
- ITドカタ的tumblr - くわぞうメモ ActiveDirectoryにユーザーアカウントを作成する権限を一般ユーザー(グループ)に部分的権限委譲する
- 細々とITドカタ的なことをやらせて頂いてます [Active Directory ユーザーとコンピュータ]コンソールの既定のコンテナ ※復習もかねて。ついでなのでコメントと言うことで補足情報を追記
- ITドカタ的tumblr - Windows][W2K3][Active Diractory] コンテナの管理権限を委譲する
- ITドカタ的tumblr - [Windows][W2K3][Active Directory]OUの管理権限委譲にはウィザードを使うといい
とりあえず現時点ではこれだけ。PCを閉じたらまた勉強に戻るつもり。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Other]2009/6/9の日記
[その他]今日の勉強メモ
- [Windows][W2K3]Active Directoryユーザーアカウント追加時の必須項目
- [Windows][W2K3]Active Directoryユーザーアカウント追加時のテンプレート使用
- [Windows][Hardware][W2K3] CPUを追加した際のシステム変更
- [Windows][Hardware][W2K3] プラグアンドプレイ非対応デバイスの管理
- [Windows][Hardware][W2K3] ディスク管理関連のコマンドラインツール
- [Windows][Hardware][W2K3] システムパーティーションとブートパーティション
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|







![仮面ライダーW Vol.1 [DVD]](http://ecx.images-amazon.com/images/I/618vhTBICyL._SL160_.jpg)
![劇場版 超・仮面ライダー電王&ディケイド NEOジェネレーションズ 鬼ヶ島の戦艦 ディレクターズカット版 [DVD]](http://ecx.images-amazon.com/images/I/611mQkOXmeL._SL160_.jpg)


