2021.05.06存在感が日々高まっているRustで、これまでC/C++で開発してきた領域の置き換えを徐々に実行していきたいと考えています。今回は堅牢実装が用途にピッタリ当てはまる、windows-rsクレートを用いたWindowsサービスモジュール作成手順を紹介します。スポンサーリンクスポンサーリンク目次はじめにプロジェクトのひな型作成コード記載bindings/Cargo.tomlファイルbindings/src/lib.rsファイルbindings/build.rsファイルsrc/Cargo.tomlファイルsrc/main.rsファイルサービス実行サービスの登録・削除サービスの実行まとめはじめにサービスモジュール類は常に動作しかつ重要なロジックが多いので、特に脆弱性やメモリ管理に気を配る必要があります。サービス開発にRustを利用することでその恩恵を受けるために、Windowsサービスの大枠を実装してみたいと思います。APIの実装を容易にするため、マイクロソフトが開発を進めている、win32metadataプロジェクトからwindows-rsを利用します。API関連の構成を確認して、開発を進めていきます。API使用!懐かしいウィンドウ作成の記事で、簡単なWindowsモジュール開発も紹介しているので、参考にしてください。プロジェクトのひな型作成コマンドプロンプトから、下記コマンドを実行してプロジェクトのひな型を作成します。libを追加しているのは、こちらにwindows-rsのモジュールを登録しておくと、毎回のビルド時間をキャッシュにより短縮できるためです。各ファイルにソースコードを記載して、実装していきます。bindings/Cargo.tomlファイル利用するクレートに”windows“を登録します。バージョンは適宜変更してください。"0.9.1"bindings/src/lib.rsファイル元々記述されているコードを全て削除し、下記1行に書き換えます。::windows::include_bindings!();bindings/build.rsファイルbindings配下にbuild.rsファイルを新規に作成して追加します。このファイルには、使用するwindows-rsのAPIおよび構造体を追加していきます。名前空間は、前述のAPIサイトからAPI名で検索します。文字列を扱うAPIにはA系とW系の2つが登録されているので注意です。);}src/Cargo.tomlファイル必要な関連モジュールを登録しています。"1.7.2"src/main.rsファイル以降は、全てmain.rsファイルに追記していきます。必要なクレート群を呼び出します。once_cell::sync::OnceCell;関数を跨いで使用するグローバル変数を定義します。現状は、サービス名・イベントハンドル・サービスハンドルです。OnceCell::new();何度か使用するユーティリティ的関数を用意しました。}}サービスマネージャーにサービスのステータスを通知する、関数を作成しています。status);}サービスのコントロール要求を処理するハンドラ関数です。最低限のSERVICE_CONTROL_STOPだけ処理しています。functionを参照してください。ret}サービスのメイン関数です。コントロールハンドラの登録、サービスマネージャーへのステータス通知、イベントの要求待ち、最後にリソース開放処理を行っています。イベント要求は、現状サービス停止のみ処理しています。APIを使いたくなるので、今はWin32レベルで簡易に処理しています。SERVICE_ACCEPT_PAUSE_CONTINUE);}モジュールのスタート関数です。サービスとしてディスパッチするところから、処理が始まります。Ok(())}サービス実行サービスの登録・削除サービスモジュールを、”NewService“と言うサービス名をつけて、昇格したコマンドプロンプトから以下のコマンドでOSに登録します。autoサービスが不要もしくは再度やり直し等の処理をしたい場合、以下のコマンドでOSからエントリーを削除してください。作成したサービスモジュールを、コントロールパネルの”サービス一覧”もしくはscコマンドで実行してみます。ステータスが“実行中”となって、サービスモジュールが常駐していることが分かります。停止させることも可能です。サービス実行中まとめWindowsサービスモジュールのひな型をRustで実装する手順を紹介しました。サービスモジュールとして常駐できれば、あとはビジネスロジックを追加するだけです。これらのロジックはクリティカルになる場面が多いので、C++らに比べてRustの特性が生きてくると思われます。新しくモジュールを開発する際には、是非Rustの採用を検討してみてください。以上、RustでWindowsサービス作成の紹介でした。開発Hashcat活用!色々なパスワード解析方法ツールHashcatには、様々な種類のデータを解析するモードが備わっています。今回は、パスワード忘れ時等に利用できる、色々な種類のパスワードを解析する手順を紹介します。開発Dockerで構築!メールサーバーを5分で何かの調査でちょっとメール送受信を確認したい、ということがあるかと思います。今回は、そんな時に役立つさっとメールサーバーを構築する手順を紹介します。Testの使用方法について、簡単に説明します。WINGでWordPressを構築する初心者がレンタルサーバーを契約して、WordPressを起動させるまでを紹介します。最近のレンタルサーバーを調べてみました。評判では、下記の2サイトが良さそう。Automateで作成します。作業場はOneDrive上になりますが、無料で実装できます。開発InSpecでIISにインフラ構成テストInSpecを用いたインフラ構成テストを紹介します。WindowsのInSpecコンテナからチェックします。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。Studio系2021.02.122021.02.12プロフィールこの記事を書いた人fmtech中学時代からプログラミングしているコンピューター好きです。CISSP「Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。Studio系2021.02.122021.02.12プロフィールこの記事を書いた人fmtech中学時代からプログラミングしているコンピューター好きです。CISSP「Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。defined.")}))})();。