ホーム » Iwao の投稿

作者アーカイブ: Iwao

2024年12月
1234567
891011121314
15161718192021
22232425262728
293031  

カテゴリー

アーカイブ

ブログ統計情報

  • 100,738 アクセス


Shell Extension のデバッグ

ここ 1ヶ月位,共通のコードを分割したり,古いままの部分を改良したりしていた.
ある程度区切りがついたので,ツール関係のプロジェクトからビルドして exe はできる様になった.
それぞれの動作チェックはこれから.


昨日新しいコードでビルドしたものに,「シェルエクステンション」のものがある.
新しいものに置き換えて PC を操作していると,エクスプローラがうまく動作しない.ダウンする.
他の exe で実行しても同様で,イベントビューアを見ると次の様になっている.

障害が発生しているアプリケーション名: DImg.exe、バージョン: 1.0.0.1、タイム スタンプ: 0x4b5822a3
障害が発生しているモジュール名: iShelExt.dll、バージョン: 1.55.2024.8、タイム スタンプ: 0x6751c1dc
例外コード: 0xc000041d
障害オフセット: 0x0004aadc
障害が発生しているプロセス ID: 0x5054
障害が発生しているアプリケーションの開始時刻: 0x01db477a20d02f17
障害が発生しているアプリケーション パス: L:\Document\Develop\Debug\ShellExt\DImg\Release\DImg.exe
障害が発生しているモジュール パス: C:\Users\Public\Documents\Tools\i_Tools\Test\iShelExt.dll
レポート ID: c898b214-2c4e-4701-8c17-27d414c106fb
障害が発生しているパッケージの完全な名前: 
障害が発生しているパッケージに関連するアプリケーション ID: 

シェルエクステンションでの表示データを求める部分を直接呼出している単体テスト用 exe では問題ない.
HBITMAP  テスト
これは予想通り.


「開く」ダイアログでシェルエクステンションのテストができるのでコンソール AP を作成.
https://itl.mish.work/i_Tools/Doc/blog/vc/c_sxt.zip
VC 2022 の「デバッグ」-「コマンドライン」で …\c_sxt.exe を指定.
VC 2022  iShellExt
__targv がうまくなかった.DLL の場合は NULL になる?


次の様に修正.

	#ifdef	_MSC_VER
	{
		if (G_arg.size() == 0) {
		//	::reg_argv(__argc,__targv) ;
			if (__targv != NULL) {
				for (int index=0 ; index<__argc ; index++) {
					tstring	av = __targv[index] ;
					G_arg.push_back(av) ;
					}
				}
			}
		}
	#endif

if (__targv != NULL)

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Mouse without Borders

先日,Win11 24H2 で調べていた時に見つけた「Mouse without Borders」.
以前は,切替器を使用していた頃もあったが,最近は VNC 接続にしているで必要なくなっていた.
ただ,一つ問題が… VNC 接続のため?「半角/全角」を切替えた直後のキーがうまく入らない.


Win10 と Win11 のそれぞれに「Mouse without Borders」をインストール.
デフォルトの設定のまま,1 週間ほど使用した.
キーはうまく入ることが確認できた.
時々,ホストのタスクバーの「VS」のアイコンが押されてしまい,VS 2017 や 2019 が起動してしまう.
Mouse without Borders
幾つかの設定を変更して,しばらく様子見.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Let’s Encrypt で証明書が …

Synology NAS証明書の更新ができなくなってしまった.
「証明書を更新」
mish.dsmynas.com や mish.myqnapcloud.com は自動的に更新されるようになった.
mish.myasustor.com と mish.myds.me は,ルータの設定を一時的に変更して更新できていた.
が,今回はうまくいかない.


「サブジェクトの別名」を指定しなければうまく取得できる.
一度すべて削除して,再度「追加」したらうまく取得できた.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

argv envp

以前 Linux 環境で動作する .out で,コマンドラインを取得したくなり作成したコード.
Windows でもそのまま動作する様に作成したもので,予め main でグローバルな変数に argv を登録している.

#include	"cmd_line.hxx"

int	_tmain	(int argc,TCHAR* argv[],TCHAR* envp[])
{
	{
		::reg_argv(argc,argv,envp) ;
		}
	{
		::dmp_arg() ;
		}
	return	0 ;
	}

DS220  argv envp


Windows の場合は __argc と __argv が利用できるのであまり必要ない.
::GetCommandLine使用することも可能


https://itl.mish.work/i_Tools/Doc/blog/vc/t_arg.zip

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win11 24H2 対応 ユーザの追加

先日 24H2 をいろいろ調べた時ゲストログオンを有効にする」ことで対応した.
が,それではセキュリティの問題があるため改めて調べてみた.
それで検索してみたが,わかりやすいページがあまり見つからず,私の環境での設定をまとめた.


画像は仮想マシンで Win10 Home と Win11 Pro 24H2 を用意してのもの.


サーバ側 Win10-Home

「スタート」をクリックして「user」と入力.「他のユーザーの追加、編集、削除」を選択.
「他のユーザーの追加、編集、削除」を選択

「他のユーザー」の「その他のユーザーをこの PC に追加」を選択.
「その他のユーザーをこの PC に追加」を選択

「このユーザーのサインイン情報がありません」をクリック.
「このユーザーのサインイン情報がありません」をクリック

「Microsoft アカウントを持たないユーザーを追加する」をクリック.
「Microsoft アカウントを持たないユーザーを追加する」をクリック

共有アクセスするためのユーザー(ここでは “cad” )を追加.この時,必ずパスワードを設定すること.
共有アクセスするためのユーザーを追加


クライアント側 Win11-24H2

「スタート」をクリックして「shikaku」と入力.「資格情報マネージャー」を選択.
「資格情報マネージャー」を選択

「Windows 資格情報」を選択.「Windows 資格情報の追加」をクリック.
「Windows 資格情報の追加」をクリック

「サーバー名」,「ユーザー名」,「パスワード」を入力して「OK」.
「サーバー名」,「ユーザー名」,「パスワード」を入力して「OK」

これで \\Win10-Home としてアクセスできる様になる.
\\Win10-Home としてアクセスできる


全クライアントで「Windows 資格情報」を登録すると,サーバ側の「パスワード保護共有を有効にする」にして良い.
「パスワード保護共有を有効にする」に設定

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

コンパイル時の #define 値の表示

次の様なコードをコンパイル時に表示したくなった.

#ifdef	  _MSC_VER
str = _T("_MSC_VER ") + ::utot(_MSC_VER,10) ;
#endif
std::tout << str ;

以前一度使用しているが,それをもう少しいろいろと...


次の様に _CRT_STRINGIZE とすれば _MSC_VER 1941 と表示される.

#ifdef		  _MSC_VER
#pragma	message	("_MSC_VER " _CRT_STRINGIZE(_MSC_VER) )
#endif

VC 14 以降は vcruntime.h で次の様になっている.

#define _CRT_STRINGIZE_(x) #x
#define _CRT_STRINGIZE(x) _CRT_STRINGIZE_(x)

文字列化演算子 (#)


まだ途中だが,CPP ソースのどこでインクルードしてもそれなりに動作する様にする予定.
コンパイル時の #define 値の表示

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win11 Pro 24H2 インストール

先日 Win11 21H2 への 24H2 インストールは行ったが,今回は仮想マシンとしての 24H2 の新規インストール.


iso をセットして仮想マシンを起動すると…
BdsDxe: No bootable option or device was found.
BdsDxe: Press any key to enter the Boot Manager Menu.
VirtualBox  Win11 24H2 インストールで ...


仮想マシンの設定の「システム」-「マザーボード」-「EFIを有効化」のチェックを外すと iso を読み込む.
が,「この PC では Windows 11 を実行できません」


単に「Press any key to boot from CD or DVD…」の時,キーがうまく入っていなかった


ローカルアカウントで設定するには「職場または学校用に設定する」.
職場または学校用に設定する
「サインイン オプション」を「クリック」.
サインイン オプション
「代わりにドメインに参加する」を「クリック」.
代わりにドメインに参加する
ユーザ名の入力になる.
ユーザ名の入力

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VDI の圧縮

以前 VirtualPC を使用していた頃はよくやっていたこと.
VirtualBox になってからはあまり必要なかったが,Win11 24H2 のテストで使いたくなった.


手順は VirtualPC の頃とそれほど変わらない.
1. 不要なファイルを削除.
2. SDelete.exe -z c:
3. "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd F:\VHD\Win11\Win11.vdi –compact
今回は 22H2 を 24H2 に上げた直後の VDI だったのて,50 GB 位になっていた.
確か 22H2 インストール直後は 20 GB 位.
圧縮実施後,24 GB 位になった.
VirtualBox  VDI 圧縮


VirtualBoxのWindows10を出来るだけ小さくする
VirtualBoxの仮想ドライブ(vdi)を圧縮する

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC6 プロジェクトのコードの移行

以前,VC 6 プロジェクトを移行する時の,設定などについて書いた.
VC6 から 2005 , 2008
VC6 から 2010 – 2019
VC6 から 2022
Win11 24H2  VC 6
今回は C++ コードの変更などのまとめ.


アプリケーションクラス InitInstance の次の呼出しを削除
 #ifdef _AFXDLL
  Enable3dControls();
 #else
  Enable3dControlsStatic();
 #endif


文字や文字列を _T() で括る
‘A’ –> _T(‘A’)
"abc" –> _T("abc")


_MBCS では問題ないコードが _UNICODE で,CString 変数のポインタが値として解釈されることがある.
その場合は LPCTSTR() で括れば良い.
str –> LPCTSTR(str)
C スタイルの文字列に関連する CString の操作方法
CString⇒LPTSTR変換


文字列操作関数の _UNICODE 対応と _s 対応.
_t で始まる関数に置き換え.また gcc などでも通る様に _tdefine.hxx を用意.
_MSC_VER により,_s 版と以前のものを切替える関数群を用意


int を INT_PTR などに(x64 対応).
CArray::GetSize など,MFC の色々な所で int が INT_PTR に変更された.
int size = array.GetSize() ; –> INT_PTR size = array.GetSize() ;
ダイアログベースの時も同様に.


* まだ作成途中です.


Microsoft C/C++ 2003 – 2015 の変更履歴
Visual C++ 移植およびアップグレード ガイド

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

QNAP NAS 赤ランプ

今日 PC を起動しようとして,その隣の QNAP NAS の一番上の赤いランプが点灯していることに気づいた.
https://download.qnap.com/TechnicalDocument/Storage/SMB%20NAS/ts-x53d/ts-x53d-ug-ja-jp.pdf
ステータスランプが赤く点灯しているだけで,ドライブのランプは緑の点滅.
スマートフォンの管理ツールで見ると,ディスクの空きが少なくなったことによる警告だった.
Qmanager  2024/10/25
確かに,空き容量が少なくなったメールは来ていた.
他社 NAS も同様のメール通知の設定していて警告は来るが,赤いランプが点灯するようなことはなかったと思う.
不要なファイルを整理して対応.赤になっていたランプは緑の点灯になった.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

リリース版 exe のデバッグ

先日の Win11 24H2 でうまくなかった現象を更に調べたことのメモ.
結論としては,InitInstance に確保される dlg のメンバ変数で初期化がされていないものがあったため.


最初リモートデバッグも考えたが,VC 8 では少し面倒なので VS 2005 をインストールした.
https://learn.microsoft.com/ja-jp/visualstudio/debugger/remote-debugging-cpp?view=vs-2022
インストールした VC 8 でビルドしたデバッグ情報付きのリリース exe でも不具合の現象は確認できた.
が,デバッグしようとすると欲しい情報の所でうまく表示されない部分があった.
そのため VS 2008 もインストールすることに.
VC 9 ではうまくデバッグできる様になった.


デバッガで追いかけると,ダイアログのメンバ変数が意図しない値になっていて,初期化されていないことがわかった.
修正自体は簡単だが,なぜ今まで…


初期化されていないことによりゴミ(不定値)が入ることはわかる.
その変数は ‘1’ 以外だとうまく通る様になっていて,それが 24H2 でたまたま ‘1’ に?


Initinstance で確保される dlg はスタックに確保される.
デバッグ版 exe では,0 でないバイト値などで埋められることが多いが,リリース exe では 0 または不定値となる.
0 はまだ使われていない状態で,不定値は確保前に呼び出された関数で使用する変数やリターンアドレスなど.


一度実行して,次の所で設定されるポインタを求め,それをメモリダンプのアドレスに入力.
m_pMainWnd = &dlg;
再度実行して InitInstance で止めた時のメモリの状態.
dlg メモリ状態
今回の初期化されていない変数(赤くなっている次)が,’1′ になっていることを確認できた.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win11 24H2 インストール

Win11 24H2 に上げた環境で,あるパッケージの 2021版での不具合が発生.
最新版にすることでうまく動作する様になったようだが,原因が絞れ切れない.


そのため仮想環境の Win11 21H2 を更新することに.
最初,更新しようとしても Win11 に対応していないと弾かれた.
原因は,仮想マシンを作成したのが VirtualBox 6.1 で TPM 2.0なっていなかった
VirtualBox TPM v2.0


Insider Program に参加したりしてみたが 23H2 までしか上げられなかった.
結局 24H2 の ISO を手に入れ,仮想マシンにマウントしてインストール.


不具合の現象を再現できた.
更に調べると VC 2005 でビルドした exe がうまくない様子.同じコードを 2015 以降でビルドしたものは問題ない.
VC 2008 ,2010 ,2012 ,2013 でビルドして試すと,2005 と 2008 がうまくないことがわかった.


他に 24H2 に更新したことにより,Win10 の共有ドキュメントに接続できなくなってしまった.NAS は OK .


2024/10/26
Win10 の共有ドキュメントに接続できなくなったことへの対応は,Win10 Ent の 2021/11 の時と同じ
ゲストログオンを有効にする」必要がある
ゲストログオンを有効にする


Windows11にアップグレード後、ネットワーク上の共有フォルダにアクセスできなくなった。
Windows 11 23H2 から 24H2 に更新するべきか?
Windows11 24H2を今すぐダウンロードしてアップデートする方法


2024/11/15
ゲストログオンを有効にしない共有アクセス用のユーザを追加しての対応方法

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

MFC ダイアログに描画

MFC ダイアログ exe で GDI などでの描画を行うときは,通常「Picture Control」を使用する.
メンバ変数として CStatic を割り当てて,その変数(ウィンドウ)に対して描画する.
CWnd::GetDlgItem::GetDlgItem でも良い.


単体テスト用など,それほど重要でないプロジェクトでダイアログに直接描画したい時がある.
ZipMF.exe
リサイズ可能なダイアログの場合,Picture Control のリサイズなども意外と面倒なため


VC 2022 で,MFC の「ダイアログ ベース」として作成.
CDlgDrwDlg
ダイアログの基本クラスは「CDialog」とした.


CDlgDrwDlg::OnPaint() の else 部分を次の様に変更.

	{
	//	CDialog::OnPaint();
		{
			CPaintDC dc(this);
			CRect	rect;
			GetClientRect(&rect);
			rect.DeflateRect(10, 10);
			dc.Rectangle(rect);
		}
	}

CDlgDrwDlg::OnPaint
ダイアログの「プロパティ」-「透明化」は「True」の方が良さそう.
DlgDrw.exe
https://itl.mish.work/i_Tools/Doc/blog/vc/DlgDrw.zip

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VS 2022 の更新で「問題が…」

VS の更新があったので更新すると…
「申し訳ございません。問題が発生しました」.
VS 2022 の更新で「問題が発生しました」
どうも VC ランタイムのパッケージがインストールされなかったみたい.
VC Redist MSVC
デバッグや通常の実行も問題はなさそう.


前回とは違い「修復」で対応しようと思ったが…
VS の修復
どこまでがリセットされるかわからないので「変更」で対応.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

サムネイル表示が止まる?

以前作成したエクスプローラサムネイル表示
iShellExt  2024/10/08
前からの現象だが,不定期に表示が止まってしまうことがあった.
ほとんどが個人的に作成したシェルエクステンションの影響だが,今回は違ったように思う.
全ての explorer.exe を終了させても改善されない.


再起動すれば良いのはわかっているが,順に exe を終了させることに…
dllhost.exe を終了させると,止まっていた表示が動き出した.
ハッキリしたことがわかってないので,とりあえずメモ.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

TryHackMe を使って…

先日「7日間でハッキングをはじめる本」を購入して,その内容をやった.
7日間でハッキングをはじめる本 TryHackMeを使って身体で覚える攻撃手法と脆弱性
7日間とはいかず,2週間程度かかってしまった.


20年位前に作成した Web のシステムでは,これらの知識がなかったため幾つか問題があった.
何年か前に修正済みで,そのほとんどが「クロスサイトスクリプティング」だったと思う.


OSコマンドインジェクション」などは知っていたが,ポートスキャンやパスワードの具体的な部分がわかった.
デフォルトポートの危険性や,パスワードで「数桁の数字」などは意味がないことがよくわかる.


外には公開していないので問題なかったとは思うが
LAN 内の幾つかの機器をポートスキャンしてみると,意図していないものが開いたままのものがあった.
10年位前に追加したもので,設定を間違えたのか,デフォルトで開いていたのか…


2024/10/02
この様な記事を書いたからというわけではないと思うが,昨日から次の様なアクセスが来ている.

//mish.work/?a='>"></script><svg/onload=confirm(1)>&b='>"></script><svg/onload=confirm(2)>&c=...

特に問題ないと思うが,ログが汚くなってしまう.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

0x80030002

次の様なエラーになると連絡が…


ファイルのコピー
予期しないエラーのため、ファイルをコピーできません。…
エラー 0x80030002: ***** が見つかりませんでした。
エラー  0x80030002


よくある “file not found” とはエラーコードが異なる.
ERROR_FILE_NOT_FOUND 0x00000002
また,更新日時やサイズが表示されているので「ファイルがない」わけではなさそう.
表示されているファイル名は ZIP 圧縮したファイルの一部?
タイトルバーがアプリケーション名などになっていないので,API 呼出しの中などで表示されているか?


0x80030002 は STG_E_FILENOTFOUND
幾つか心当たりがある操作などを試してみたが,現象は確認できなかった.


その後現象が発生しなくなったとのことで詳細はわからず.とりあえずメモ.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

DDX_CBIndex , DDX_CBString

デバッグ用のツールを作成していて,コンボボックスを使いたくなった.
使いたかったのは「ドロップダウン リスト」で,ドロップダウン部分を常に表示した「標準」の状態.
本当はリストボックスを使えば良かったか?


VC6 の「MFC ClassWizard」で変数を追加しようとすると変数のタイプが「CString」.欲しいのは「int」.
コンボボックスのタイプを「ドロップダウン リスト」に変更すると「int」が表示され,DDX_CBIndex が追加できた.

void CSwMLGDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSwMLGDlg)
	DDX_CBIndex(pDX, IDC_LANG_UI, m_LangUI);
	DDX_CBIndex(pDX, IDC_LANG_PR, m_LangPR);
	//}}AFX_DATA_MAP
}

変数追加後,コンボボックスのタイプを「標準」に変更.


ビルドして動作を確認すると,特に問題なさそう.
「標準」コンボボックスで DDX_CBIndex


デバッガで追いかけてコードを見ても特に怪しい所はなさそう?
VC2015  DDX_CBIndex


動作を試してはないが,VC 2015 などの変数の追加では,手動で型を指定できそう?
VC 2022 コントロール変数の追加

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

TM103M4 入手

休日など PC を起動するまでもない作業の目的で Android タブレット TM103M4V1 を入手.
TM103M4V1-B
他にも NAS に保存した動画が見られれば良いと思っていたが,これは限定的なものとなってしまった.
moto g13 と同様で,BS 放送を DR モードで録画したものがうまく見られない.地デジ放送のものであれば OK .
moto g8 power lite ではうまく見られるので,端末と REC-ON App との相性の問題か?


今回は,スマートフォンなどの情報は引き継がないで設定した.
Google アカウントによるのか,Chrome にはいろいろな情報が引き継がれる.
アプリの作り方によるものと思うが,スマートフォンでは少し面倒と思う部分が幾つか解消されている(PC に近い?).


WebGL 関係の動作として,Three.js はうまく動作しているが SceneJS の方はうまく表示されない.


「ダークモード」で使い始めたが,明るい色が背景前提のアプリがまだまだ多い気がする.
また,このブログもそうだが,ブラウザで見る時明るすぎるため目が疲れる?


スマートフォンのロック解除では「指紋認証」を長く使っているので,ロック解除が意外と面倒に感じる.
表示が消えた状態で,電源ボタンを押して表示させようとして,反応が悪い時や表示できないことがあった.
10 秒以上押しての「強制的な再起動」で対応した.
表示できないことは何度かあり.また,時間を置くと同じ操作で表示されることもあり.
私の使い方であれば,バッテリは 3 日位持ちそう.


同時に注文したキーボード付きのケースが到着.

タブレットを装着して,キーボードもうまくケースに収まるかと思ったが,そうではなかった.
持ち運びを考えると,キーボードがケースに固定できないので使い勝手は良くない.


キーボードに関して,英語と中国語で書かれたものが入っている.
内容は,Bluetooth 接続のキーボードを使ったことがあれば誰もが知っている程度のもの.
Android ,Windows ,iOS の表記があるので接続先を変えられそうだがよくわからない.
キーボード単体としては次のものが近いと思われる.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VirusTotal 誤検知 trojan

以前よりは良くなった気もするが…

Avast   	Win32:Evo-gen [Trj]
AVG     	Win32:Evo-gen [Trj]
GData   	Win32.Trojan.Agent.8G1FEV
Ikarus    	Trojan-Spy.Evo
MaxSecure	Trojan.Malware.121218.susgen
Skyhigh (SWG)	GenericRXWN-PP!3F53C2B1E9DD
Trellix (ENS)	Artemis!E2A95C89EB37

VirusTotal   i3Dx
以前 VC 2017 などでビルドしたものは誤検知も少なかったと思うが,最近はそうでもない?
今年の初め位から誤検出が増えた気がする.
個人的なツールはほとんど問題ないが,一度誤検知されるとその後いろいろと面倒.
以前 McAfee に報告したが,その時は半年近くかかった.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.