ホーム › Networking.ActiveDirectory › ADS_VLV
ADS_VLV
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwBeforeCount | DWORD | 4 | +0 | +0 | クライアントがサーバーに要求する、ターゲットエントリより前のエントリの数を示します。 |
| dwAfterCount | DWORD | 4 | +4 | +4 | クライアントがサーバーに要求する、ターゲットエントリより後のエントリの数を示します。 |
| dwOffset | DWORD | 4 | +8 | +8 | 入力時は、リスト内で要求するターゲットエントリのオフセットを示します。クライアントが、自身の想定するコンテンツ数と等しいオフセットを指定した場合、ターゲットはリストの最後のエントリになります。出力時は、返されたターゲットエントリのリスト内での実際のオフセットに関する、サーバーによる最良の推定値を示します。 |
| dwContentCount | DWORD | 4 | +12 | +12 | 入力値は、クライアントが推定したコンテンツ数を表します。出力値は、サーバーが推定したコンテンツ数です。クライアントがコンテンツ数として 0 を送信した場合、サーバーはクライアントの値の代わりに自身の推定値を使用しなければなりません。 |
| pszTarget | LPWSTR | 8/4 | +16 | +16 | 省略可能です。クライアントが要求する目的のターゲットエントリを示す、NULL で終わる Unicode 文字列です。このパラメーターに NULL 以外の値が指定されている場合、サーバーは dwOffset に指定された値を無視し、リストの並べ替え順に基づいて、プライマリソートキーの値が指定された文字列以上である最初のターゲットエントリを検索します。 |
| dwContextIDLength | DWORD | 4 | +24 | +20 | 省略可能です。コンテキスト識別子の長さを示すパラメーターです。入力時、lpContextID でコンテキスト識別子を渡す場合は、その識別子のサイズをバイト単位で設定しなければなりません。それ以外の場合は 0 に設定しなければなりません。出力時、lpContextID に NULL 以外の値が含まれている場合は、サーバーが返したコンテキスト ID の長さをバイト単位で示します。 |
| lpContextID | BYTE* | 8/4 | +32 | +24 | 省略可能です。サーバーが生成したコンテキスト識別子を示します。このパラメーターはクライアントに送信されることがあります。クライアントがこのパラメーターを受け取った場合は、同じリストに関連する後続の要求で変更せずに返す必要があります。このやり取りによって、サーバーのパフォーマンスと効率が向上する場合があります。サーバーにコンテキスト識別子を渡さない場合、このメンバーは NULL 値に設定しなければなりません。出力時、このメンバーに NULL 以外の値が含まれている場合は、サーバーが返したコンテキスト ID を指します。 |
公式ドキュメント
ADS_VLV 構造体は、仮想リストビュー (VLV) 検索を実行するために使用するメタデータを格納します。この構造体は 2 つの役割を持ちます。1 つ目は、サーバーに送信する検索設定を指定することです。2 つ目は、サーバーから VLV メタデータを返すことです。
解説(Remarks)
dwContentCount と dwOffset によって VLV を設定するには、pszTarget も NULL 値に設定する必要があります。pszTarget に NULL 以外の値が含まれている場合は、それがオフセットとして使用されます。それ以外の場合は lOffset がオフセットとして使用されます。この構造体は 0 で初期化することをお勧めします。
例
次のコード例は、結果セットの最初の 30 エントリを取得する方法を示しています。
ADS_SEARCHPREF_INFO prefInfo[2];
ADS_VLV vlv;
vlv.dwBeforeCount=0;
vlv.dwAfterCount=30;
vlv.dwOffset=1;
vlv.dwContentCount=0;
vlv.pszTarget = NULL;
vlv.dwContextIDLength = 0;
vlv.lpContextID = NULL;
// VLV の検索設定。
prefInfo[0].dwSearchPref = ADS_SEARCHPREF_VLV;
prefInfo[0].vValue.dwType = ADSTYPE_PROV_SPECIFIC;
prefInfo[0].vValue.ProviderSpecific.dwLength = sizeof(ADS_VLV);
prefInfo[0].vValue.ProviderSpecific.lpValue = (LPBYTE) &vlv;
// ソートキーの検索設定。
prefInfo[1].dwSearchPref = ADS_SEARCHPREF_SORT_ON;
prefInfo[1].vValue.dwType = ADSTYPE_PROV_SPECIFIC;
prefInfo[1].vValue.ProviderSpecific.dwLength = sizeof(ADS_SORTKEY);
prefInfo[1].vValue.ProviderSpecific.lpValue = (LPBYTE) pSortKey;
hr = m_pSearch->SetSearchPreference(prefInfo, 2);
次のコード例は、結果セットのうち文字 "Ha" で始まる最初の 50 エントリを取得する方法を示しています。
ADS_VLV vlv;
vlv.dwBeforeCount=0;
vlv.dwAfterCount=50;
vlv.pszTarget= L"Ha";
vlv.lpContextID = NULL;
vlv.dwContextIDLength = 0;
// 設定の指定方法の詳細については、前のコード例を参照してください。
次のコード例は、サーバーが以前に dwContentCount として 4294 を返したと仮定して、およそ 60% の位置にあるターゲットから最初の 100 エントリを取得する方法を示しています。
注 vlvResp は、サーバーが以前に返した ADS_VLV 構造体を表します。
ADS_VLV vlv;
vlv.dwBeforeCount=50;
vlv.dwAfterCount=50;
vlv.dwOffset=2577;
vlv.dwContentCount=4294;
vlv.pszTarget = NULL;
vlv.dwContextIDLength = vlvResp.dwContextIDLength;
vlv.lpContextID = vlvResp.lpContextID;
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// ADS_VLV (x64 40 / x86 28 バイト)
typedef struct ADS_VLV {
DWORD dwBeforeCount;
DWORD dwAfterCount;
DWORD dwOffset;
DWORD dwContentCount;
LPWSTR pszTarget;
DWORD dwContextIDLength;
BYTE* lpContextID;
} ADS_VLV;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ADS_VLV
{
public uint dwBeforeCount;
public uint dwAfterCount;
public uint dwOffset;
public uint dwContentCount;
public IntPtr pszTarget;
public uint dwContextIDLength;
public IntPtr lpContextID;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ADS_VLV
Public dwBeforeCount As UInteger
Public dwAfterCount As UInteger
Public dwOffset As UInteger
Public dwContentCount As UInteger
Public pszTarget As IntPtr
Public dwContextIDLength As UInteger
Public lpContextID As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class ADS_VLV(ctypes.Structure):
_fields_ = [
("dwBeforeCount", wintypes.DWORD),
("dwAfterCount", wintypes.DWORD),
("dwOffset", wintypes.DWORD),
("dwContentCount", wintypes.DWORD),
("pszTarget", ctypes.c_void_p),
("dwContextIDLength", wintypes.DWORD),
("lpContextID", ctypes.c_void_p),
]#[repr(C)]
pub struct ADS_VLV {
pub dwBeforeCount: u32,
pub dwAfterCount: u32,
pub dwOffset: u32,
pub dwContentCount: u32,
pub pszTarget: *mut core::ffi::c_void,
pub dwContextIDLength: u32,
pub lpContextID: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type ADS_VLV struct {
dwBeforeCount uint32
dwAfterCount uint32
dwOffset uint32
dwContentCount uint32
pszTarget uintptr
dwContextIDLength uint32
lpContextID uintptr
}type
ADS_VLV = record
dwBeforeCount: DWORD;
dwAfterCount: DWORD;
dwOffset: DWORD;
dwContentCount: DWORD;
pszTarget: Pointer;
dwContextIDLength: DWORD;
lpContextID: Pointer;
end;const ADS_VLV = extern struct {
dwBeforeCount: u32,
dwAfterCount: u32,
dwOffset: u32,
dwContentCount: u32,
pszTarget: ?*anyopaque,
dwContextIDLength: u32,
lpContextID: ?*anyopaque,
};type
ADS_VLV {.bycopy.} = object
dwBeforeCount: uint32
dwAfterCount: uint32
dwOffset: uint32
dwContentCount: uint32
pszTarget: pointer
dwContextIDLength: uint32
lpContextID: pointerstruct ADS_VLV
{
uint dwBeforeCount;
uint dwAfterCount;
uint dwOffset;
uint dwContentCount;
void* pszTarget;
uint dwContextIDLength;
void* lpContextID;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; ADS_VLV サイズ: 28 バイト(x86)
dim st, 7 ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; dwBeforeCount : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwAfterCount : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwOffset : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwContentCount : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; pszTarget : LPWSTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwContextIDLength : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; lpContextID : BYTE* (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ADS_VLV サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwBeforeCount : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwAfterCount : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwOffset : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwContentCount : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; pszTarget : LPWSTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; dwContextIDLength : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; lpContextID : BYTE* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global ADS_VLV
#field int dwBeforeCount
#field int dwAfterCount
#field int dwOffset
#field int dwContentCount
#field intptr pszTarget
#field int dwContextIDLength
#field intptr lpContextID
#endstruct
stdim st, ADS_VLV ; NSTRUCT 変数を確保
st->dwBeforeCount = 100
mes "dwBeforeCount=" + st->dwBeforeCount