次の方法で共有


CreateDesktopExA 関数 (winuser.h)

指定したヒープを持つ新しいデスクトップを作成し、それを呼び出し元プロセスの現在のウィンドウ ステーションに関連付け、呼び出し元のスレッドに割り当てます。 呼び出し元プロセスには、プロセス作成時にシステムによって割り当てられるか、SetProcessWindowStation 関数によって設定される、関連付けられたウィンドウ ステーションが必要です。

構文

HDESK CreateDesktopExA(
  [in]           LPCSTR                lpszDesktop,
                 LPCSTR                lpszDevice,
                 DEVMODEA              *pDevmode,
  [in]           DWORD                 dwFlags,
  [in]           ACCESS_MASK           dwDesiredAccess,
  [in, optional] LPSECURITY_ATTRIBUTES lpsa,
  [in]           ULONG                 ulHeapSize,
                 PVOID                 pvoid
);

パラメーター

[in] lpszDesktop

作成するデスクトップの名前。 デスクトップ名では大文字と小文字が区別されず、円記号 (\) を含めないようにすることができます。

lpszDevice

このパラメーターは予約されており、NULL である必要があります。

pDevmode

このパラメーターは予約されており、NULL である必要があります。

[in] dwFlags

このパラメーターには、0 または次の値を指定できます。

価値 意味
DF_ALLOWOTHERACCOUNTHOOK
0x0001
デスクトップ上の他のアカウントで実行されているプロセスで、このプロセスにフックを設定できるようにします。

[in] dwDesiredAccess

デスクトップへの要求されたアクセス。 値の一覧については、「デスクトップ セキュリティとアクセス権の」を参照してください。

CreateDesktop 内部 ではハンドルを使用してウィンドウを作成するため、このパラメーターにはDESKTOP_CREATEWINDOWアクセス権を含める必要があります。

[in, optional] lpsa

返されたハンドルを子プロセスによって継承できるかどうかを決定する SECURITY_ATTRIBUTES 構造体へのポインター。 lpsa が NULL の場合、ハンドルを継承できません。

構造体の lpSecurityDescriptor メンバーは、新しいデスクトップのセキュリティ記述子を指定します。 このパラメーターが NULL の場合、デスクトップは親ウィンドウ ステーションからセキュリティ記述子を継承します。

[in] ulHeapSize

デスクトップ ヒープのサイズ (KB 単位)。

pvoid

このパラメーターは予約されており、NULL である必要があります。

戻り値

関数が成功した場合、戻り値は新しく作成されたデスクトップへのハンドルです。 指定したデスクトップが既に存在する場合、関数は成功し、既存のデスクトップにハンドルを返します。 ハンドルの使用が完了したら、CloseDesktop 関数を呼び出して閉じます。

関数が失敗した場合、戻り値は NULL です。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

dwDesiredAccess パラメーターで標準アクセス権のREAD_CONTROL、WRITE_DAC、またはWRITE_OWNERを指定する場合は、DESKTOP_READOBJECTSとDESKTOP_WRITEOBJECTSアクセス権も要求する必要があります。

作成できるデスクトップの数は、システム デスクトップ ヒープのサイズによって制限されます。 デスクトップ オブジェクトは、ヒープを使用してリソースを格納します。 デスクトップ ヒープのサイズを増やすか、対話型ウィンドウ ステーションの各デスクトップ用に予約されている既定のヒープを減らすことで、作成できるデスクトップの数を増やすことができます。 この値は、次のレジストリ値の SharedSection 部分文字列で指定されます: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows。 このレジストリ値の既定のデータは次のとおりです。

%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16

SharedSection 部分文字列の値を次に示します。

  • 最初の SharedSection 値は、すべてのデスクトップに共通する共有ヒープのサイズ (KB 単位) です。
  • 2 番目の SharedSection 値は、対話型ウィンドウ ステーション WinSta0 で作成された各デスクトップに必要なデスクトップ ヒープのサイズ (KB 単位) です。
  • 3 番目の SharedSection 値は、非対話型ウィンドウ ステーションで作成された各デスクトップに必要なデスクトップ ヒープのサイズ (KB 単位) です。

デスクトップ ヒープの既定のサイズは、ハードウェア アーキテクチャなどの要因によって異なります。 デスクトップ ヒープのサイズを取得するには、UOI_HEAPSIZEを使用して GetUserObjectInformation 関数を呼び出します。

手記

winuser.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして CreateDesktopEx を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows Vista [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2008 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winuser.h (Windows.h を含む)
ライブラリ User32.lib
DLL User32.dll

関連項目

CloseDesktop

デスクトップ

SECURITY_ATTRIBUTES

SetProcessWindowStation の

SwitchDesktop

ウィンドウ ステーションとデスクトップ関数の