Windows VistaからSRWLock(Slim Reader/Writer Lock)が導入された。 目的はクリティカルセクションと同じだが、共有ロックと排他ロックを別々に適用することで、パフォーマンスが向上を図ることができるところがメリットになる。 SRWLockに関する主な関数に…
Windows Vistaで新たに追加されたスレッドプールのタイマーオブジェクトのAPIを使う。タイマーオブジェクトは、指定した期限に達したときにコールバック関数を呼び出すために使用する。 まず、CreateThreadpoolTimer関数でスレッドプールタイマーオブジェク…
SetUnhandledExceptionFilter関数で例外ハンドラを登録しておくと、プログラムでAccessViolationなどの例外が発生したときに、登録した例外ハンドラが呼び出される。使用例main関数の最初に、SetUnhandledExceptionFilterで例外ハンドラを登録する。その直後…
ダブルクリック時間を取得するにはGetDoubleClickTime関数を、設定するにはSetDoubleClickTime関数を用いる。 GetDoubleClickTime関数とSetDoubleClickTime関数の使用例は、以下の通り このプログラムは、まず現在設定されているダブルクリック時間を取得し…
ディスプレイモニターの情報を取得するには、GetMonitorInfo関数を用いる。GetMonitorInfo関数のプロトタイプは、以下の通り BOOL GetMonitorInfo( _In_ HMONITOR hMonitor, _Out_ LPMONITORINFO lpmi );第一引数の hMonitor はディスプレイモニターのハンド…
Windowsサービスアプリケーションの開発を行う。まず、アプリケーションをサービス制御マネージャのデータベースに登録するところから行う。使用する主なAPIは、OpenSCManager関数とCreateService関数である。 アプリケーションをサービス制御マネージャのデ…
C#でSSL通信を行う。サーバー証明書の検証も行う。 例として、インターネット上のWebサーバーとSSL通信を行う。 手順は、以下のようになる。 1Webサーバー名からWebサーバーのIPアドレスをDNSでルックアップ 2TcpClientを用いて、Webサーバーの443番ポートに…
C#でSSL通信を行う。例として、インターネット上のWebサーバーとSSL通信を行う。ここでは、問題を単純にするためサーバー証明書の検証は行わない。 手順は、以下のようになる。 1Webサーバー名からWebサーバーのIPアドレスをDNSでルックアップ 2TcpClientを…
Windows Vistaで追加されたスレッドプールの特徴のひとつとして、従来のQueueUserWorkItem関数ではコールバック関数が終了したことを、スレッド起動側が知ることができなかったのが、新しいスレッドプールでは、コールバック関数の終了を知ることができるよ…
キーストロークメッセージをフックをするためには、SetWindowsHookEx関数を使う。 SetWindowsHookExのプロトタイプ HHOOK SetWindowsHookEx( int idHook, // フックタイプ HOOKPROC lpfn, // フックプロシージャ HINSTANCE hMod, // アプリケーションインス…
ウィンドウの情報を得るには、GetWindowInfo関数を用いる。 GetWindowInfo関数のプロトタイプは、以下の通り。 BOOL GetWindowInfo( HWND hwnd, PWINDOWINFO pwi );第二引数のWINDOWINFO構造体は、WinUser.h にて、以下のように定義されている。 typedef str…
ローカルコンピュータ上の、既定のプリンタのプリンタ名を取得するには、GetDefaultPrinter関数を使用する。この関数は、[コントロールパネル]→[ハードウェアとサウンド]→[デバイスとプリンター]で表示されている[プリンタとFAX](Windows 7の場合)で、通常…
MoveWindow関数で、ウィンドウの位置や大きさを設定することができる。MoveWindow関数のプロトタイプ BOOL MoveWindow( HWND hWnd, // ウィンドウのハンドル int X, // 横方向の位置 int Y, // 縦方向の位置 int nWidth, // 幅 int nHeight, // 高さ BOOL bR…
ウィンドウは、ShowWindow関数により、プログラムから表示・非表示などの状態を切り替えることができる。 ShowWindow関数のプロトタイプ BOOL ShowWindow( HWND hWnd, // ウィンドウのハンドル int nCmdShow // 表示状態 );ShowWindow関数の第二引数nCmdShow…
ウィンドウを列挙するのは、FindWindowExでも可能だが、EnumWindowsの方が簡単。 EnumWindowsのプロトタイプ BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // コールバック関数 LPARAM lParam // アプリケーション定義の値 ); EnumWindows関数を用いて、ウィ…
Windowsのデスクトップ上のウィンドウを検索するには、FindWindowEx関数を使う。FindWindowExのプロトタイプ HWND FindWindowEx( HWND hwndParent, // 親ウィンドウのハンドル HWND hwndChildAfter, // 子ウィンドウのハンドル LPCTSTR lpszClass, // クラス…
Windows Vistaから搭載されたTransactional NTFSという機能で、ファイル操作に対してトランザクション処理を行えるようになりました。 例えば、[ファイル1 作成]→[ディレクトリ1 作成]→[ファイル2 作成] という複数のファイルシステム上の操作をアトミックに…
ターミナルサービス上の指定した情報を取得するには、WTSQuerySessionInformation関数を用いる。WTSQuerySessionInformation関数のプロトタイプは、以下の通り。 BOOL WTSQuerySessionInformation( HANDLE hServer, //ターミナルサーバーのハンドル DWORD Se…
インポートアドレステーブルに書かれているモジュール名とそのモジュールに属する関数名を取得し表示する。 #include <windows.h> #include <tchar.h> #include <dbghelp.h> #include <string> #include <stdlib.h> #pragma comment(lib, "dbghelp.lib") int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANC</stdlib.h></string></dbghelp.h></tchar.h></windows.h>…
インポートアドレステーブル(IAT)に書かれているモジュール名を取得し、表示する。 #include <windows.h> #include <tchar.h> #include <dbghelp.h> #include <string> #pragma comment(lib, "dbghelp.lib") int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine</string></dbghelp.h></tchar.h></windows.h>…
ターミナルサービスセッションをログオフするには、WTSLogoffSession関数を用いるWTSLogoffSession関数のプロトタイプは、以下の通り BOOL WTSLogoffSession( HANDLE hServer, //ターミナルサーバーのハンドル DWORD SessionId, //セッションID BOOL bWait /…
ターミナルサービスセッションのデスクトップにメッセージボックスを表示するには、WTSSendMessage関数を使う。WTSSendMessage関数のプロトタイプ BOOL WTSSendMessage( HANDLE hServer, //ターミナルサーバーのハンドル DWORD SessionId, //セッションID LP…
プロセスIDからセッションIDを求めるには、ProcessIdToSessionId関数を用いる。ProcessIdToSessionId関数のプロトタイプ BOOL ProcessIdToSessionId( DWORD dwProcessId, //プロセスID [IN] DWORD *pSessionId //求めるセッションID [OUT] ); ProcessIdToSes…
ターミナルサーバー上のプロセスを終了させるには、WTSTerminateProcess関数を用いる。WTSTerminateProcess関数のプロトタイプ BOOL WTSTerminateProcess( HANDLE hServer, //ターミナルサーバーのハンドル DWORD ProcessId,//終了させるプロセスID DWORD Ex…
セッション情報(ウィンドウステーション、セッションID、状態)を列挙するには、ターミナルサービスAPIのWTSEnumerateSessions関数を用いる。 BOOL WTSEnumerateSessions( HANDLE hServer, //ターミナルサーバーのハンドル(WSTOpenSeverで取得する) DWORD R…
起動中のプロセスの情報(プロセス名、プロセスID、セッションID)を列挙するには、ターミナルサービスAPIのWTSEnumerateProcesses関数を用いる。WTSEnumerateProcesses関数のプロトタイプ BOOL WTSEnumerateProcesses( HANDLE hServer, //ターミナルサーバ…
アセンブリ言語ソース: A〜Zまでの文字を標準出力に出力する(ファイル名:putaz.sm) bits 16 org 0x100 mov cx, 1Ah mov dl, 41h putchar: mov ah, 02h int 21h inc dl loop putchar mov ah, 4ch mov al, 00h int 21hアセンブル D:\nasm>nasm -fbin putaz.asm…
標準入力から文字を入力し、その次の文字を表示するソース1コード(エコーなし入力) bits 16 org 0x100 mov ah, 08h int 21h inc al mov ah, 02h mov dl, al int 21h mov ah, 4ch mov al, 0 int 21hアセンブル D:\nasm>nasm -fbin inputchar.asm -o a.com実…
アセンブリ言語ソース: 「Hello World!」と標準出力に出力する。(ファイル名:puts.asm) bits 16 org 0x100 mov ah, 09h mov dx, msg int 21h mov ah, 4ch mov al, 0 int 21h msg db "Hello, World!$"アセンブル D:\nasm>nasm -fbin puts.asm -o a.com実行 D:…
標準出力に「A」を出力するアセンブリ言語ソースコード(ファイル名:putchar.asm) mov ah, 02h mov dl, 41h int 21h mov ah, 4ch mov al, 0 int 21h アセンブル D:\nasm>nasm -fbin putchar.asm -o a.com実行 D:\nasm>a.com A