GetAppContainerNamedObjectPathの使用経験がある人はいますか?

vaska11

最近、と呼ばれるWindowsAPIに出くわしましたGetAppContainerNamedObjectPathしかし、どうすれば使えるのかわかりません。

このAPIのmsdnページを見つけました(https://docs.microsoft.com/en-us/windows/win32/api/securityappcontainer/nf-securityappcontainer-getappcontainernamedobjectpath)。しかし、それは正しい例と注釈を持っていません、パラメータは不十分に書かれています。

ERROR_INVALID_PARAMETER(87)最後にエラー発生します。これは、入力したパラメーターに問題があることを示しています。これが私が試したことです。

#define TokenIsAppContainer 29
#define TokenAppContainerSid 31
#define TokenAppContainerNumber 32

typedef struct _TOKEN_APPCONTAINER_INFORMATION {
    PSID TokenAppContainer;
} TOKEN_APPCONTAINER_INFORMATION, *PTOKEN_APPCONTAINER_INFORMATION;

void GetAppContainerProcessInfo(CString & procName)
{
    DWORD dwSize = 0;
    DWORD dwResult;
    HANDLE hToken;
    PTOKEN_APPCONTAINER_INFORMATION pAppCoInfo; 
    WCHAR wcsDebug[1024] = {0,};
    WCHAR * pwSID = NULL;

    typedef BOOL (WINAPI *_LPGETAPPCONTAINERNAMEOBJECTPATH)(HANDLE, PSID, ULONG, LPWSTR, PULONG);

    static _LPGETAPPCONTAINERNAMEOBJECTPATH lpGetAppContainerNamedObjectPath = NULL;

    if (0 == lpGetAppContainerNamedObjectPath)
    {
        HMODULE hKernel32 = LoadLibraryExW(L"kernel32.dll", NULL, 0);
        if (hKernel32)
        {
            lpGetAppContainerNamedObjectPath = reinterpret_cast<_LPGETAPPCONTAINERNAMEOBJECTPATH>(GetProcAddress(hKernel32, "GetAppContainerNamedObjectPath"));
        }
    }

    if (lpGetAppContainerNamedObjectPath)
    {
        DWORD processId = (DWORD)_ttoi((LPCTSTR)procName);
        //HANDLE hProcess = GetProcessHandleByProcessName(procName);
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);

        if(!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken))
        {
            dwResult = GetLastError();
            swprintf_s( wcsDebug, _countof(wcsDebug), L"OpenProcessToken Error(%u) PID(%d)\n", dwResult, processId );
            AfxMessageBox(wcsDebug);
            return;
        }

        if (!GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS) TokenAppContainerSid, NULL, dwSize, &dwSize))
        {
            dwResult = GetLastError();
            if( dwResult != ERROR_INSUFFICIENT_BUFFER ) 
            {
                swprintf_s( wcsDebug, _countof(wcsDebug), L"GetTokenInformation Error %u\n", dwResult );
                AfxMessageBox(wcsDebug);
                return;
            }
        }

        pAppCoInfo = (PTOKEN_APPCONTAINER_INFORMATION) GlobalAlloc( GPTR, dwSize );

        if (!GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS) TokenAppContainerSid, pAppCoInfo, dwSize, &dwSize))
        {
            dwResult = GetLastError();
            swprintf_s( wcsDebug, _countof(wcsDebug), L"GetTokenInformation Error %u\n", dwResult );
            AfxMessageBox(wcsDebug);
            return;
        }

        WCHAR wcsNamedObjectPath[MAX_PATH];
        ULONG ulRetlen = 0;

        BOOL bRet = lpGetAppContainerNamedObjectPath(hToken, pAppCoInfo->TokenAppContainer, _countof(wcsNamedObjectPath), wcsNamedObjectPath, &ulRetlen );
        if (bRet)
        {
            swprintf_s( wcsDebug, _countof(wcsDebug), L"GetAppContainerNamedObjectPath Path(%s)\n", wcsNamedObjectPath );
            AfxMessageBox(wcsDebug);
        }
        else
        {
            dwResult = GetLastError();
            swprintf_s( wcsDebug, _countof(wcsDebug), L"GetAppContainerNamedObjectPath Error %u\n", dwResult );
            AfxMessageBox(wcsDebug);
        }

        if (pwSID)
            LocalFree(pwSID);

        CloseHandle(hToken)
        CloseHandle(hProcess);
    }
}

補足として、wchar_t *メモリバッファを使用してGetAppContainerNamedObjectPath2回呼び出すことで動的に割り当てることを試みました。しかし、それでもチャンスはありませんでした。戻り長は意味のある値を返しません。

RbMm

あなたが得た後にRtlGetLastNtStatus();代わりGetLastError();電話する場合GetAppContainerNamedObjectPath

STATUS_INVALID_PARAMETER_MIX-パラメータの無効な組み合わせが指定されました。

これにより、単に無効なパラメータと比較してより多くの情報が得られます。

次に、関数のシグネチャを探します

BOOL
WINAPI
GetAppContainerNamedObjectPath(
    _In_opt_ HANDLE Token,
    _In_opt_ PSID AppContainerSid,
    _In_ ULONG ObjectPathLength,
    _Out_writes_opt_(ObjectPathLength) LPWSTR ObjectPath,
    _Out_ PULONG ReturnLength
    );

トークンAppContainerSidはして宣言In_optこのパラメータはオプションであることを、この平均値を、そしてあなたはそれの場所のいずれかに0を渡すことができます- 。次に、自分自身に尋ねます-TokenAppContainerSidのトークンに何を照会しますか?このトークンをAPIに渡すと、システムはこれを実行できませんか?明らかなことができます。したがって、これを自分で行う必要はありません。実際には、トークンをapiに渡す必要があります。この場合、AppContainerSidは0である必要があります。または、AppContainerSidをapiに渡すことができ、この場合、トークンは0である必要があります。AppContainerSidTokenの両方がゼロでない場合-あなたとSTATUS_INVALID_PARAMETER_MIX

補足としても、PROCESS_ALL_ACCESSトークンを取得する必要がある場合は、オープンプロセスは必要ありませんPROCESS_QUERY_LIMITED_INFORMATION十分です


本当にapiは大きな魔法をしません。それはあなたに戻ります

AppContainerNamedObjects\<Sid>

パス、ここで、アプリコンテナsidの文字列形式(S-1-15-2 -...など

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Elastic BeanstalkでWorkboxを使用した経験のある人はいますか?検出されない

分類Dev

Elastic BeanstalkでWorkboxを使用した経験のある人はいますか?検出されない

分類Dev

LXCコンテナでMapReduceを実行した経験のある人はいますか?

分類Dev

ユニットテストのためにHWUTの使用経験を報告できる人はいますか?

分類Dev

.CSDEFと.CSCFGの内容について、経験則を知っている人はいますか?

分類Dev

DNS-SD:「mdnsjava」の使用経験はありますか?

分類Dev

Promise NS4300サーバーディスクからファイルを回復した経験のある人はいますか?

分類Dev

ISOBUS(ISO 11783-10)バイナリタイムログファイルを読んだ経験のある人はいますか?

分類Dev

Matlabで行列乗算、sum()、またはforループをいつ使用するかについての経験則はありますか?

分類Dev

Python。このプログラミングの問題を解決するための私の解決策が奇妙であるかどうか知りたいですか?また、より多くの経験を持っている人からの適切な解決策は何でしょうか

分類Dev

誰もがEclipse GMFの経験がありますか?

分類Dev

CLLocationManagerと精度の問題-何か経験はありますか?

分類Dev

Raspberry PIでのJavaの経験はありますか?

分類Dev

誰でもAppScaleの経験がありますか?

分類Dev

Drools FlowやOSWorkflowの経験はありますか?

分類Dev

Backbone.MarionetteでtriggerまたはtriggerMethodをいつ使用するかを決定する経験則はありますか?

分類Dev

ServiceStackOrmliteのpostgresjsonbに問題がある人はいますか?

分類Dev

C ++の関数の戻り値の型としてポインターまたは参照を使用する際の経験則はありますか?

分類Dev

CLIを設計するとき、オプションまたはサブコマンドを使用するための好み/経験則はありますか?

分類Dev

JUnitテストケースの工数を見積もるための経験則はありますか?

分類Dev

RAMのアップグレードに関する経験則はありますか?

分類Dev

iPhoneXRシミュレーターの横向きでSwifUINavigationViewを使用した経験はありますか?

分類Dev

iPhoneXRシミュレーターの横向きでSwifUINavigationViewを使用した経験はありますか?

分類Dev

Terracottaオープンソースを使用した経験はありますか?

分類Dev

'name'キーを持つ配列の代わりにJSONオブジェクトを使用する場合の経験則はありますか?

分類Dev

バックミンスターの実世界経験はありますか?

分類Dev

Androidでのインスタンス化に経験則はありますか?

分類Dev

httpのrxjsからtoPromiseとPromise.allを使用したことがある人はいますか

分類Dev

ほとんどの経験豊富なプログラマーがIDEに暗いテーマを使用することを好むのはなぜですか?

Related 関連記事

  1. 1

    Elastic BeanstalkでWorkboxを使用した経験のある人はいますか?検出されない

  2. 2

    Elastic BeanstalkでWorkboxを使用した経験のある人はいますか?検出されない

  3. 3

    LXCコンテナでMapReduceを実行した経験のある人はいますか?

  4. 4

    ユニットテストのためにHWUTの使用経験を報告できる人はいますか?

  5. 5

    .CSDEFと.CSCFGの内容について、経験則を知っている人はいますか?

  6. 6

    DNS-SD:「mdnsjava」の使用経験はありますか?

  7. 7

    Promise NS4300サーバーディスクからファイルを回復した経験のある人はいますか?

  8. 8

    ISOBUS(ISO 11783-10)バイナリタイムログファイルを読んだ経験のある人はいますか?

  9. 9

    Matlabで行列乗算、sum()、またはforループをいつ使用するかについての経験則はありますか?

  10. 10

    Python。このプログラミングの問題を解決するための私の解決策が奇妙であるかどうか知りたいですか?また、より多くの経験を持っている人からの適切な解決策は何でしょうか

  11. 11

    誰もがEclipse GMFの経験がありますか?

  12. 12

    CLLocationManagerと精度の問題-何か経験はありますか?

  13. 13

    Raspberry PIでのJavaの経験はありますか?

  14. 14

    誰でもAppScaleの経験がありますか?

  15. 15

    Drools FlowやOSWorkflowの経験はありますか?

  16. 16

    Backbone.MarionetteでtriggerまたはtriggerMethodをいつ使用するかを決定する経験則はありますか?

  17. 17

    ServiceStackOrmliteのpostgresjsonbに問題がある人はいますか?

  18. 18

    C ++の関数の戻り値の型としてポインターまたは参照を使用する際の経験則はありますか?

  19. 19

    CLIを設計するとき、オプションまたはサブコマンドを使用するための好み/経験則はありますか?

  20. 20

    JUnitテストケースの工数を見積もるための経験則はありますか?

  21. 21

    RAMのアップグレードに関する経験則はありますか?

  22. 22

    iPhoneXRシミュレーターの横向きでSwifUINavigationViewを使用した経験はありますか?

  23. 23

    iPhoneXRシミュレーターの横向きでSwifUINavigationViewを使用した経験はありますか?

  24. 24

    Terracottaオープンソースを使用した経験はありますか?

  25. 25

    'name'キーを持つ配列の代わりにJSONオブジェクトを使用する場合の経験則はありますか?

  26. 26

    バックミンスターの実世界経験はありますか?

  27. 27

    Androidでのインスタンス化に経験則はありますか?

  28. 28

    httpのrxjsからtoPromiseとPromise.allを使用したことがある人はいますか

  29. 29

    ほとんどの経験豊富なプログラマーがIDEに暗いテーマを使用することを好むのはなぜですか?

ホットタグ

アーカイブ