はじめまして ピンです。
早速の質問なんですが...
WindowsNTのフォルダ等のアクセス権を
コード上で変更したいんですが
APIヘルプを見ると、それらしき関数はあるみたいなんですが
意味合いの理解が出来ず、わかりません。
変更するユーザーはAdminiです。
どなたか、「この関数を使え」でもいいですから
教えていただけないでしょうか。
「チャミ」 SetNamedSecurityInfo関数を使え。以上です。
「ゆうこ」 なんや、それだけかい。シンプルな回答やな〜。
「チャミ」 だってぇ〜、ピンさんがそうおっしゃってるじゃないですか♪
「ゆうこ」 そやけど、もうチョイ花を添えたってもエエやろ。
「チャミ」 では、赤いチューリップを添えて… 花言葉は「美しい瞳」…まぁ私にピッタリ♪
「ゆうこ」 オイ!
HPNewsさん、それと「チャミ」さん、「ゆうこ」さん
レス、ありがとうございます。
早速、やってみようと思います。
またお願いします。
HPNewsさん、それと「チャミ」さん、「ゆうこ」さん から教えてもらった
SetNamedSecurityInfoを色々調べるとVBのコードを見つけ
それを自分なりに調べながらやってみたのですが
どうしてもうまく行きません。
下にコードを書きますのでおかしいところをご指摘していただけないでしょうか。
//英語のページを見つけこうしろ言われこうしました。
function MySetEntriesInAcl(cCountOfExplicitEntries: ULONG; pListOfExplicitEntries: PEXPLICIT_ACCESS_A;
OldAcl: PACL; var NewAcl: PACL): DWORD; stdcall;
function MYSetEntriesInAcl; external 'ACLAPI.DLL' name 'SetEntriesInAclA';
procedure TForm1.Button1Click(Sender: TObject);
var
RetInt:DWORD;
FilePath,MsgStr:string;
pDACL:PEXPLICIT_ACCESS_A;
pOldDACL, pNewDACL:PACL ;
begin
FilePath:= IncludeTrailingBackslash(DirectoryListBox1.Directory) +
ListBox2.Items[ListBox2.ItemIndex];
Panel4.Caption:= FilePath;
if not IsNTFS(FilePath) then
begin
Label3.Caption:= '選択ドライブはNTFSでないため、取得できません。';
Exit;
end;
RetInt:= MySetEntriesInAcl(1,pDACL,pOldDACL,pNewDACL);
if RetInt<>0 then
begin
ShowMessage(SysErrorMessage(GetLastError));
Exit;
end
else
begin
RetInt:= SetNamedSecurityInfo(PChar(FilePath),
SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION,
nil,
nil,
pNewDACL,
nil);
if RetInt<>0 then
begin
ShowMessage(SysErrorMEssage(GetLAstError));
Exit;
end;
end;
end;
以上、 よろしくお願いします。
ツイート | ![]() |