読者です 読者をやめる 読者になる 読者になる

RasEntryDlg

RasEntryDlgは、VPNやダイアルアップ接続エントリーの作成・編集ダイアログを表示する・・・。RasEntryDlg 関数今回は、VPN接続のためにRasEntryDlgで電話帳エントリーの作成を行う・・・。今回はWin32プロジェクト・・・。RasEntryDlg.cppを追加したら、ras…

ServiceMain

今回はWindowsのシステムサービスを作る・・・。ServiceMainは、このサービスのメイン処理を担う部分・・・。ServiceMain 関数まず、コンソールアプリケーションで作成・・・。 (Win32プロジェクトでもできるが、コンソールアプリだと疑似サービスを作成して…

CreateNamedPipe

Windowsで名前付きパイプを作成するには、CreateNamedPipeを使う・・・。CreateNamedPipe 関数名前なしパイプと比べると、あそこまで大変ではない・・・。CreateNamedPipeプロジェクトにCreateNamedPipe.cppを追加し、CreateNamedPipeで"\\.\pipe\TEST"とい…

CreatePipe

Windowsで名前なしパイプを作成するには、CreatePipeを使う・・・。CreatePipe 関数WindowsAPIにはforkが無いし、パイプの扱い方もUNIXとは違うので、パイプによるプロセス間通信の実装は結構難しい・・・。C言語CreatePipeメモ(Hishidama's Windows C "Crea…

ReportEvent

ReportEventは、イベントログにメッセージを書き込む・・・。ReportEvent 関数イベントログの出力はちゃんとやろうとすると結構面倒なので、今回は割と単純にログ出力するだけ・・・。まず、TCHAR *型の文字列バッファポインタptszTextを宣言し、newでメモリ…

RegCreateKey

RegCreateKeyは、指定のレジストリキー(regedit.exeで見るとフォルダの部分)を作成する・・・。RegCreateKey 関数 RegCreateKey function (Windows)互換性のために残されているだけなので、RegCreateKeyExを推奨するが、とりあえずキーを作成してみる・・・。…

WlanEnumInterfaces

WiFi関連の操作をしたい場合は、Native WiFi APIを使う・・・。Native Wifi (Windows) Wireless LAN API - 目次 - 汁ごはん中でも、WlanEnumInterfacesは、無線LANインターフェース情報の一覧を列挙する・・・。 (Windows XP3からなので、場合によってはWind…

GetInterfaceInfo

ネットワークインターフェース情報を取得するには、IPヘルパーAPI(iphlpapi.lib)を使う・・・。 GetInterfaceInfoは、ネットワークインターフェースを取得する・・・。GetInterfaceInfo function (Windows)といっても、これはインタフェースの名前とインデッ…

CreateRectRgn

これまで、図形を描画するのにRectangleのような描画APIを使ってきた・・・。 他にも楕円を描くEllipseや、多角形を描くPolygonとかがあるが、この図形そのものをハンドルを持つ1つのオブジェクトとして表示する方法もある・・・。 画面上に置けるこの図形の…

RegisterClassEx

RegisterClassExは、ウィンドウクラスを登録するWindowsAPI・・・。RegisterClassEx 関数この関数で登録する構造体はWNDCLASSEXとなる・・・。 WNDCLASSとの違いは、構造体のサイズを指定するところと、大きなアイコンとは別に小さなアイコンを設定できると…

CreateWindowEx

CreateWindowExは、ウィンドウを作成するWindowsAPI・・・。CreateWindowEx 関数CreateWindowとの違いは、第1引数に拡張スタイルを指定できることである・・・。今回は、メインウィンドウの中に、"STATIC"ウィンドウクラスの子ウィンドウを作成し、その子ウ…

CommandLineToArgvW

CommandLineToArgvWは、GetCommandLineなどで取得した1つのコマンドライン引数文字列を分解して、複数の引数文字列配列へのポインタや、引数の数を返すWindowsAPI・・・。CommandLineToArgvW 関数GetCommandLineで取得した引数文字列は、スペースを含んだ生…

GetCommandLine

GetCommandLineは、コマンドライン引数文字列を取得するWindowsAPI・・・。GetCommandLine 関数_tWinMain関数のlpCmdLineにもコマンドライン引数文字列は格納されているが、実行ファイル名が含まれていない・・・。 実行ファイル名を含めたコマンドライン引…

LoadBitmap

LoadBitmapは、ビットマップをロードするWindowsAPI・・・。LoadBitmap 関数LoadImageよりもレガシーで、こちらはリソース登録したビットマップやシステム既定のビットマップしか読み込めず、ビットマップファイルからは読み込めない・・・。 これも互換性の…

BITMAP

ビットマップをリソースに登録することで、実際のビットマップファイルがなくても、実行ファイルに埋め込まれたビットマップファイルをロードして表示などが出来る・・・。resource.hは、BITMAP.rcは、とする・・・。 でbitmap1.bmpをBITMAP.rcと同じ場所に…

OpenEvent

OpenEventは、イベントを開くWindowsAPI・・・。OpenEvent 関数今度は、とある処理が行われたら、手動でシグナル状態や非シグナル状態にすることで、同期を取る方法・・・。イベント名は"Event"とする・・・。手動で非シグナル状態に戻すので、イベントを作…

OpenSemaphore

OpenSemaphoreは、セマフォを開くWindowsAPI・・・。OpenSemaphore 関数クリティカルセクション、ミューテックスは1つしか同時に実行できなかったが、 セマフォは指定した数までは同時に実行でき、それを超えるとどれかのスレッドが終わらない限り待つという…

OpenMutex

OpenMutexは、ミューテックスを開くWindowsAPI・・・。OpenMutex 関数pthreadのミューテックは、スレッド間でミューテックスオブジェクトを共有し、それらをロックして使うような形だった・・・。 Win32スレッドのミューテックスは、名前をキーにしてミュー…

EnterCriticalSection

EnterCriticalSectionは、排他制御する領域の開始位置であることを示すWindowsAPI・・・。EnterCriticalSection 関数クリティカルセクションは、phtreadにおけるミューテックスと同じような使い方・・・。 CRITICAL_SECTION型変数をスレッド間で共有し、ある…

WaitForMultipleObjects

WaitForMultipleObjectsは、複数のオブジェクトがシグナル状態になるまで待つWindowsAPI・・・。WaitForMultipleObjects 関数第1引数にスレッドの数、第2引数にスレッドハンドル配列・・・。 すべてのスレッドがシグナル状態になった時に待ち状態を解除した…

WaitForSingleObject

WaitForSingleObjectは、指定されたオブジェクトがシグナル状態になるまで待つWindowsAPI・・・。WaitForSingleObject 関数ここでいうオブジェクトは、スレッドに限らず、プロセスやイベントなどさまざまなものがある・・・。 シグナル状態というは、スレッ…

TerminateThread

TerminateThreadは、スレッドを強制終了させるWindowsAPI・・・。TerminateThread 関数TerminateProcess同様、緊急時に使うものなので、滅多な事では使ってはいけない・・・。1秒ごとに出力、それを5回繰り返すので、5秒は待っていなければいけないが、今回…

ExitThread

ExitThreadは、スレッドを終了させるWindowsAPI・・・。ExitThread 関数returnで終了コードを指定してもスレッドは終了するが、スレッド終了関数としてExitThreadもある・・・。ExitThreadに差し替えて、引数に終了コードを渡しただけ・・・。 i = 1, m_iNo …

GetExitCodeThread

GetExitCodeThreadは、スレッドの終了コードを取得するWindowsAPI・・・。GetExitCodeThread 関数これで終了コードを取得する・・・。戻り値の終了コードをスレッド番号m_iNoにしておく・・・。m_iNoにスレッド番号をセットして、CreateThread・・・。 戻り…

ThreadProc

スレッドに渡す関数ThreadProcには、引数を渡すことももちろんできる・・・。ThreadProc 関数引数の受け渡しは、LPVOID型(void *型ポインタ)を介して行われるので、THREAD_PARAMというパラメータを集めた構造体を用意しておく・・・。 メンバは、スレッド番…

CreateThread

CreateThreadは、スレッドを生成するWindowsAPI・・・。CreateThread 関数第1引数はNULL、第2引数は0、でおいといて、第3引数にスレッドで実行する処理関数(pthreadのstart_routine)、第4引数にその関数に渡す引数、第5引数にオプションフラグ、第6引数にス…

ShellExecute

ShellExecuteは、指定されたファイルに指定されたコマンドを実行するWindowsAPI・・・。ShellExecute 関数CreateProcessはプロセスを生成するという意味合いが強いが、こちらはコマンドプロンプトでコマンドを実行するという意味合いが強い・・・。 なので、…

TerminateProcess

TerminateProcessは、プロセスを強制終了させるWindowsAPI・・・。TerminateProcess 関数このAPIは、緊急時に使うもので、滅多な事では使ってはいけない・・・。 (正常終了ではないので、元のプロセスのメモリや、リソースなどがリークする可能性があるため…

GetExitCodeProcess

GetExitCodeProcessは、プロセスの終了コードを取得するWindowsAPI・・・。GetExitCodeProcess 関数これでSubProcessの終了コードを取得する・・・。SubProcess.cppでは、ExitProcess(10)で終了コードを10としている・・・。 30秒で終了する・・・。MainProc…

ExitProcess

ExitProcessは、プロセスを終了するWindowsAPI・・・。ExitProcess 関数引数には終了コードを指定する・・・。 きちんとした形で内側からプロセスを終了する場合にこれを使う・・・。MainProcessは前回と変わらない・・・。一方、SubProcessは、"SubProcess …

CreateProcess

CreateProcessは、プロセスを作成するWindowsAPI・・・。CreateProcess 関数MainProcessプロジェクトとSubProcessプロジェクトを作成し、MainProcess側からCreateProcessを使ってSubProcessを実行するようにしてみる・・・。MainProcess側は、"MainProcess S…

WSAPoll

WSAPollは、複数のファイルディスクリプタを監視するWindowsAPI・・・。WSAPoll function (Windows)UNIX系OSのpollに当たるが、pollという関数は無く、これを使う・・・。 WSAPOLLFDは、UNIX系OSのpollfdに当たる・・・。 また、この関数自体Vistaから登場し…

select

selectは、複数のファイルディスクリプタを監視し、なんらかの状態変化が発生した場合に、この関数を抜けることで知らせるWindowsAPI・・・。select function (Windows)UNIX系OS同様にWindowsでも、これでマルチセッションが出来る・・・。 サーバ側はselect…

send

sendは、接続先サーバにデータを送信するWindowsAPI・・・。send function (Windows)サーバ側はrecvプロジェクト、クライアント側はsendプロジェクトとし、 サーバ側は、"end"ならこの受信ループを抜け、そうでないならrecvで読み込んだbufを出力・・・。ク…

WSASend

WSASendは、接続先サーバにデータを送信するWindowsAPI・・・。WSASend function (Windows)サーバ側はWSARecvとし、クライアント側はWSASendプロジェクトを作成・・・。サーバ側は、WSARecvで読み込んだ文字列が"end"だったら、ループを抜けて、アクセプトソ…

connect

connectは、指定のアドレスのサーバに接続するWindowsAPI・・・。connect function (Windows)こちらはUNIX系OSのconnectと同様に使うタイプ・・・。クライアント側はconnectプロジェクトを作成し、サーバ側は以前作成したntohsプロジェクトのものを使う・・…

WSAConnect

WSAConnectは、指定のアドレスのサーバに接続するWindowsAPI・・・。WSAConnect function (Windows)これまではtelnetでサーバに接続していたが、それでは入力に問題があるため、WSAConnectで接続するクライアントを作る・・・。2つプロジェクトを作る・・・…

gethostbyname

gethostbynameは、ホスト名からIPアドレスなどのホスト情報を取得するWindowsAPI・・・。gethostbyname function (Windows)このようにhostent構造体ポインタhostにホスト情報が返ってくるので、IPアドレスを出力・・・。 WSAStartup success! hostname: loca…

recv

recvは、アクセプトした相手から送られてきたデータを受信するWindowsAPI・・・。recv function (Windows)WSARecvだとWSABUF構造体を用意する必要があったが、こちらは、char型配列bufだけでいい・・・。 WSAStartup success! soc = 124 port = 0fa0, ns_por…

WSARecv

WSARecvは、アクセプトした相手から送られてきたデータを受信するWindowsAPI・・・。WSARecv function (Windows)面倒なのは、WSABUF構造体を使わなければならないということ・・・。WSABUF構造体のwsaBuf, BYTE型配列btBuf, DWORDのdwRecvLen, dwFlagsなどが…

ntohs

ntohsは、ネットワークバイトオーダなポート番号などを、ホストバイトオーダの値に変換するWindowsAPI・・・。ntohs function (Windows)UNIX系OSのntohsと同様の使い方・・・。これで相手側のポートを出力してみる・・・。 WSAStartup success! soc = 124 po…

WSANtohs

WSANtohsは、ネットワークバイトオーダなポート番号などを、ホストバイトオーダの値に変換するWindowsAPI・・・。WSANtohs function (Windows)sockaddr_in構造体のsin_portに相手側が使用しているポート番号がネットワークバイトオーダで格納されているので…

inet_ntoa

inet_ntoaは、ネットワークバイトオーダのIPアドレスをIPアドレス文字列に変換するWindowsAPI・・・。inet_ntoa function (Windows)sockaddr_in構造体のsin_addrにネットワークバイトオーダのIPアドレスが格納されているので、このようにIPアドレス文字列を…

accept

acceptは、接続を受け付けるWindowsAPI・・・。accept function (Windows)UNIX系OSのacceptと同じように・・・。で実行して、 WSAStartup success! soc = 124 port = 0fa0, ns_port = a00f setsockopt(SO_REUSEADDR) success. bind Success. listen success.…

WSAAccept

WSAAcceptは、接続を受け付けるWindowsAPI・・・。WSAAccept function (Windows)UNIX系OSのacceptと比べると、第4、第5引数が違う・・・。 とりあえずはNULLにしておいても問題ない・・・。sockaddr_in構造体のsaiClientAddrと長さのiClientAddrLenを用意し…

listen

listenは、接続を待ち受けるWindowsAPI・・・。listen function (Windows)UNIX系OSのlistenと同じ使い方でリッスンできる・・・。これでリッスンしてみる・・・。 WSAStartup success! soc = 124 port = 0fa0, ns_port = a00f setsockopt(SO_REUSEADDR) succ…

setsockopt

setsockoptは、ソケットのオプションを設定するWindowsAPI・・・。setsockopt function (Windows)これでSO_REUSEADDRをセットして、繰り返しbindできるように・・・。optvalに1をセットしておいて、bind前にsetsockopt・・・。 WSAStartup success! soc = 12…

bind

bindは、作成したソケットとアドレス情報をバインドするWindowsAPI・・・。bind function (Windows)bindについては、WSA系の関数がないので、UNIX系OSのbind同様に使うことができる・・・。ただ、sockaddr_in構造体の、のところがUNIX系OSのそれとはちょっと…

htons

htonsは、ホストバイトオーダからネットワークバイトオーダに変換するWindowsAPI・・・。htons function (Windows)UNIX系OSのhtons同様に使うことができる・・・。これだったら、socはいらない・・・。 WSAStartup success! soc = 124 port = 0fa0, ns_port …

WSAHtons

WSAHtonsは、ホストバイトオーダからネットワークバイトオーダに変換するWindowsAPI・・・。WSAHtons function (Windows)第2引数にポート番号の値を指定すると、第3引数に渡した変数にポート番号のネットワークバイトオーダの値を格納してくれる・・・。この…