0

ファイルの所有権を変更するか、Powerbuilder を使用してファイルを作成したユーザーの所有権を取り消す必要があります。つまり、私のアプリケーションでユーザーがファイルを作成し、コード内ですぐにファイルから所有権を削除したいと考えています。そのため、そのユーザーはファイルを編集または変更できません。同じ ( Windows でのファイル所有者の変更)の c++ サンプルをいくつか見つけましたが、Powerbuilder で複製できませんでした。SetNamedSecurityInfoW を呼び出すと、以下のコードでエラー コード 87 が発生します。Powerbuilderを使用して所有権の変更を達成するのを手伝ってくれる人がいれば.


CONSTANT Integer SE_FILE_OBJECT = 1
CONSTANT Integer OWNER_SECURITY_INFORMATION = 1
CONSTANT Integer NAME_SIZE = 64
CONSTANT Integer SID_SIZE = 32
String domain_name 
Integer ret, sid_len, domain_len 


integer li_ret, newowner
n_filesys nvo

Integer l_nothing
SetNull(l_nothing)
newowner = 100
li_ret = nvo.SetNamedSecurityInfoW('P:\My Documents\Test.txt',SE_FILE_OBJECT,OWNER_SECURITY_INFORMATION,newowner,l_nothing,l_nothing,l_nothing)

    If li_ret <> 0 Then
                messagebox("Hi","Error")
    end if

---------------------------------------------------------------------
Declaration of SetNamedSecurityInfoW:---

Function Integer SetNamedSecurityInfo ( &
   String ObjectName, &
    Integer ObjectType, &
    Integer SecurityInfo, &
    Long sidOwner, &
    Long sidGroup, &
    Long Dacl, &
    Long Sacl &
    ) Library "advapi32.dll"
4

1 に答える 1

1

Windowsシステムエラーコードのリストによると、無効なパラメータがあります。私の推測では、sidOwner、sidGroup、Dacl、およびSaclパラメーターです。これらはすべて構造体へのポインタであるため、実際に構造体を定義し、参照によって渡すのがおそらく最善でしょう。sidOwnerに整数を渡すと、間違いなく問題が発生します。構造の宣言もそれほど単純ではありませんが、ここのドキュメントを使用して開始できます。

于 2012-06-29T15:06:13.067 に答える