グループポリシーでWindows Updateを管理されているPCで、Microsoftのサーバーに接続してWindows Updateする

Active Directoryで管理しているWindows 10 ProのPCで、自前で用意しているWindows Server Update Services (WSUS)のサーバーにのみ接続させ、 適用させたい更新のみを配布したいというのは理解できるが、 Windows Updateで配布されているデバイスドライバーにアップデートしたい場合がある。 ちゃんと理由は調べてはいないが、IntelのWi-Fiアダプターを搭載したラップトップで、新しいiPhoneのWi-Fiホットスポットにつなごうとするとき、古いデバイスドライバーだと SSIDが見つからない場合があった。 Intelは最新のデバイスドライバーを自社ウェブサイトで配布するのは止めてしまっているし、ラップトップのメーカーも最新のものを配布していないことが多い。 そうすると、Microsoftの提供するWindows Updateのサーバーに接続しないといけない。 まあ、本当は管理しているマシンに必要な最新のデバイスドライバーはWSUSで配信できるのだと思うので、ちゃんと管理して欲しいのだが。

いずれにしても、一時的にMicrosoftの提供するWindows Updateのサーバーに接続しないといけない。 その際には、勝手に最新のWindows 10のFeature Updateにアップグレードしないようにして、WSUSではなくMicrosoftのWindows Updateサーバーに接続するようにしないといけない。

指定したFeature Updateに留まるには、以下のように管理者権限のコマンドプロンプトで実行し、レジストリーに設定すれば良い。 ここでは、21H1のFeature Updateに留まるように設定している。

> REG ADD HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v TargetReleaseVersion /t REG_DWORD /d 1 /f
> REG ADD HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v TargetReleaseVersionInfo /t REG_SZ /d 21H1 /f

その上で、HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\UseWUServerが1になっているのを 0にしてやれば良い。デバイスドライバーが最新になったら、REG ADDした2つの値は削除し、UseWUServerの値は0に 戻しておけば良い。

neomuttで、未読の電子メールのみ表示させる

とあるドメイン宛ての電子メールをPostfixを使ってユーザー名によらず受信し、Maildir形式で保存するようにしているサーバーがある。 ほぼ全てがspamである訳だが、中には内容を確認しないといけない電子メールも存在している。 そのためにIMAP4サーバーを立ち上げるというようなことはしたくない。 そこで、sshでログインして、netmuttで受信した電子メールを読むことにした。 netmuttで、未読の電子メールのみを表示させるには、l~Uと入力すれば良かった。 現在この環境以外ではnetmuttを利用しておらず、すぐに忘れてしまうので、書いておく。

Clojure 1.11.1からJava 2Dを利用する

ClojureからJava 2Dを利用するようにしたいが良く分からなかった。 探してみるとCX's Hello, World!のHello, Java 2D(Clojure) World!に 例が掲載されていた。 ただ、そのままではOpenJDK 17.0.4で動かしたClojure 1.11.1では動かなかった。 その部分を動くようにして、フォントの設定をしたかったのでそれを追加してみた。

; From http://cx20.main.jp/blog/hello/2012/12/05/hello-java2d-clojure-world/
; Modified for Clojure 1.11.1 by Ryo ONODERA <ryo@tetera.org>
; Run: clj -M java2d.clj

(import
  (javax.swing JFrame)
  (javax.swing JPanel)
  (java.awt Graphics)
  (java.awt Graphics2D)
  (java.awt Font)
)

(defn create-panel []
  (proxy [JPanel] []
    (paintComponent [g]
      (.setFont ^Graphics2D g (Font. "Droid Sans" Font/PLAIN 72))
      (.drawString ^Graphics2D g "Hello, Java 2D World!" 0 100)
)))

(def panel
  (create-panel))

(def frame
  (JFrame.))

(doto frame
  (.setDefaultCloseOperation
    javax.swing.WindowConstants/EXIT_ON_CLOSE)
  (.add panel)
  (.setSize 640 480)
  (.setTitle "Hello, World")
  (.setLocation 100 100)
  (.setVisible true))

Windows 10で保存されたWi-FiアクセスポイントのSSIDとパスフレーズを一覧する

Windows 10で保存されたWi-FiアクセスポイントのSSIDとパスフレーズを知りたいのだが、標準のGUIでは今接続しているSSIDに対応するパスフレーズを 表示させることはできるものの、接続中ではないもののパスフレーズを表示することはできないようだ。 しかし、Windows 10の保存している全てのSSIDとパスフレーズの組み合わせを表示させたい場合がある。

まず、保存されたWi-FiのSSIDの一覧は、以下のようにすれば表示できる。

> netsh wlan show profiles

インターフェイス Wi-Fi のプロファイル:

グループ ポリシー プロファイル (読み取り専用)
---------------------------------------------
    ≤なし>

ユーザー プロファイル
---------------------
    すべてのユーザー プロファイル     : SSIDSTRING

そこでSSIDとしてSSIDSTRINGが分かるので、そのパスフレーズは以下のようにすれば表示できる。 「セキュリティの設定」の「主要なコンテンツ」の部分の値がパスフレーズである。

> netsh wlan show profile name=SSIDSTRING key=clear

インターフェイス Wi-Fi のプロファイル SSIDSTRING:
=======================================================================

適用先: すべてのユーザー プロファイル

プロファイル情報
-------------------
    バージョン             : 1
    種類                   : ワイヤレス LAN
    名前                   : SSIDSTRING
    コントロール オプション        :
        接続モード    : 手動接続
        ネットワーク ブロードキャスト : このネットワークがブロードキャスト配信している場合に限り接続
        AutoSwitch         : 他のネットワークに切り替えません
        MAC ランダム化  : 無効

接続の設定
---------------------
    SSID の数        : 1
    SSID 名             : "SSIDSTRING"
    ネットワークの種類           : インフラストラクチャ
    無線の種類          : [ 任意の無線の種類 ]
    ベンダー拡張          : 存在しません

セキュリティの設定
-----------------
    認証                : WPA2-パーソナル
    暗号                : CCMP
    認証                : WPA2-パーソナル
    暗号                : GCMP
    セキュリティ キー      : あり
    主要なコンテンツ       : SSIDPASSPHRASE

コスト設定
-------------
    コスト                   : 制限なし
    混雑                   : いいえ
    データ制限間近         : いいえ
    データ制限超過         : いいえ
    ローミング             : いいえ
    コスト ソース          : 既定

これをWindows 10上で組み合わせてやれば、SSIDとパスフレーズを一覧できるはずである。 ウェブを検索してみると、stackoverflow.comに How can I see all Wifi Passwords using netsh with 1 command?という記事があった。 PowerShellを使い、以下のようにすれば良い。

> type show-all-saved-wifis.ps1
netsh wlan show profiles | Select-String ":.*[a-zA-Z0-0-_]+" | % {"$_".split(":")[1].trim()} | % {netsh wlan show profile name=$_ key=clear}

Windows 10で秘密鍵がエクスポート禁止になっている電子証明書をエクスポートする

どういう仕組みで設定されているのかは把握していないが、Windows 10では秘密鍵がエクスポートできない電子証明書を指定することができるようだ。 だが、その秘密鍵は例えばHTTPSで電子証明書によるクライアント認証をする際には送られているはずなので、 単に秘密鍵をエクスポートを禁止するユーザーインターフェイスの機能があるだけで、秘密鍵を得ることはできるはずである。

その秘密鍵を受け取るようなサーバーを用意すれば良いのだとは思うが、同じようなことをしようと考えている人はいるはずである。 検索すると、https://github.com/iSECPartners/jailbreakというのが見付かる。 今回は、Windows 10 21H2 64-bitで試してみた。

https://github.com/iSECPartners/jailbreak/binariesに ビルド済みのバイナリーが含まれている。リポジトリーをcloneするか.zipファイルとしてダウンロードし、 管理者権限のコマンドプロンプトで以下のように実行すればcertmgr.mscが開き、そこでは秘密鍵がエクスポートできないという制限はなくなった。

binaries> jailbreak64 c:\windows\system32\mmc.exe c:\windows\system32\certmgr.msc -64

もし、管理者権限のないコマンドプロンプトで実行すると、以下のようなエラーになってしまう。

binaries>jailbreak64 c:\windows\system32\mmc.exe c:\windows\system32\certmgr.msc -64
CreateProces failed with error code = 740
Command line = c:\windows\system32\mmc.exe c:\windows\system32\certmgr.msc -64

また、アンチウイルスソフトウェアによっては、hacking toolとして認識されてしまうので、アンチウイルスソフトウェアは 停止させておかないといけない。Microsoft Defenderは検出はしないようである。

HP ProBook 450 G7でhomeキーを押すとmキーが押されたことになっていた

気付くと、HP ProBook 450 G7の内蔵日本語キーボードでhomeキーを押すと、mの文字が入力されるようになっていた。 USBキーボードをつないで、そちらのhomeキーを押すと、homeキーとして働きmの文字は入力されない。 Windows 10 21H2 x86_64には、xevコマンドのようなキーボードのスキャンコードを把握できるようなソフトウェアは 含まれていないようだった。 KeyboardStateView v1.00をダウンロードして 実行してみると、確かにhomeキーを押した時にmキーを押したようになっている。 USBキーボードが内蔵キーボードと違う挙動を示しているということは、レジストリーでスキャンコードを差し替えている訳ではないはずである。 そして、このPCはCaps Lockキーを左Ctrlキーになるようにレジストリーで設定しているが、その内容も変化しておらず、Caps Lockキーを左Ctrlキーに しているだけの内容だった。それを削除しても状況に変化はなかった。 本当はWindows以外のOSで試してみれば良かったのだが、準備できず試すことはできなかった。 再起動しても電源を落としても変化はない。

内蔵キーボードだけおかしいとなると、キーボードの配線に不良が発生したか、BIOSがキーボードを制御している部分があるとすれば、 それがおかしいのだと思われる。 いずれにしても、BIOSは最新化しておかないといけない。修理に出すのであれば修理依頼時にBIOSの最新化を求められるだろう。 不具合のあった時のBIOSは、 01.13.01 Rev.A だった。 今日時点の最新は、01.14.00 Rev.A であった。 BIOS S71 01.14.11 Rev.Aの変更点には今回の問題についての記述はなかったが、00.14.00 Rev.Aにアップデートしたところ問題は解消した。

Arvel USBシリアルケーブルSRC06-USBをWindows 10 x86_64で使う

※ Windows 11でも使える記事を書いた。

Arvel SRC06-USB USBシリアルケーブルというUSBシリアル変換器を持っている。 これにはFDTI製のUSBシリアル変換チップをい利用していて、USB VendorID/ProductID=0x0403/0x6001として認識される。 Arvelを買収したBuffaloのウェブサイトでは、Windows 10用のデバイスドライバーは提供されていないようだ。 Windows 7までのデバイスドライバーは、https://www.buffalo.jp/support/download/detail/?dl_contents_id=60914で配布されている。

FTDIのウェブサイトに行くと、2022年6月21日現在、Windows 7から11用のVCPとD2XXの両方のデバイスドライバーのインストーラーhttps://ftdichip.com/wp-content/uploads/2021/08/CDM212364_Setup.zipが配布されていた。 このインストーラーを使うと、USB Serial Port (COM3)として認識され、無事に利用できた。COM3の部分は環境によって違うと思われる。

HP ProLiant ML110 G7に32GBのメモリーを搭載する

HP ProLiant ML110 G7 Server Maintenance and Service Guide の62ページ目には、以下のように記載されている。 General DIMM slot population guidelines Th...