プログラム実行中の任意のタイミングでDLLをロードする際には、LoadLibrary関数を用いる。さらにDLLに含まれる関数を実行するには、GetProcAddressで関数アドレスを取得する必要がある。 Win32APIの呼出規約は WINAPI(stdcall)である。そのため、GetProcAddr…
Windowsサービスは、プロセスやファイルなどと同様にセキュリティ記述子を持っている。そして、このセキュリティ記述子は、QueryServiceObjectSecurity関数で取得することが可能である。QueryServiceObjectSecurity関数のプロトタイプは、以下のとおり。 BOO…
Windowsサービスを開始するには、StartService関数を用いる。 StartService関数のプロトタイプは以下のとおり。 BOOL StartService( SC_HANDLE hService, // サービスのハンドル DWORD dwNumServiceArgs, // 引数の数 LPCTSTR *lpServiceArgVectors // 複数…
指定したWindowsサービスに依存しているWindowsサービス(システムコンポーネント)を列挙するには、EnumDependentServices関数を用いる。EnumDependentServices関数のプロトタイプは、以下のとおり。 BOOL EnumDependentServices( SC_HANDLE hService, // …
サービスの表示名に関連付けられているサービス名を取得するには、GetServiceKeyName関数を取得する。「サービスの表示名」とは、以下のサービスのプロパティダイアログの赤枠で囲まれた文字列である。 GetServiceKeyName関数のプロトタイプは、以下のように…
Windowsサービスの状態を取得するには、QueryServiceStatus関数を用いる。QueryServiceStatus関数のプロトタイプは以下のとおり BOOL QueryServiceStatus( SC_HANDLE hService, // サービスのハンドル LPSERVICE_STATUS lpServiceStatus // サービスのステー…
Windowsサービスの状態を制御するには、ControlService関数を用いる。ControlService関数のプロトタイプは以下のとおり。 BOOL ControlService( SC_HANDLE hService, // サービスのハンドル DWORD dwControl, // 制御コード LPSERVICE_STATUS lpServiceStatu…
Windowsサービスの状態を列挙するには、EnumServiceStatus関数を用いる。EnumServiceStatus関数のプロトタイプは以下のとおり BOOL EnumServicesStatus( SC_HANDLE hSCManager, // SCM データベースのハンドル DWORD dwServiceType, // サービスタイプ DWORD…
サービス名から表示名を取得するには、GetServiceDisplayName関数を用いる。GetServiceDisplayName関数のプロトタイプは以下のとおり BOOL GetServiceDisplayName( SC_HANDLE hSCManager, // SCM データベースのハンドル LPCTSTR lpServiceName, // サービス…
Windowsサービスの構成パラメータを取得するには、QueryServiceConfig関数を用いる。QueryServiceConfig関数のプロトタイプは以下のとおり。 BOOL QueryServiceConfig( SC_HANDLE hService, // サービスのハンドル LPQUERY_SERVICE_CONFIG lpServiceConfig, …
Visual Studioのデバッガの機能でウォッチというものがあります。 ウォッチはデバッグ中に指定した変数を常時監視するために用いられる機能です。 この機能を用いて、GetLastError関数の戻り値を常時監視することができます。その方法は、ウォッチに「@err」…
このコードは正しい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>
リモートPCのレジストリにアクセスするには、RegConnectRegistry関数を用いるRegConnectRegistryプロトタイプ LONG RegConnectRegistry( LPCTSTR lpMachineName, // コンピュータ名 HKEY hKey, // 定義済みのレジストリハンドル PHKEY phkResult // リモート…
レジストリキー、エントリ、データを一度に作成するには、 RegSetKeyValue関数を用いる RegSetKeyValue関数のプロトタイプは、以下のとおり LONG WINAPI RegSetKeyValue( __in HKEY hKey,//レジストリキーのハンドル __in_opt LPCTSTR lpSubKey, //サブキー…
レジストリキーの属性やエントリが変更されたことを検知するためには、RegNotifyChangeKeyValue関数を用いる。 RegNotifyChangeKeyValue関数は、レジストリが変更されたことをアプリケーションに通知してくれる。RegNotifyChangeKeyValue関数のプロトタイプ…
レジストリエントリのデータとデータ型を取得するには、 RegQueryValueEx関数を用いるRegQueryValueEx関数のプロトタイプは以下のとおり LONG RegQueryValueEx( HKEY hKey, // キーのハンドル LPCTSTR lpValueName, // レジストリエントリ名 LPDWORD lpReser…
レジストリエントリにエントリ名とデータをセットするには RegSetValueEx関数を用いるRegSetValueExのプロトタイプは、以下のとおり。 LONG RegSetValueEx( HKEY hKey, // 親キーのハンドル LPCTSTR lpValueName, // レジストリエントリ名 DWORD Reserved, /…
レジストリエントリを列挙するには、RegEnumValue関数を用いる RegEnumValue関数のプロトタイプは以下のとおり。 LONG RegEnumValue( HKEY hKey, // 問い合わせ対象のキーのハンドル DWORD dwIndex, // 取得するべきレジストリエントリのインデックス番号 LP…
レジストリエントリを削除するには、RegDeleteValue関数を用いる LONG RegDeleteValue( HKEY hKey, // キーのハンドル LPCTSTR lpValueName // レジストリエントリ名 );例として、以下の図ように「HKEY_CURRENT_USER\test」にセットしてあるエントリ「Value…
レジストリキーを削除するには、RegDeleteKeyEx関数を用いる。プロトタイプは、以下のとおり。 LONG WINAPI RegDeleteKeyEx( __in HKEY hKey, __in LPCTSTR lpSubKey, __in REGSAM samDesired, __reserved DWORD Reserved ); 例として、「HKEY_CURRENT_USER\…
レジストリキーを作成するには、RegCreateKeyEx関数を用いる。 RegCreateKeyEx関数は、レジストリキーが存在しなければ作成し、既に存在していればレジストリキーをオープンするRegCreateKeyEx関数のプロトタイプは、以下のとおり。 LONG RegCreateKeyEx( HK…
レジストリキーを列挙するには、RegEnumKeyEx関数を用いる。 LONG RegEnumKeyEx( HKEY hKey, // 列挙するべきキーのハンドル DWORD dwIndex, // サブキーのインデックス番号 LPTSTR lpName, // サブキー名が格納されるバッファ LPDWORD lpcName, // サブキー…
レジストリキーに所属するレジストリエントリを列挙するには、RegEnumValue関数を用いる LONG RegEnumValue( HKEY hKey, // 問い合わせ対象のキーのハンドル DWORD dwIndex, // 取得するべきレジストリエントリのインデックス番号 LPTSTR lpValueName, // レ…
2012年エイプリルフールの思い出に
配列の要素から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#による実装。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,>…
クイックソートの分割配列が一定の要素数になったら挿入ソートに切り替えることにより、クイックソートを高速化する手法があるが、ここでは挿入ソートではなく二分挿入ソートで実装した。 using System; using System.Collections.Generic; class Program { …
クイックソートの分割配列が一定の要素数になったら挿入ソートに切り替えることにより、クイックソートを高速化する手法の実装である。 using System; using System.Collections.Generic; class Program { private static void Swap<T>(ref T a, ref T b) { T t</t>…
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 …
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 …