ファイル書き込み権限確認モジュールfilewritechk.hsp

/*
ファイル書き込み権限確認モジュール
Copyright(C) SekiSekki
Version:1.0.0

Windowsの各種ファイルへの書き込みができるかどうか確認するモジュールです。

※ライセンス表示
	  当ソースコードのライセンス表示は以下のとおりです。
	  ライセンスは3条項BSDライセンスに相当します。
	  (凡例: #著作権表示 *本条件 +免責条項)
	-----------------------------------------------------------------------
	# Copyright (c) 2020,SekiSekki
	  All rights reserved.

	  ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
	  以下の条件を満たす場合に限り、再頒布および使用が許可されます。

	* ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
	  および下記免責条項を含めること。

	* バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、
	  上記の著作権表示、本条件一覧、および下記免責条項を含めること。

	* 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または
	  販売促進に、SekiSekki(SekiSekki.net)の名前またはコントリビューターの名前を
	  使用してはならない。

	+ 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」
	  提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する
	  適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。
	  著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを
	  問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為で
	  あるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、
	  本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、
	  使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)
	  直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、
	  一切責任を負わないものとします。
	-----------------------------------------------------------------------
*/

/*-------HDL 説明事項------------
%dll
filewritechk
ファイル書き込み権限確認モジュール
Windowsの各種ファイルへの書き込みができるかどうか確認するモジュールです。

%port
Win

%author
Copyright(C) SekiSekki

%url
https://sekisekki.net/

%note
当モジュールをcommonフォルダにコピーして、#include でインクルードすることで使用可能。
commonフォルダ内にこのファイルが存在するとき、HSP Docs Libraryに自動的に命令が登録されます。
実行ファイルのあるディレクトリにHSPCMP.dllを設置する必要があります。

%group
外部拡張モジュール
*/

#module
#defcfunc fileaccess_check str p1
/*---------HDL 説明事項----------
%index
fileaccess_check
ファイル書込アクセス権限の確認

%inst
概要
ファイル書き込みのアクセスができるかどうかを確認します。

%prm
(str P1)
 P1:書き込み可能かどうかを調べるファイル名


val:戻り値
 int:0 書込不可能 またはファイルが存在しない
 int:1 書込可能

%sample
;サンプルスクリプト
#include "filewritechk.hsp"
	FP="C:\\windows\\explorer.exe"
	exist FP
	mes "書き込みが禁止されているファイルの場合"
	mes "ファイルパス:"+FP
	mes "ファイルサイズ:"+strsize+" "
	mes "書き込み権限:"+fileaccess_check(FP)
	mes
	FP="C:\\windows\\system.ini"
	exist FP
	mes "書き込みできるファイルの場合"
	mes "ファイルパス:"+FP
	mes "ファイルサイズ:"+strsize+" "
	mes "書き込み権限:"+fileaccess_check(FP)
	mes
	FP="nofile.txt"
	exist FP
	mes "存在しないファイル名の場合"
	mes "ファイルパス:"+FP
	mes "ファイルサイズ:"+strsize+" "
	mes "書き込み権限:"+fileaccess_check("nofile.txt")

%href
exist
bsave
notesave

%-------------------*/
#include "kernel32.as"
#define GENERIC_WRITE 0x40000000
#define GENERIC_READ 0x80000000
#define FILE_ATTRIBUTE_NORMAL 0x00000080
#define OPEN_EXISTING 3
	s=0
	fn=p1
	CreateFile fn,GENERIC_READ+GENERIC_WRITE,7,varptr(s),OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
	st=stat	
	if stat>=0:CloseHandle st:return 1
	return 0
#global