Win32API SRWLock

Windows VistaからSRWLock(Slim Reader/Writer Lock)が導入された。 目的はクリティカルセクションと同じだが、共有ロックと排他ロックを別々に適用することで、パフォーマンスが向上を図ることができるところがメリットになる。 SRWLockに関する主な関数に…

Win32API 新しいスレッドプール タイマーオブジェクトのAPI

Windows Vistaで新たに追加されたスレッドプールのタイマーオブジェクトのAPIを使う。タイマーオブジェクトは、指定した期限に達したときにコールバック関数を呼び出すために使用する。 まず、CreateThreadpoolTimer関数でスレッドプールタイマーオブジェク…

Win32API 例外ハンドラ SetUnhandledExceptionFilter

SetUnhandledExceptionFilter関数で例外ハンドラを登録しておくと、プログラムでAccessViolationなどの例外が発生したときに、登録した例外ハンドラが呼び出される。使用例main関数の最初に、SetUnhandledExceptionFilterで例外ハンドラを登録する。その直後…

Win32API ダブルクリック時間を取得、設定する

ダブルクリック時間を取得するにはGetDoubleClickTime関数を、設定するにはSetDoubleClickTime関数を用いる。 GetDoubleClickTime関数とSetDoubleClickTime関数の使用例は、以下の通り このプログラムは、まず現在設定されているダブルクリック時間を取得し…

Win32API ディスプレイモニターの情報を取得する

ディスプレイモニターの情報を取得するには、GetMonitorInfo関数を用いる。GetMonitorInfo関数のプロトタイプは、以下の通り BOOL GetMonitorInfo( _In_ HMONITOR hMonitor, _Out_ LPMONITORINFO lpmi );第一引数の hMonitor はディスプレイモニターのハンド…

Win32API Windowsサービスアプリケーションの開発

Windowsサービスアプリケーションの開発を行う。まず、アプリケーションをサービス制御マネージャのデータベースに登録するところから行う。使用する主なAPIは、OpenSCManager関数とCreateService関数である。 アプリケーションをサービス制御マネージャのデ…

C#でSSL(サーバー証明書の検証あり版)

C#でSSL通信を行う。サーバー証明書の検証も行う。 例として、インターネット上のWebサーバーとSSL通信を行う。 手順は、以下のようになる。 1Webサーバー名からWebサーバーのIPアドレスをDNSでルックアップ 2TcpClientを用いて、Webサーバーの443番ポートに…

C#でSSL(サーバー証明書の検証なし版)

C#でSSL通信を行う。例として、インターネット上のWebサーバーとSSL通信を行う。ここでは、問題を単純にするためサーバー証明書の検証は行わない。 手順は、以下のようになる。 1Webサーバー名からWebサーバーのIPアドレスをDNSでルックアップ 2TcpClientを…

Win32API 新しいスレッドプール

Windows Vistaで追加されたスレッドプールの特徴のひとつとして、従来のQueueUserWorkItem関数ではコールバック関数が終了したことを、スレッド起動側が知ることができなかったのが、新しいスレッドプールでは、コールバック関数の終了を知ることができるよ…

Win32 API キーストロークメッセージをフックする

キーストロークメッセージをフックをするためには、SetWindowsHookEx関数を使う。 SetWindowsHookExのプロトタイプ HHOOK SetWindowsHookEx( int idHook, // フックタイプ HOOKPROC lpfn, // フックプロシージャ HINSTANCE hMod, // アプリケーションインス…

Win32API ウィンドウの情報を取得する GetWindowInfo

ウィンドウの情報を得るには、GetWindowInfo関数を用いる。 GetWindowInfo関数のプロトタイプは、以下の通り。 BOOL GetWindowInfo( HWND hwnd, PWINDOWINFO pwi );第二引数のWINDOWINFO構造体は、WinUser.h にて、以下のように定義されている。 typedef str…

Win32API 既定のプリンタのプリンタ名を取得する

ローカルコンピュータ上の、既定のプリンタのプリンタ名を取得するには、GetDefaultPrinter関数を使用する。この関数は、[コントロールパネル]→[ハードウェアとサウンド]→[デバイスとプリンター]で表示されている[プリンタとFAX](Windows 7の場合)で、通常…

Win32API ウィンドウを移動させる MoveWindow

MoveWindow関数で、ウィンドウの位置や大きさを設定することができる。MoveWindow関数のプロトタイプ BOOL MoveWindow( HWND hWnd, // ウィンドウのハンドル int X, // 横方向の位置 int Y, // 縦方向の位置 int nWidth, // 幅 int nHeight, // 高さ BOOL bR…

Win32API ウィンドウの表示状態を設定する ShowWindow

ウィンドウは、ShowWindow関数により、プログラムから表示・非表示などの状態を切り替えることができる。 ShowWindow関数のプロトタイプ BOOL ShowWindow( HWND hWnd, // ウィンドウのハンドル int nCmdShow // 表示状態 );ShowWindow関数の第二引数nCmdShow…

Win32API ウィンドウを列挙する EnumWindows

ウィンドウを列挙するのは、FindWindowExでも可能だが、EnumWindowsの方が簡単。 EnumWindowsのプロトタイプ BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // コールバック関数 LPARAM lParam // アプリケーション定義の値 ); EnumWindows関数を用いて、ウィ…

Win32API ウィンドウを検索する FindWindowEx

Windowsのデスクトップ上のウィンドウを検索するには、FindWindowEx関数を使う。FindWindowExのプロトタイプ HWND FindWindowEx( HWND hwndParent, // 親ウィンドウのハンドル HWND hwndChildAfter, // 子ウィンドウのハンドル LPCTSTR lpszClass, // クラス…

Win32 API トランザクションNTFSを使って、ファイル操作をアトミックにする CreateTransaction

Windows Vistaから搭載されたTransactional NTFSという機能で、ファイル操作に対してトランザクション処理を行えるようになりました。 例えば、[ファイル1 作成]→[ディレクトリ1 作成]→[ファイル2 作成] という複数のファイルシステム上の操作をアトミックに…

WIn32API ターミナルサービス上の情報を取得する WTSQuerySessionInformation

ターミナルサービス上の指定した情報を取得するには、WTSQuerySessionInformation関数を用いる。WTSQuerySessionInformation関数のプロトタイプは、以下の通り。 BOOL WTSQuerySessionInformation( HANDLE hServer, //ターミナルサーバーのハンドル DWORD Se…

Win32API インポートアドレステーブルに書かれているモジュール名及び関数名を取得する

インポートアドレステーブルに書かれているモジュール名とそのモジュールに属する関数名を取得し表示する。 #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>…

Win32API インポートアドレステーブルに書かれているモジュール名を取得する

インポートアドレステーブル(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>…

WIn32API ターミナルサービスセッションをログオフする

ターミナルサービスセッションをログオフするには、WTSLogoffSession関数を用いるWTSLogoffSession関数のプロトタイプは、以下の通り BOOL WTSLogoffSession( HANDLE hServer, //ターミナルサーバーのハンドル DWORD SessionId, //セッションID BOOL bWait /…

Win32 ターミナルサービスセッションのデスクトップにメッセージボックスを表示する

ターミナルサービスセッションのデスクトップにメッセージボックスを表示するには、WTSSendMessage関数を使う。WTSSendMessage関数のプロトタイプ BOOL WTSSendMessage( HANDLE hServer, //ターミナルサーバーのハンドル DWORD SessionId, //セッションID LP…

WIn32API プロセスIDからセッションIDを求める

プロセスIDからセッションIDを求めるには、ProcessIdToSessionId関数を用いる。ProcessIdToSessionId関数のプロトタイプ BOOL ProcessIdToSessionId( DWORD dwProcessId, //プロセスID [IN] DWORD *pSessionId //求めるセッションID [OUT] ); ProcessIdToSes…

WIn32API ターミナルサーバー上のプロセスを終了させる

ターミナルサーバー上のプロセスを終了させるには、WTSTerminateProcess関数を用いる。WTSTerminateProcess関数のプロトタイプ BOOL WTSTerminateProcess( HANDLE hServer, //ターミナルサーバーのハンドル DWORD ProcessId,//終了させるプロセスID DWORD Ex…

WIn32API セッション情報を列挙する

セッション情報(ウィンドウステーション、セッションID、状態)を列挙するには、ターミナルサービスAPIのWTSEnumerateSessions関数を用いる。 BOOL WTSEnumerateSessions( HANDLE hServer, //ターミナルサーバーのハンドル(WSTOpenSeverで取得する) DWORD R…

Win32API 起動中プロセスの情報(プロセス名、プロセスID、セッションID)を列挙する

起動中のプロセスの情報(プロセス名、プロセスID、セッションID)を列挙するには、ターミナルサービスAPIのWTSEnumerateProcesses関数を用いる。WTSEnumerateProcesses関数のプロトタイプ BOOL WTSEnumerateProcesses( HANDLE hServer, //ターミナルサーバ…

nasm アセンブリ言語でAからZまで一気に標準出力に出力する

アセンブリ言語ソース: 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…

nasm アセンブリ言語で標準入力から1文字入力

標準入力から文字を入力し、その次の文字を表示するソース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実…

nasm アセンブリ言語で文字列を標準出力に出力する

アセンブリ言語ソース: 「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:…

nasm アセンブリ言語で1文字を標準出力に出力する

標準出力に「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