C#

フォルダのアクセス権限を設定する。

ファイルならFileInfoで。 C:\private\test にローカルユーザーの aaa をフルコントロールで追加する場合。 DirectoryInfo di = new System.IO.DirectoryInfo( @"C:\private\test" ); DirectorySecurity ds = di.GetAccessControl(); ds.AddAccessRule( new …

マネージオブジェクトのポインタ変換

マネージオブジェクトからIntPtrに変換 GCHandle gch = GCHandle.Alloc( targetObject, GCHandleType.Pinned ); IntPtr ptr = gch.AddrOfPinnedObject();配列からIntPtrに変換 Marshal.UnsafeAddrOfPinnedArrayElement( targetArray, 0 );これで先頭ポインタ…

NTFS代替データストリーム(ADS)一覧取得

NTFSに設定されている代替データストリーム(ADS)の一覧を表示したい。 いろいろ調べた結果 NtQueryInformationFile を使うのがよさげらしい。 dsofile.dll とかもあったんだけど、欲しい情報が取れなかったんですべてを取れるわけじゃないっぽい。 ネタ元 …

円周率

つくば記念に。 ガウス・ルジャンドルアルゴリズム static double Pi(int count) { double a = 1; double b = Math.Sqrt( 1 / 2.0 ); double t = 1 / 4.0; double p = 1; for ( int i = 0; i < count; i++ ) { double x = (a + b) / 2.0; double y = Math.Sq…

NTPクライアント

ソースまとめ [クラス] TimeSynchronizer 時刻補正 NtpClient NTP 通信用クライアント NtpPacket NTP 通信で使用するパケット NtpPacket /// <summary> /// NTP 通信で使用するパケットを提供します。 /// </summary> public class NtpPacket { const long COMPENSATING_RATE_32…

MagicPacket

マジックパケット。いわゆる Wakeup On LAN(WOL)ブロードキャストで投げる。 届かないときは諦めが肝心。MagicPacket仕様 0xff * 6 MAC * 6 class MagicPacket { public MagicPacket() { } public void SendPacket( string macString ) { byte[] mac = new b…

disposeパターンコードスニペット

IDisposeよく使うけどいつも書くのめんどいので。 コードスニペットについては IntelliSense コード スニペットの作成と使用 あたり参照 <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title> Dispose pattern </Title> <Shortcut>dispose</Shortcut> </header></codesnippet></codesnippets>

コントロール作成時にデフォルトで必要そうなプロパティ

C#

[Category( "Appearance" )] [DefaultValue( "" )] [NotifyParentProperty( false )] [Description( "説明" )]

ユーザの偽装。

偽装処理 作ってた当事はいろいろ思うこともあったが、今は思い出せない。 とりあえずコードのみ。 /// <summary> /// 偽装処理を行うためのスコープを提供します。 /// </summary> public class ImpersonateScope : IDisposable { /// <summary> /// 偽装ユーザ。 /// </summary> private readonly…

文字列にサフィックスを付与。

頻出。コピペ用とか。 static string AppendSuffix( string suffix, IEnumerable<string> list ) { return string.Join(suffix, list); }</string>

Thread を簡単に使う。

引数取れないしめんどいよねっていう何か。 class ThreadHelper { private readonly Delegate _execute; private readonly Delegate _callback; private object[] _args; public ThreadHelper ( Delegate execute ) : this( execute, null ) { } public Thre…

デリゲートを使ったテンプレート

ある処理の最初と最後は共通なんだけど。とかいったときに。 /// <summary> /// テンプレート実行。 /// </summary> /// <param name="func">実行対象デリゲート。</param> /// <param name="args">デリゲートに渡す引数。</param> /// <returns>実行結果。</returns> public static object Execute( Delegate func, params object[] args ) { try { return…

共有フォルダ一覧取得 WMI版

WMIで書き直してみた。ユーザ認証も含んでる。こっちのほうが断然短い。 /// <summary> /// 指定されたサーバの共有フォルダ一覧を取得します。 /// </summary> /// <param name="serverPaht">サーバ名。</param> /// <param name="user">接続ユーザ名。</param> /// <param name="password">接続パスワード。</param> /// <returns>取得された共有フォルダの一覧。</returns> public static List<string></string>…

共有フォルダ一覧を取得。

Directory.GetFiles()では共有フォルダの一覧が取れない。(共有フォルダの中身は取れる) 共有フォルダの一覧を取るには NetShareEnum を使う。 public class NetShare { const int NERR_Success = 0; const uint MAX_PREFERRED_LENGTH = 0xFFFFFFFF; enum …

UTF-8 の文字列をサイズで区切る。

/// <summary> /// Utf8 エンコードされたバイト文字列を指定されたサイズ以下にの適切な区切り位置を取得します。 /// </summary> /// <param name="buffer">Utf8 エンコードされたバイト文字列。</param> /// <param name="size">区切りサイズ。</param> /// <returns>取得された区切り位置。</returns> static int GetUtf8SplitIndex( byte[] buffer, int …

シリアライズ

シリアライズ形式 XmlSerializer SoapFormatter(System.Runtime.Serialization.Formatters.Soap) BinaryFormatter /// <summary> /// Xml テキスト取得。 /// </summary> /// <param name="obj">対象オブジェクト。</param> /// <returns>取得された Xmlテキスト。</returns> private static string ToXmlText( object obj ) {…

.Net で標準出力をリダイレクト

ついでに using( MemoryStream ms = new MemoryStream() ) { using( StreamWriter sw = new StreamWriter( ms ) ) { Console.SetOut( sw ); // sw にリダイレクト Console.Write( "hoge" ); // 以下はおまけ sw 使って適当に。 sw.Flush(); ms.Position = 0;…

標準エラー出力

標準エラー出力に出力する。 Console.Error.WriteLine( "Error!!" ); Console.Error.Close(); Close は要るのだろうか。要らない気もするが。 でも、Cosole クラスでなくて Console.Error は TextWriter だからなー。

お手軽非同期

/// <summary> /// お手軽非同期 /// </summary> public class EasyAsync { /// <summary> /// 終了イベント /// </summary> static public event EventHandler Finished; /// <summary> /// 開始イベント /// </summary> static public event EventHandler Starting; /// <summary> /// 指定されたメソッドを非同期で実行します</summary>…