2017年11月13日月曜日

NEC VersaPro VY17F/LV-MのSSD更新(mSATA→IDE変換)

注1:全て自己責任でお願いします。責任は一切取れません。
注2:mSATAのSSDが絶滅危惧種?気にするな
注3:転んでも泣かない。






私のVY17F/LV-Mも中古で買ってから8年、発売されてから12年も経過…12年!?うせやろ!?

非対応が増えてWindowsXPで戦うのもつらい昨今、PenM1.7GHzじゃパワー不足で如何ともしがたい今日この頃。つらい(つらい)

というかFirefox ESR52がアホみたいに重いのなんなの?頭にきて19.0.2まで戻しました(脆弱性)

あとAVGもAVG ZenとやらがCPU100%張り付きでやってられないのでAVG2012まで戻しました(微妙に長いので多分別記事)

挙句レジストリ書き換えてPOSReady2009に偽装して2019まで延命しようとする始末。メモリ2GBで7はいやーきついっす(しろめ)


などと久しぶりにノートPCで遊んでいたら、

なんでSSD交換してるんですかねぇ(困惑)

という訳で前回はIDEなSSDでしたが今回はmSATA→IDE変換です。UDMA5上限ぶち当たり&NCQ使えないから意味ないゾ♪('A`)

使用したのはコチラ↓

玄人志向 KRHK-mSATA/I9
Transcend TS256GMSA370(MSA370 256GB)

実は結構前に買って放置してた案件だったり…128GBでも十二分に容量余ってたかんな()

どうでもいいがこのMSA370君キャッシュがDDR3とまでは書いてるんだけど容量は一切書いてない。S.M.A.R.T.やピンアサインまで書いてても書かない徹底っぷり。

チップ確認すりゃよかったんだけど見る前に組み込んじゃったのよね。まあ256MBか512MBだから前の128MBよりは増えてるはず。
今売ってるCFDのIDEなSSDはそもそもキャッシュもコントローラも不明なのでそれよりはマシだと思う

※追記※
ぐーぐる画像検索の結果中国で発見寒K4B2G1646F-BCK0…2Gbだから256MBだね。

コントローラは多分Phisonだろうとの事。2014年発売だしキャッシュがDDR3なのでPS3108-S8がベースなんかな?

ちなみに64GB(TS64GMSA370)と128GB(TS128GMSA370)はK4B1G1646-BCH9(1Gb=128MB)、512GB(TS512GMSA370)がK4B4G1646D-BYK0(4Gb=512MB)らしいです。

1TB(TS1TMSA370)は出てこなかったんだけど多分512MBでしょう。
※追記※

とまあ組んでみると、

1 3 7 G B の 壁

XPだとプライマリのパーティションが137GB未満だったら無問題だけどな(うろおぼえ)

ちなみに自動判定だとUDMA2病だったので手動UDMA5キメ打ちです。

サクッとコピーしてアライメント調整かけてベンチの時間だコラァ!!

アッハイ
4Kアライメント調整は切ったパーティション以上の未割当領域無いとできないっぽい?

ちなみに交換前のベンチ記録はコチラ↓

投資に見合う結果でしたか…?(小声)

NCQが使えないIDEモードM5Sと比較すると↓のような結果に…

Transcend TS256GMSA370(UDMA5 ICH4-M)


Plextor M5S 256GB(SATA2/IDE SB700)

NCQが使えないSATAってシーケンシャル以外IDEと同じなんですね(しろめ)


そういやTxBENCHでtrim発行できるとの事で試してみたけどココの方法じゃ確認できませんでした()
一応正常に終了してるらしいけどこの変換アダプタtrim透過できないっぽいのよね(Win7プチフリ問題)

2017年11月8日水曜日

【誰得】携帯動画変換君をWindows10で使う【今更?】

ちなみに中の人はCもC++も全然解ってません。





<この話題今更すぎません?>
万能フロントエンドとして個人的に重宝している携帯動画変換君(3GP_Converter)。

ガラケー(A5505SA/W63SA)時代は携帯動画/音声変換、ここ最近はwaifu2xOptiPNGとやりたい放題です。
ちなみに動画ffmpeg音声qtaacencをMP4Boxで結合するのが一番品質が高いと思います

しかーしWindows10で使おうとすると主に以下の症状が出る。

①avscheck.exeがばくはつして氏ぬ
②付属のffmpegがばくはつして氏ぬ
③Setup.exeで設定ファイルを指定して起動するとドラッグアンドドロップができない
参考:携帯動画変換君をWindows10で無理矢理に作動させる - ぼくんちのTV 別館

まあ①はavscheckをリネーム、②は今どきのffmpegを使えばいいので対応は楽。
試せてないけどQT3GPPFlattenとATOMChanger使えればガラケーに積めるファイル作れるはず…ここ最近はffmpegのAAC音質クソだったけど

というかパッチありました。コレ当てればOKでしょう。試してないけど。
【Windows10対応】 携帯動画変換君 魔改造版 – 機械仕掛けのキュリオシティ

魔改造ってどういう改造してるんでしょうね?いっそSetup.exeにもパッチ当てて③も対処してくれればいいのに(謎の上から目線)





<ほぼコピペじゃねーか>
ググってみるとSetupから起動するとドラッグ(ryできないのはSetupが子プロセスに管理者権限を継承するからとの事。

だから通常権限のexplorerから3GP_Converterを起動するとドラッグ(ryできるって訳だね。

そこで試してみるとSetupは単純にカレントディレクトリの3GP_Converterを叩いてる模様。脆弱性じゃ?

つまり間に権限の継承を断ち切る何かを噛ませば回避可能。本当はSetupを改造するのが一番なんだけどバイナリ改造する知識が無い



という訳でいつもの動けばよかろう逝っとけコードです(しろめ)
/*
//////////////////////////////////////////////////////////////
携帯動画変換君をWin10で使うテスト
2017/11/07 柏木てるみ
//////////////////////////////////////////////////////////////
・これは何?
→携帯動画変換君をSetup.exeから起動するとD&Dできない不具合対策
・何をしてるの?
→Setup(ryが管理者権限で3GP(ryを起動するのでD&Dできない
 なので子プロセスを降格させてD&Dできるようにさせます
・使い方
①3GP_Converter.exeを3GP_Converter-exec.exeにリネーム
②コイツを3GP_Converter.exeとしてmakeして投げ込む
③普通にSetup.exeから設定を選んで起動させるだけ
*/
#include <stdio.h>
#include <windows.h>
#include <locale.h>
char crpath[256],t1[256];
WCHAR tpath,t2[256];
char LaunchAsNormalUser(LPCWSTR tpath) /*FirefoxのnsWindowsRestart.cppから拝借*/
{
HWND hwndShell = FindWindowA("Progman", NULL);
DWORD dwProcessId;
GetWindowThreadProcessId(hwndShell,&dwProcessId);
HANDLE hProcessShell = OpenProcess(MAXIMUM_ALLOWED,FALSE,dwProcessId);
if(!hProcessShell)
{
return FALSE;
}
HANDLE hTokenShell;
BOOL ok = OpenProcessToken(hProcessShell, MAXIMUM_ALLOWED, &hTokenShell);
CloseHandle(hProcessShell);
if (!ok)
{
return FALSE;
}
HANDLE hNewToken;
ok = DuplicateTokenEx(hTokenShell,
MAXIMUM_ALLOWED,
NULL,
SecurityDelegation,
TokenPrimary,
&hNewToken);
CloseHandle(hTokenShell);
if (!ok)
{
return FALSE;
}
STARTUPINFOW si = {sizeof(si), 0};
PROCESS_INFORMATION pi = {0};
WCHAR* myenv = GetEnvironmentStringsW();
ok = CreateProcessWithTokenW(hNewToken,
0,
tpath, /*実行ファイルのパス*/
NULL, /*これNULLでよかった*/
CREATE_UNICODE_ENVIRONMENT,
myenv,
NULL,
&si,
&pi);
if (myenv)
FreeEnvironmentStringsW(myenv);
CloseHandle(hNewToken);
if (!ok)
{
return FALSE;
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return TRUE;
}
int main(void)
{
size_t ret;
GetCurrentDirectory(256,crpath); /*カレントディレクトリのパス取得*/
sprintf(t1,"%s\\3GP_Converter-exec.exe",crpath); /*文字列結合してパス作成*/
setlocale( LC_CTYPE, "jpn" ); /*日本語パス対策*/
mbstowcs_s(&ret,t2,256,t1,_TRUNCATE); /*charからWCHARに変換*/
LaunchAsNormalUser(t2); /*権限降格させて起動*/
return 0;
}

肝心要な降格部分は有名なFirefoxのコードをコピペして動くようにいじっただけというこの(GPL汚染)

デスクトップ(Progman)からトークン取得して通常な権限で起動するという処理は判るけど実装は解ってません(無知)

しかし非コピペ部分から醸し出される素人感がすごいですね…変数ってどうやって確保量決めるんでしょう?

一応gccは-Wallでエラー吐かなかったので大丈夫…?脆弱性は知りません('A`)

使い方はコードの通り3GP_Converterを3GP_Converter-execにリネームしてmakeした奴を3GP_Converterとして投げ込むだけ。
これさえバッチファイルで用意しないと出来ない人はおらんよな?

ただ出力先とかの設定ファイルが別になるので再設定が必要。初回だけだけどね。


gcc等コンパイルできる環境が無い、何やってんのか全く解らない人(64bit版限定)は自己責任でこちら↓
3GP_Converter-DnD-Win10.zip
※64bit版RubyのDevkit(gcc4.7.2)で出力したので64bit版専用のはず。-m32指定したらエラー吐いたので32bitバイナリはありません※


※追記※

Setupの互換性の設定が全部解除された状態じゃないと3GP_Converterが起動しません(´・ω・`)

あと元ソースにあったWin2k/WinXP回避部分は無視したのでVista以前だとエラーで氏ぬと思います。Win10以外だと必要無いけど

※追記 - 2021/03/28※
自己責任バイナリで一瞬DOS窓が映るのを修正しました(´・ω・`)make時に-Wl,--subsystem,windows足しただけ
あとオマケでデュアルディスプレイ時に「変換君」設定ファイルセレクターがモニタ1とモニタ2の間に表示される件の対策を蔵出し。
自分用に作ってそのまんまになってた
/*
//////////////////////////////////////////////////////////////
携帯動画変換君の設定ファイルセレクタを画面中央に表示するテスト
2019/05/09 柏木てるみ
//////////////////////////////////////////////////////////////
横並びデュアルディスプレイ時にモニタ1とモニタ2の間に表示されるのをモニタ1中央に移動させる
(縦並び&トリプル以上は要修正)
何故か管理者権限が要るので.manifest書くか"管理者としてこのプログラムを実行する"にチェック入れること
*/
/*メモ:gccに-Wl,--subsystem,windows渡してDOS窓非表示にすること*/
#include <stdio.h>
#include <windows.h>
#include <locale.h>
int main(void)
{
RECT desk,SWND;
HWND hDeskWnd = GetDesktopWindow(),STITL=NULL;
long SX,SY,MX,MY;
WinExec("Setup-exec.exe",SW_HIDE); //オリジナルのSetup.exeをリネームしておくこと
STITL=FindWindowEx(NULL,NULL,NULL,"「変換君」設定ファイルセレクター");
GetWindowRect(hDeskWnd,&desk);
GetWindowRect(STITL,&SWND);
SX=SWND.right-SWND.left;
SY=SWND.bottom-SWND.top;
MX=(desk.right-SX)/2; //移動先のX原点(なんで2なのかわかんない)
MY=(desk.bottom-SY)/2; //移動先のY原点(なんで2なのかわかんない)
MoveWindow(STITL,MX,MY,SX,SY,0);
ShowWindow(STITL,5);
return 0;
}

…ぶっちゃけなんで動いてるのか解らないのでバイナリはありません。