Win32 API DLLの動的ロード

プログラム実行中の任意のタイミングでDLLをロードする際には、LoadLibrary関数を用いる。さらにDLLに含まれる関数を実行するには、GetProcAddressで関数アドレスを取得する必要がある。 Win32APIの呼出規約は WINAPI(stdcall)である。そのため、GetProcAddr…

WIn32API Windowsサービスのセキュリティ情報を取得する QueryServiceObjectSecurity

Windowsサービスは、プロセスやファイルなどと同様にセキュリティ記述子を持っている。そして、このセキュリティ記述子は、QueryServiceObjectSecurity関数で取得することが可能である。QueryServiceObjectSecurity関数のプロトタイプは、以下のとおり。 BOO…

Win32 Windowsサービスを開始する StartService

Windowsサービスを開始するには、StartService関数を用いる。 StartService関数のプロトタイプは以下のとおり。 BOOL StartService( SC_HANDLE hService, // サービスのハンドル DWORD dwNumServiceArgs, // 引数の数 LPCTSTR *lpServiceArgVectors // 複数…

WIn32API Windowsサービスの依存関係を調査する EnumDependentServices

指定したWindowsサービスに依存しているWindowsサービス(システムコンポーネント)を列挙するには、EnumDependentServices関数を用いる。EnumDependentServices関数のプロトタイプは、以下のとおり。 BOOL EnumDependentServices( SC_HANDLE hService, // …

Win32API サービスの表示名に関連付けられているサービス名を取得する GetServiceKeyName

サービスの表示名に関連付けられているサービス名を取得するには、GetServiceKeyName関数を取得する。「サービスの表示名」とは、以下のサービスのプロパティダイアログの赤枠で囲まれた文字列である。 GetServiceKeyName関数のプロトタイプは、以下のように…

WIn32API Windowsサービスの状態を取得する QueryServiceStatus

Windowsサービスの状態を取得するには、QueryServiceStatus関数を用いる。QueryServiceStatus関数のプロトタイプは以下のとおり BOOL QueryServiceStatus( SC_HANDLE hService, // サービスのハンドル LPSERVICE_STATUS lpServiceStatus // サービスのステー…

Win32 Windowsサービスを制御する ControlService

Windowsサービスの状態を制御するには、ControlService関数を用いる。ControlService関数のプロトタイプは以下のとおり。 BOOL ControlService( SC_HANDLE hService, // サービスのハンドル DWORD dwControl, // 制御コード LPSERVICE_STATUS lpServiceStatu…

WIn32API サービスの状態を列挙する EnumServicesStatus

Windowsサービスの状態を列挙するには、EnumServiceStatus関数を用いる。EnumServiceStatus関数のプロトタイプは以下のとおり BOOL EnumServicesStatus( SC_HANDLE hSCManager, // SCM データベースのハンドル DWORD dwServiceType, // サービスタイプ DWORD…

WIn32API Windowsサービスのサービス名から表示名を取得する

サービス名から表示名を取得するには、GetServiceDisplayName関数を用いる。GetServiceDisplayName関数のプロトタイプは以下のとおり BOOL GetServiceDisplayName( SC_HANDLE hSCManager, // SCM データベースのハンドル LPCTSTR lpServiceName, // サービス…

Win32 サービスの構成パラメータを取得する QueryServiceConfig

Windowsサービスの構成パラメータを取得するには、QueryServiceConfig関数を用いる。QueryServiceConfig関数のプロトタイプは以下のとおり。 BOOL QueryServiceConfig( SC_HANDLE hService, // サービスのハンドル LPQUERY_SERVICE_CONFIG lpServiceConfig, …

Visual StudioデバッガのウォッチでGetLastError関数の戻り値を常時監視する

Visual Studioのデバッガの機能でウォッチというものがあります。 ウォッチはデバッグ中に指定した変数を常時監視するために用いられる機能です。 この機能を用いて、GetLastError関数の戻り値を常時監視することができます。その方法は、ウォッチに「@err」…

C言語 ポインタ

このコードは正しいC言語。 #include <stdio.h> int main() { int a[3]; 0[a] = 0; *(a + 1) = 1; *(2 + a) = 2; for (int i = 0; i < 3; i++) { printf("%d, %d, %d, %d\n", a[i], i[a], *(a+i), *(i+a)); } return 0; }実行結果 0, 0, 0, 0 1, 1, 1, 1 2, 2, 2, 2</stdio.h>

WIn32API リモートPCのレジストリにアクセスする

リモートPCのレジストリにアクセスするには、RegConnectRegistry関数を用いるRegConnectRegistryプロトタイプ LONG RegConnectRegistry( LPCTSTR lpMachineName, // コンピュータ名 HKEY hKey, // 定義済みのレジストリハンドル PHKEY phkResult // リモート…

WIn32API レジストリキー、エントリ、データを一度に作成する RegSetKeyValue

レジストリキー、エントリ、データを一度に作成するには、 RegSetKeyValue関数を用いる RegSetKeyValue関数のプロトタイプは、以下のとおり LONG WINAPI RegSetKeyValue( __in HKEY hKey,//レジストリキーのハンドル __in_opt LPCTSTR lpSubKey, //サブキー…

WIn32API レジストリの変更を検知する RegNotifyChangeKeyValue

レジストリキーの属性やエントリが変更されたことを検知するためには、RegNotifyChangeKeyValue関数を用いる。 RegNotifyChangeKeyValue関数は、レジストリが変更されたことをアプリケーションに通知してくれる。RegNotifyChangeKeyValue関数のプロトタイプ…

WIn32API レジストリエントリのデータとデータ型を取得する RegQueryValueEx

レジストリエントリのデータとデータ型を取得するには、 RegQueryValueEx関数を用いるRegQueryValueEx関数のプロトタイプは以下のとおり LONG RegQueryValueEx( HKEY hKey, // キーのハンドル LPCTSTR lpValueName, // レジストリエントリ名 LPDWORD lpReser…

Win32API レジストリエントリにエントリ名とデータをセットする RegSetValueEx

レジストリエントリにエントリ名とデータをセットするには RegSetValueEx関数を用いるRegSetValueExのプロトタイプは、以下のとおり。 LONG RegSetValueEx( HKEY hKey, // 親キーのハンドル LPCTSTR lpValueName, // レジストリエントリ名 DWORD Reserved, /…

Win32 レジストリエントリを列挙する

レジストリエントリを列挙するには、RegEnumValue関数を用いる RegEnumValue関数のプロトタイプは以下のとおり。 LONG RegEnumValue( HKEY hKey, // 問い合わせ対象のキーのハンドル DWORD dwIndex, // 取得するべきレジストリエントリのインデックス番号 LP…

WIn32API レジストリエントリを削除する RegDeleteValue

レジストリエントリを削除するには、RegDeleteValue関数を用いる LONG RegDeleteValue( HKEY hKey, // キーのハンドル LPCTSTR lpValueName // レジストリエントリ名 );例として、以下の図ように「HKEY_CURRENT_USER\test」にセットしてあるエントリ「Value…

WIn32API レジストリキーを削除する RegDeleteKey

レジストリキーを削除するには、RegDeleteKeyEx関数を用いる。プロトタイプは、以下のとおり。 LONG WINAPI RegDeleteKeyEx( __in HKEY hKey, __in LPCTSTR lpSubKey, __in REGSAM samDesired, __reserved DWORD Reserved ); 例として、「HKEY_CURRENT_USER\…

Win32API レジストリにキーを作成する RegCreateKeyEx

レジストリキーを作成するには、RegCreateKeyEx関数を用いる。 RegCreateKeyEx関数は、レジストリキーが存在しなければ作成し、既に存在していればレジストリキーをオープンするRegCreateKeyEx関数のプロトタイプは、以下のとおり。 LONG RegCreateKeyEx( HK…

WIn32API レジストリキーを列挙する RegEnumKeyEx

レジストリキーを列挙するには、RegEnumKeyEx関数を用いる。 LONG RegEnumKeyEx( HKEY hKey, // 列挙するべきキーのハンドル DWORD dwIndex, // サブキーのインデックス番号 LPTSTR lpName, // サブキー名が格納されるバッファ LPDWORD lpcName, // サブキー…

Win32API レジストリエントリを列挙する RegEnumValue

レジストリキーに所属するレジストリエントリを列挙するには、RegEnumValue関数を用いる LONG RegEnumValue( HKEY hKey, // 問い合わせ対象のキーのハンドル DWORD dwIndex, // 取得するべきレジストリエントリのインデックス番号 LPTSTR lpValueName, // レ…

エイプリルフール Google Map

2012年エイプリルフールの思い出に

C# 配列の要素からk番目の値を求めるアルゴリズム

配列の要素からk番目の値(k番目に小さい値)を求める。 k番目の「k」はもちろんゼロ起源である。 using System; public class Program { private static void Swap(ref Int32 x, ref Int32 y) { Int32 tmp = x; x = y; y = tmp; } private static Int32 Par…

C# 二分探索木

ごく一般的な二分探索木のC#による実装。AVL木のようにバランスはしない。 using System; public sealed class Node<TKey, TValue> where TKey : IComparable<TKey> { private TKey key; private TValue value; private Node<TKey, TValue> left; private Node<TKey, TValue> right; public Node(TKey key, TV</tkey,></tkey,></tkey></tkey,>…

C# クイックソートと二分挿入ソートの組み合わせによるソート

クイックソートの分割配列が一定の要素数になったら挿入ソートに切り替えることにより、クイックソートを高速化する手法があるが、ここでは挿入ソートではなく二分挿入ソートで実装した。 using System; using System.Collections.Generic; class Program { …

C# クイックソートと挿入ソートの組み合わせによるソート

クイックソートの分割配列が一定の要素数になったら挿入ソートに切り替えることにより、クイックソートを高速化する手法の実装である。 using System; using System.Collections.Generic; class Program { private static void Swap<T>(ref T a, ref T b) { T t</t>…

C# 基数ソート

using System; using System.Collections.Generic; public static class Program { public static void RadixSort(ref Int32[] a) { const Int32 M = ushort.MaxValue; const Int32 MASK = ushort.MaxValue; Int32[] f = new Int32[M + 1]; Int32[] b = new …

C# 分布数え上げソート

public static class Program { private static Int32 Max(Int32[] a) { Int32 max = Int32.MinValue; foreach (Int32 n in a) { if (n > max) { max = n; } } return max; } public static void CountSort(ref Int32[] a) { Int32 max = Max(a); Int32[] f …