コンソール AP で SetRegistryKey …
以前一度やっているが…
https://dev.mish.work/wordpress/2015/01/28/console-ap-reg-read/
class CMy_App : public CWinApp {
public:
void SetRegistryKey_ (LPCTSTR key) { SetRegistryKey(key) ; }
} ;
//CWinApp theApp ;
CMy_App theApp ;
int _tmain (int argc,TCHAR* argv[])
{
_tsetlocale(LC_ALL,_T("")) ;
::reg_argv(argc,argv) ;
{
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
std::terr << _T("Fatal Error: MFC initialization failed") << std::endl ;
}
theApp.SetRegistryKey_(Profile::GetRegKey_Base()) ; // レジストリを使用する
}
if (argc > 1) {
for (int index=1 ; index<argc ; index++) {
tstring fold = argv[index] ;
::test(fold) ;
}
}
else {
tstring def_path = LPCTSTR(::PC_get_current_page()) ;
tstring fold = def_path ;
while(true) {
fold = ::ask_folder(fold.c_str()) ;
if (fold.empty()) { break ; }
::test(fold) ;
}
}
return 0 ;
}
QR コード生成 – 3
今まで幾つかの所でサイトのアドレスの表示に使用してきた.
QRcode Perl CGI & PHP scripts ver. 0.50
これを他で使えないかと調べていると…
- 引数がうまく渡せない.2 つ目以降が無視されているような感じ.
- 100 文字位を超えると正しく表示できない.
どうも php の呼び出し方が悪かったみたいで,…/qr_img.php に与える引数を変更.
{
p_data = p_data.substr(0,106) ;
var last_p = p_data.lastIndexOf('&') ;
if (last_p > 0) {
p_data = p_data.substr(0,last_p) ;
}
s_data = p_data ;
p_data = escape (p_data) ;
p_data = "?d=" + p_data ;
// p_data = p_data + "&e=M" ;
}
使い方は以前と同様で .js のパスを変更.
<script src ="//itl.mydns.jp/_lib/js/i_lib/2022.01/c_qr_img.js"> </script>
<script> call_qr_img_href() ; </script>
XSS , OS Command Injection , …
2004/05 に VBScript で作成したサイト .
その後何度か修正している.2005,2006,2007,2008,2010/01,2011/07,2015/03,2020/02,2020/06 .
幾つかの対応が必要なことは見つけたが,他のチェック内容がないかと思い見つけたサイト.
XSS フィルター回避チートシート
この中で明らかに引っかかったもの.
<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
表示されなくなった.
<IMG “””><SCRIPT>alert(“XSS”)</SCRIPT>”>
LAN 内で,過去のものもテストできる様に設定.
- ASP のあるフォルダ以下をコピー.
- Web サイトの追加.ポートはテスト用に 2015 など.ここまでで,//localhost:2015/ で表示はできる.
- ブラウザでエラーを表示するように設定.
- 32 ビットアプリケーションの有効化.
- LAN 内から表示できる様にする には,「Windows Definder ファイアウォール」の設定が必要.
NAS の証明書の更新
先日 Synology NAS の証明書の期限が切れてしまった.
DSM に入って「コントロールパネル」-「セキュリティ」-「証明書」タブ.
対象のものを「選択」して「右クリック」-「証明書を更新」で更新できる.
以前は「自動更新」できていたが,mish.work を取っていろいろ設定したらうまく更新できなくなったみたい.
mish.work を取ってからは,それぞれの NAS で証明書を取る様に設定した.
今までのものは Synology NAS ,mish.work は QNAP NAS ,as.mish.work は ASUSTOR NAS .
今日 QNAP NAS を見ると自動で更新できたみたい.
これらをもう少しうまくできないものかと…
mish.work の関係を Synology NAS で取得しようとするがうまくいかない.
QNAP NAS ではうまくいっているみたいなので,ds. と as. のみにしてみたが変わらず.
IPv6 が反映されていない関係か?
2021/07/13
うまく取得できないのでしばらく様子見.
::GetDiskFreeSpaceEx , ::statvfs
Win9x が多く存在していた頃のコードの MFC を使用しない方法での書き直し.
前のものは次の様になっている.
// J048221 SDK32:GetDiskFreeSpace と GetDiskFreeSpaceEx について
typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER,PULARGE_INTEGER, PULARGE_INTEGER);
// ..
fResult = ::GetDiskFreeSpace(pszDrive,&SectorsPerCluster,&BytesPerSector,&FreeClusters,&TotalClusters) ;
if (fResult) {
TotalBytes = (__int64)TotalClusters * SectorsPerCluster * BytesPerSector ;
TotalFreeBytes = (__int64)FreeClusters * SectorsPerCluster * BytesPerSector ;
FreeBytesAvailable = TotalFreeBytes ;
}
// ..
{
P_GDFSE pGetDiskFreeSpaceEx = NULL;
#ifdef UNICODE
pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")),"GetDiskFreeSpaceExW") ;
#else
pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")),"GetDiskFreeSpaceExA") ;
#endif
if (pGetDiskFreeSpaceEx) {
fResult = pGetDiskFreeSpaceEx (pszDrive,
(PULARGE_INTEGER)&FreeBytesAvailable,
(PULARGE_INTEGER)&TotalBytes,
(PULARGE_INTEGER)&TotalFreeBytes);
}
}
https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/231497
Windows 環境では次の様な感じ?
class DiskFree {
public:
DiskFree () { Free = Total = 0 ; }
public:
u_64 Free ;
u_64 Total ;
} ;
DiskFree GetDiskFree (LPCTSTR path)
{
DiskFree df ;
u_64 freeC = 0 ;
u_64 free = 0 ;
u_64 total = 0 ;
if (::GetDiskFreeSpaceEx(path,(PULARGE_INTEGER)&freeC,(PULARGE_INTEGER)&total,(PULARGE_INTEGER)&free)) {
df.Free = free ;
df.Total= total;
}
return df ;
}
Linux 環境では ::statvfs が使えるみたいで,次の様なコードで取得してデバッガで確認.
#include <iostream>
#include <sys/statvfs.h>
int main()
{
struct statvfs vfs = { 0 } ;
::statvfs(".", &vfs) ;
return 0 ;
}
vfs {...} statvfs
f_bsize 4096 unsigned long
f_frsize 4096 unsigned long
f_blocks 1452408524 __fsblkcnt_t
f_bfree 200259802 __fsblkcnt_t
f_bavail 199469255 __fsblkcnt_t
f_files 183001088 __fsfilcnt_t
f_ffree 181248356 __fsfilcnt_t
f_favail 181248356 __fsfilcnt_t
f_fsid 3941329918106335254 unsigned long
f_flag 4096 unsigned long
f_namemax 255 unsigned long
__f_spare int [6]
[0] 0 int
[1] 0 int
[2] 0 int
[3] 0 int
[4] 0 int
[5] 0 int
Iwao@AS5202T:/volume1/home/Iwao $ cd gcc_test/Test/t_linux/T_vfs/T_s_vfs/
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $ ll
total 12
drwxrwxrwx 2 Iwao users 4.0K Jul 1 22:01 ./
drwxrwxrwx 4 Iwao users 4.0K Jul 1 22:00 ../
-rwxrwxrwx 1 Iwao users 581 Jul 1 21:55 T_s_vfs.cpp*
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $ cat T_s_vfs.cpp
#include <iostream>
#include <clocale>
#include <sys/statvfs.h>
#include "_tdefine.hxx"
#include "t_tstrng.hxx"
int _tmain (int argc,TCHAR* argv[])
{
_tsetlocale(LC_ALL,_T("")) ;
{
struct statvfs vfs = { 0 } ;
if (::statvfs(".", &vfs) == 0) {
u_64 free = vfs.f_bavail * vfs.f_frsize ;
u_64 total= vfs.f_blocks * vfs.f_frsize ;
std::tout << ::To_tstring_Ki(free) << _T(" / ") << ::To_tstring_Ki(total) << std::endl ;
std::tout << ::To_tstring_cs(free) << _T(" / ") << ::To_tstring_cs(total) << std::endl ;
}
}
return 0 ;
}
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $ g++ T_s_vfs.cpp -Wall
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $ ./a.out
760.90 G / 5.41 T
817,005,420,544 / 5,949,065,314,304
Iwao@AS5202T:/volume1/home/Iwao/gcc_test/Test/t_linux/T_vfs/T_s_vfs $
NAS lxcdebian10 と VC 2019
ASUSTOR NAS 上の Debian と VC 2019 を使用してのビルドとデバッグ.
VC で次の様なエラーになっている.
lxcdebian10 にツールがありません: gdb rsync zip
次の所にある様に必要なものをインストール.
Linux development with C++ in Visual Studio
丁度 1 年前にやっていた みたいで,その時より 安定したか?