ホーム » 2025
年別アーカイブ: 2025
Windows SAC と Defender
先日から「スマートアプリコントロール」が「ON」の状態でいろいろとやっている.
VC 2022 でビルドしたもので幾つかブロックされる exe がある.
また SAC のブロックが解除されたものでも,Defender でガードされることもある.
この場合は exe が起動されて表示後,しばらくすると勝手に終了する.
同じコードを VC 2017 などでビルドするとブロックされないこともある.
それで,VirusTotal で,幾つものアンチウィルスで誤検知されている exe のみ VC 2017 でビルドしたものに差し替え.
それを msi として作成して SAC ON 環境で起動すると,ブロックされることなくインストールできた.
exe に自己署名証明書
先日から「スマート アプリ コントロール」に関していろいろやっている.
多くの exe はうまく起動するようになったみたいだが,まだブロックされてしまうものがある.
それで,自己署名証明書について調べた.
検索すると次のようなページが見つかる.
コード署名用証明書と Visual Studio での署名設定
自己証明書を作成して実行ファイルに署名する
自作ソフト「exe」への自己署名 VisualBasic
が,詳しく書かれているため,簡単に手順をまとめたものが欲しかった.次の所に書かれている.
テストや社内使用のために独自の証明書を作成する
そこに書かれていることと同じだが…
1. makecert.exe で cer と pvk を作成.
2. pvk2pfx.exe で cer と pvk から pfx を作成.
3. signtool.exe で pfx を exe などに追加.
4. インストール先に cer を登録.
"C:\Program Files (x86)\Windows Kits\10\bin\x86\makecert.exe" -r -sv MyCert.pvk -n "CN=DevABC" MyCert.cer -b 01/01/2025 -e 01/01/2100
"C:\Program Files (x86)\Windows Kits\10\bin\x86\pvk2pfx.exe" -pvk MyCert.pvk -pi test -spc MyCert.cer -pfx MyCert.pfx -po test
"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign /fd SHA256 /f MyCert.pfx /p "test" ClipView.exe
これでこの exe も起動できるようになった.
VirusTotal 自己署名証明書 なし あり
2025/03/12
何かを間違えたのか,自己署名証明書を追加した msi のインストールがうまく動作しない.
オリジナルの iTls143.msi 2024/12/16 17:24:28 ならば OK .
2025/03/13
昨日うまく動作しなかった msi も,今日は大丈夫になった.
が,「修復」を選択した場合は相変わらず…
一度「削除」して,新規にインストールする手順であれば OK .
2025/03/14
exe の場合,最後に 1344 バイト付加されている.
Windows向けソフトウェアのコードサイン証明書の署名方法
exeファイルと証明書を作成してデジタル署名を付与してみる
検証用コードサイニングEXEと無署名EXE
スマートアプリコントロール
私が作成している exe ではないが,「スマート アプリ コントロール」に引っかかると聞いて,いろいろと試した.
メイン PC などは「オフ」になっているので,仮想マシンに「Win11 24H2 Feb 2025」を新規インストール.
個人的に作成したツールなどをコピー.VS 6 をインストール.
仕事で作成しているパッケージ 2024.10 をインストール.
一通りの動作を確認.ほぼ問題なさそうだったが,一部の個人的なツールが引っかかった.
以前からある Defender の「許可」する様な操作で復元.
この段階で VirusTotal でチェックすると確かに引っかかっている.
「スマート アプリ コントロール」の設定は「評価」が選ばれている状態.
仮想ハードディスク vdi をコピー.
コピーした方の「スマート アプリ コントロール」の設定を「オン」に(Win11-SAC).
すると個人的なツール.msi をインストールしようとするがインストールできない.
検索すると「スマート アプリ コントロール」の影響らしい.
どうしたものかと思いながら,もう一つの「評価」となっている仮想マシン(Win11-PFW)でいろいろと操作.
また並行して今回テストしている exe を VirusTotal でチェック.
数個の exe が引っかかった.それぞれ「許可」して復元.
そんなことをいろいろとしていると「オン」の方でも exe が動作するようになった.
また,msi を使用したインストールも可能になっている.
2025/03/10
先日うまく動作するようになったものが,またガードされてしまうものがある.
他の仮想マシンで exe を起動すると,その後うまく動作するようになったり…
また,インストールした exe が消された(隔離された)ものもあった.
Windows 11 22H2のスマート アプリ コントロールの挙動#1
【Windows11】スマートアプリコントロールをオフにする手順と注意点
2025/03/17
先週ビルドして,個々の exe などはうまく動作することを確認.
それをインストールするために msi を作成したが,そちらは SAC に引っかかる状態.
今日確認すると,msi でインストールできないのは相変わらず.
個々の exe を起動しようとすると,半分くらいが SAC に引っかかる様になっていた.
休みを挟んでしまう(期間があいてしまう)と,何か(カウンタの様なもの)がリセットされてしまうのか?
いろいろと探していたら,Microsoft の報告するページを見つけた.
Microsoft Security Intelligence Submit a file for malware analysis
その中に「Smart App Control」の選択肢があったので,報告してみた.
進行状況を「More」-「Submissions」-「View submission history」で確認できる.
2025/03/18
1つの exe は完了して,SAC に引っかからなくなった.VirusTotal ではまだ他のもので誤検出あり.
msi などは「In progress」.
「Completed」となったので確認すると,修復されたとある.
msi でのインストールも通る様になった.
2025/03/24
朝動作を確認すると,先日インストールできた exe の 5/22 が,またブロックされるようになっていた.
いろいろとやって,今はうまく起動するようになっている.
また msi もダメで,アンインストール後インストールを試すとブロックされてしまう.
SAC が有効な仮想マシンを新規に作成して,開発している製品の 2024.10.iso でインストール…
が,ブロックされてインストールできない.
しばらくいろいろとやっていると,そのうちにインストールできるようになった.
午前中ダメだったものも含め,いろいろなもののブロックが解除されたみたい.
Red Sift Certificates Lite
先日から次の様なメールが来ている.
Let’s Encrypt からの有効期限の通知を終了するというもの.
https://letsencrypt.org/2025/01/22/ending-expiration-emails/
最近は NAS 側での自動更新がうまく働いてはいる.
が,念のためそこに書かれている Red Sift での設定を行った.
Google アカウントで「Sign up」.
「ADD DOMAIN」で登録することにより,ここで監視されるようになる.
2D 配列の配列の ::PolyPolygon
2 年位前に書いた,2D 配列を表示するコード.
BOOL PolyPolygon (HDC hDC,const v_Vd2A& v_v2a)
{
std::vector <POINT> points ;
std::vector <int> counts ;
for (size_t index=0 ; index<v_v2a.size() ; index++) {
const Vd2A& v2a = v_v2a[index] ;
for (size_t p_index=0 ; p_index<v2a.size() ; p_index++) {
Vd2 vd2 = v2a[p_index] ;
POINT pt2 = { long(vd2.x) , long(vd2.y) } ;
points.push_back(pt2) ;
}
counts.push_back(int(v2a.size())) ;
}
return ::PolyPolygon(hDC,&points[0],&counts[0],int(counts.size())) ;
}
それ以前は,コンソール AP で DC を使うことを考えてなかった.
また最近は,コンソール AP での GDI 描画もしていなかった.
今やろうと思っていることで,個人的なコードを調べていて
{
HWND hWnd = ::GetConsoleWindow() ;
{
vv_PLF d_plf = vvplf ;
{
d_plf = ::PLF_Translate(d_plf,Vd3(200)) ;
}
::ClearWindow(hWnd) ;
HDC hDC = ::GetDC(hWnd) ;
{
v_Vd2A v_v2a = ::ToVd2A(d_plf) ;
::PolyPolygon(hDC,v_v2a) ;
}
::ReleaseDC(hWnd,hDC) ;
}
}
こんな感じで使える.
WebGL での 3D データ表示
やりたかったのは,三角形分割で正しくできたかどうか?
Vd3A v3a = ::ToVd3A(pts) ;
{
Vd3 nv = ::V3_GetNormal(v3a) ;
std::tout << nv.Length() << std::endl ;
}
{
v_Vd3A t_a = ::V3_Triangulation(v3a) ;
Vd3 n_v ;
for (size_t index=0 ; index<t_a.size() ; index++) {
Vd3A tri = t_a[index] ;
Vd3 tnv = ::V3_GetNormal(tri) ;
n_v += tnv ;
}
std::tout << n_v.Length() << std::endl ;
}
ダブルクリックで開かない
MDI exe で,ドキュメントをダブルクリックして開けないものがある.
exe が起動された後,もう一度ダブルクリックすると開ける.
VC のバージョンによる違いかと思っていたが,他にも何か条件がありそう.
VC6 exe は問題なさそう.VC12 でうまくないことはあった.VC 2022 exe は今は開けない.
いろいろやっていると開けるようになることもある.
この動作をデバッガで確認したいと思ったが…
最初 DebugBreak() を追加してみたが,うまく止められなかった.
それで,次のようにメッセージボックスを表示して停止し,デバッガからアタッチしてテストすることにした.
BOOL CGLSmthApp::InitInstance()
{
if (!AfxOleInit()) {
AfxMessageBox(_T("OLE の初期化に失敗しました。")) ;
return FALSE ;
}
#ifdef _DEBUG
// DebugBreak();
AfxMessageBox(_T("Wait")) ;
#endif
// ...
}
これでデバッグ自体はできるようにはなったが DDE の動作部分はうまくデバッグできない.
結局どうすれば良いのかはわかっていないが,DDE が動作するときに時間がかかるとうまく開けない?
レジストリに文字化けしたキー
先日から CDocManager::RegisterShellFileTypes 関係を調べている.
以前やった時は,MFC に依存した自前のコードが多かったのと,もう少し使いやすくできないかと…
それでいろいろとやっていると,レジストリの HKCU\Software\Classes\ の下に文字化けしたものができてしまった.
REG_SZ の (ext)_auto_file となっている.
これは,ドキュメントをダブルクリックして「常に使う」を選んだ時と思うが,はっきりしない.
Win10 環境でも同様?
レジストリの直接編集によるファイルの拡張子と関連づけ
Windows 11とレジストリに非ASCII文字を利用するアプリに非互換問題 ~BSoDが発生
特定のレジストリ キーを削除できません。キーの削除中にエラーが発生する
error D8016 : /clr /RTC1
VC 6 で作成して VC 2022 まで順に上げた MFC プロジェクトで /clr を有効にしてビルド.
22:39 でビルドが開始されました...
1>------ ビルド開始: プロジェクト: GLSmth, 構成: Debug Win32 ------
1>cl : コマンド ライン error D8016: コマンド ライン オプション '/clr' と '/RTC1' は同時に指定できません
1>プロジェクト "GLSm143.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 成功 0、失敗 1、最新の状態 0、スキップ 0 ==========
=========== ビルド は 22:39 で完了し、00.707 秒 掛かりました ==========
通常はプロジェクトの設定で「C/C++」-「コード生成」-「基本ランタイムチェック」で「既定」を選択すれば良い.
が,今回はそれだけではエラーのまま.
vcxproj をエディタで開いてみると EnableFastChecks という部分が存在している.
<ClCompile Include="GLSmth.cpp">
<BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
</ClCompile>
error C3010: ‘return’: OpenMP
以前,OpenMP を有効にしないで使用していたコード.
最近のコードで,OpenMP を有効にしたプロジェクトが増えてきた.
それでビルドしていると C3010 のエラーになってしまう.
関連する部分を,単体テスト用の cpp に張り付けてビルド.
11:21 でビルドが開始されました...
1>------ ビルド開始: プロジェクト: C_drv, 構成: Debug Win32 ------
1>C_drv.cpp
1>L:\Document\Develop\VC_Test\PC_doc\C_drv\C_drv.cpp(60,36): error C3010: 'return': OpenMP 構造化ブロックからのジャンプは許可されていません
1>L:\Document\Develop\VC_Test\PC_doc\C_drv\C_drv.cpp(64,45): error C3010: 'return': OpenMP 構造化ブロックからのジャンプは許可されていません
1>L:\Document\Develop\VC_Test\PC_doc\C_drv\C_drv.cpp(67,4): error C3010: 'return': OpenMP 構造化ブロックからのジャンプは許可されていません
1>L:\Document\Develop\VC_Test\PC_doc\C_drv\C_drv.cpp(69,3): error C3010: 'return': OpenMP 構造化ブロックからのジャンプは許可されていません
1>プロジェクト "C_drv.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 成功 0、失敗 1、最新の状態 0、スキップ 0 ==========
=========== ビルド は 11:21 で完了し、06.452 秒 掛かりました ==========
OpenMP のコードの部分を一つの関数とすることで対応.
bool NET_is_valid (LPCTSTR path)
{
tstring net_root = ::Path_Get_net_root(path) ;
bool is_valid = false ;
#ifdef _OPENMP
#pragma omp critical (NET_is_valid)
#endif
{
is_valid = ::NET_is_valid_critical(net_root) ;
}
return is_valid ;
}
何故か,VC 2015 と 2017 ではエラーにならなかった.
Win11 コンソール AP で DC
今まで Win10 をメインで使用していたので気づかなかったが…
Win10 でうまく使えていた GDI の描画が Win11 ではうまく行われない?
どうも,デフォルトの設定では新しい「ターミナル」が使用されることによるみたい.
ターミナルの「設定」から入って「Windows コンソール ホスト」を選択して「保存」する.
シンボリックリンクがない?
先日から ZIP を扱うコードを書いている.
いつも exe を作成するのは,VC 6 と VC 2015 以降が多い.
今回は,幾つかの環境(Win7 など)での動作を確認したかったので,VC 9 でビルドしたものもテストしていた.
Win10 環境では特に問題なかったが,Win11 環境でうまく機能しない動作がある.
VC 6 や VC 8 でビルドしたものは OK .また,VC 2015 以降も良さそう.
リリース版とデバッグ版での違いはなさそう.
VC 9 と VC 10 でビルドしたものがうまくないことがわかった.
VC 9 で,デバッガで追いかけていくと,stat の _tsopen_s で見つからないとなってしまう.
VC 8 以前ではその部分はなく,VC 11 以降では _O_OBTAIN_DIR が設定されている.
検索するとシンボリックディレクトリリンクがサポートされていないみたい.
FIX”_stat”または”_wstat”関数が失敗した ENOENT エラーとディレクトリのシンボリック リンクのパスは、Visual C++ 2010 アプリケーションに渡されたとき
Update: “_stat” oder “_wstat”-Funktion nicht mit ENOENT Fehler, wenn ein symbolische Verknüpfung Verzeichnispfad zu Visual C++ 2010 Anwendung übergeben wird
“_stat ファミリ” の関数呼び出しでは、Visual Studio 2013、2012、または 2010 の C ランタイム ライブラリ関数のシンボリック ディレクトリ リンクはサポートされていません
Function calls of “_stat-family” do not support Symbolic Directory Links for C Runtime Library functions from Visual Studio 2013, 2012, or 2010
対応は VC 2015 以降を使用する必要がある?
fatal error C1001
MFC SDI プロジェクトを /clr を有効にして,ビルド.
さらに OpenMP を有効にしてビルドすると …
ビルドを開始しました...
1>------ ビルド開始: プロジェクト: MBPV, 構成: Release Win32 ------
1>MBPVDc.cpp
1>enumfile.hxx MessageBar No Support
1>BDocCSV Draw No Support
1>_WIN32 1
1>_WINDOWS 1
1>_OPENMP 200203
1>_UNICODE 1
1>_MSC_VER 1929
1>_MSC_FULL_VER 192930157
1>_MFC_VER 0x0E00
1>_ATL_VER 0x0E00
1>__CLR_VER 40809290
1>_MSVC_LANG 201402L
1>WINVER 0x0A00
1>__cplusplus_cli 200406L
1>_AFXDLL 1
1>_M_CEE 001
1>_MANAGED 1
1>__DATE__ "Jan 10 2025"
1>__TIME__ "13:39:57"
1>UndoRedo::UpdateUI No Support ODMenu
1>T:\Develop\_.SRC\__CPR_\enumfile.hxx(597): fatal error C1001: 内部コンパイラ エラーが発生しました。
1>(コンパイラ ファイル 'D:\a\_work\1\s\src\vctools\Compiler\Utc\src\p2\main.c'、行 213)
1> この問題を回避するには、上記の場所付近のプログラムを単純化するか変更してください。
1>可能な場合、再現手順をこちらに入力してください: https://developercommunity.visualstudio.com
1>詳細については、Visual C++ ヘルプ メニューのサポート情報コマンドを
1>選択するか、サポート情報ヘルプ ファイルを参照してください
1> CL!RaiseException()+0x62
1> CL!RaiseException()+0x62
1> CL!InvokeCompilerPass()+0xc17f1
1> CL!CloseTypeServerPDB()+0x16cc3
1>プロジェクト "MBPV142.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
デバッグビルドは通る.また,/clr や OpenMP を外すと通る.
VC 2017 や 2022 などでは問題ない.
何かの更新で解消されるかもしれないので,このままとする.
MFC + System:: … ::ZipFile
先日から作成しているテスト exe で,ZIP に圧縮する動作を…
主要な exe では,izip.exe を呼出したり,シェルの機能を利用している.
ただ,同期のタイミングなど少し時間がかかるので,試しに直接呼出す方法に変更.
プロジェクトの設定で「共通言語ランタイム サポート (/clr)」に.
そのままビルドすると
cl : コマンド ライン error D8016: コマンド ライン オプション ‘/ZI’ と ‘/clr’ は同時に指定できません
cl : コマンド ライン error D8016: コマンド ライン オプション ‘/clr’ と ‘/Gm’ は同時に指定できません
cl : コマンド ライン error D8016: コマンド ライン オプション ‘/clr’ と ‘/RTC1’ は同時に指定できません
T:\…\zip_CLI.hxx(16,9): fatal error C1107: アセンブリ ‘System.IO.Compression.dll‘ がみつかりませんでした: /AI または LIBPATH 環境変数を使用してアセンブリ検索パスを指定してください。
L:\Document\…\ComPrj01.cpp : fatal error C1128: セクションの数がオブジェクト ファイル形式の制限を超えています: /bigobj と共にコンパイルしてください
「プログラム データベース (/Zi)」に.
/Gm と /RTC1 は「<親またはプロジェクトの既定値から継承>」に.
「追加の #using ディレクトリ」を「C:\Windows\Microsoft.NET\Framework\v4.0.30319」に.
「C/C++」-「コマンド ライン」の「追加のオプション」に「 /bigobj 」の追加.
これでビルドはできる様になったが,あまり見慣れない warning が…
ComPrj01.obj : warning LNK4248: 未解決の typeref トークン (0100001B) (‘_TREEITEM’) です。イメージを実行できません。
ComPrj01.obj : warning LNK4248: 未解決の typeref トークン (0100001F) (‘GLUtesselator’) です。イメージを実行できません。
これに関しては,ちょっとわからず.
error LNK2001: unresolved …
空のコンソール AP プロジェクトを作成して,_tmain を含む cpp を追加してビルドすると
--------------------Configuration: t_MBP - Win32 Debug--------------------
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
c:\Temp\MBP\t_MBP\Debug.060/t_MBP.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
t_MBP.exe - 3 error(s), 0 warning(s)
この cpp では MFC を使用しているので,「共有 DLL で MFC を使用」に変更する.