0

Windows クライアントのユーザーは、ネットワーク共有 (UNC パス) 上のファイルへのリンクを社内の他のユーザーに送信する機能を持っています。

多くの場合、これらのユーザーは、受信者がこの共有にアクセスできるかどうかを知りません。

リンクを送信しているユーザーは既にこの共有に自分の権利で接続されているため、試行錯誤の戦略は不可能です。

したがって、受信者がアクセスできるかどうかを確認するために API 呼び出しを使用することが唯一可能なようですが、これを管理する方法はありますか?

必要なのはメタコードだけです。これをロータス スクリプトに変換する必要があります (ロータス スクリプトでこの問題を解決した人はいないと思います)。

4

2 に答える 2

0

LotusScript を使用しているため、Win API 関数を使用してみましたか?

Declare Function NetShareGetInfo Lib "Netapi32.dll" (strServerName As Any, strNetName As Any, ByVal nLevel As Long, pBuffer As Long) As Long

詳細情報: http://msdn.microsoft.com/en-us/library/aa370654.aspx

于 2011-02-27T20:45:55.517 に答える
0

理論的には、このユーザーがこのファイルに対してどのようなアクセス権を持っているかという質問に答えることができる Windows の「関数」を呼び出すだけで済みます。この情報を提供する (そしてWindows ACL エディターとその効果的なアクセス許可機能で使用される) 唯一の API は、GetEffectiveRightsFromAcl関数です。

ただし、これを使用するには、C での複雑で低レベルのプログラミングが必要です。また、Microsoft KB 記事 #262278に記載されているように、信頼性も低くなります。

これらの制限により、GetEffectiveRightsFromAcl API は使用しないでください。ただし、オーバーライドするユーザーの権限または特権が適切でなく、ターゲット オブジェクトがアクセスを許可または拒否することによって保護されていないことが確実な状況を除きます。疑似グループ。通常、特定のユーザーとセキュリティ保護可能なオブジェクトの正確なアクセス情報は、AccessCheck 関数を介してのみ取得できます。これには、ユーザー ログオン用のアクセス トークンが必要です。

あなたの環境でそれが問題にならないと仮定すると、低レベルのコードを高レベルの COM オブジェクトにラップした codeproject.com でホストされているプロジェクトの恩恵を受けることができます。このプロジェクトはUserAccessCheckと呼ばれ、LotusScript から他の COM オブジェクトと同じようにアクセスできます。

Dim hasWriteAccess as Variant
Dim obNet as Variant

obNet = CreateObject("Pardesi.TrusteeUtil")

hasWriteAccess = obNet.CheckPermissionsOnFile("foo", "bar", "C:\\DataFiles", 0x0002)
Msgbox(hasWriteAccess)

私はこれを自分で試したことはありませんが、ここから始めます。

于 2010-05-26T19:23:56.703 に答える