Files
Joseph Doherty fe2a6db786
rust / build / test / clippy / fmt (push) Has been cancelled
Initial project state: .NET reference, design, Rust port (M0+M1), evidence
Layout:
- src/                    .NET 10 x64 reference: MxNativeCodec, MxNativeClient,
                          MxAsbClient, probes, tests, harnesses. Executable spec.
- design/                 Architectural plan for the Rust port (M0–M6), error
                          model, protocol invariants, risks (R1–R16), adversarial
                          review log (review.md).
- rust/                   Rust workspace. M0 skeleton + M1 codec parity.
                          mxaccess-codec: 215 unit tests + 2 cross-implementation
                          parity tests (byte-identical against .NET reference).
                          Other crates are M0 stubs awaiting M2+.
- captures/               Frida + netsh + pcap evidence per CLAUDE.md
                          ("captures are evidence, not throwaway logs").
- analysis/               Decompiled C# (frida/proxy/decompiled-*),
                          Ghidra exports for native DLLs (`exports/` only —
                          working state at `projects/` and AVEVA's input
                          binaries at `input/` are gitignored).
- docs/                   Reverse-engineering reference docs.
- tools/                  Setup-LiveProbeEnv.ps1 (Infisical credential fetcher),
                          Compute-Crc.ps1 (.NET parity helper).
- .github/workflows/      Rust CI: fmt + build + test + clippy on Windows.
- LICENSE                 MIT (Joseph Doherty, 2026).

Verified:
- cargo test --workspace → 217 passed (215 unit + 2 .NET parity), 0 failed
- cargo clippy --workspace -- -D warnings → clean
- cargo fmt --all -- --check → clean
- cargo publish --dry-run -p mxaccess-codec → packages cleanly

Excluded from history (see .gitignore):
- **/bin, **/obj, **/target — build artifacts
- analysis/ghidra/projects/ — Ghidra working state (regenerable)
- analysis/ghidra/input/ — AVEVA proprietary DLLs (vendor IP)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 06:21:00 -04:00

653 lines
33 KiB
C#

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace Interop.Lmx;
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("5DE3F00B-598F-4783-8607-92BC66390D99")]
public interface IPrimitiveRuntimeSite6 : IPrimitiveRuntimeSite5
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetAttributeValues(out int count, [Out] IntPtr values);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetAttributeValuesById([In] short primitiveId, out int count, [Out] IntPtr values);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void NotifySubscriptionChange([In] ref PrimitiveAttributeTableEntry tableEntry, [In] short primitiveId, [In] short attributeId, [In] short propertyId);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void NotifyCheckpointChange([In] ref PrimitiveAttributeTableEntry tableEntry, [In] short primitiveId, [In] short attributeId, [In] short propertyId);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetPrimitiveAttributeSite([In] short primitiveId, [MarshalAs(UnmanagedType.Interface)] out IPrimitiveRuntimeSite2 ppSite);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void CheckpointAttribute([In] short attributeId, [In] bool checkpoint);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetType([In] short attributeId, out MxDataType value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetLockStatus([In] short attributeId, out MxPropertyLockedEnum pLockStatus);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new int GetNumElements([In] short attributeId);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void SetNumElements([In] short attributeId, [In] int numelements);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new bool GetBoolean([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutBoolean([In] short id, [In] bool value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new bool GetBooleanVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutBooleanVQ([In] short id, [In] short quality, [In] bool value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new bool GetBooleanArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutBooleanArrayItem([In] short id, [In] int index, [In] bool value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutBooleanArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutBooleanQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetBooleanQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetBooleanArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new int GetInteger([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutInteger([In] short id, [In] int value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new int GetIntegerVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutIntegerVQ([In] short id, [In] short quality, [In] int value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new int GetIntegerArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutIntegerArrayItem([In] short id, [In] int index, [In] int value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutIntegerArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutIntegerQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetIntegerQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetIntegerArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new float GetFloat([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutFloat([In] short id, [In] float value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new float GetFloatVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutFloatVQ([In] short id, [In] short quality, [In] float value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new float GetFloatArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutFloatArrayItem([In] short id, [In] int index, [In] float value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutFloatArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutFloatQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetFloatQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetFloatArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new double GetDouble([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutDouble([In] short id, [In] double value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new double GetDoubleVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutDoubleVQ([In] short id, [In] short quality, [In] double value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new double GetDoubleArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutDoubleArrayItem([In] short id, [In] int index, [In] double value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutDoubleArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutDoubleQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetDoubleQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetDoubleArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new VB_LARGE_INTEGER GetElapsedTime([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutElapsedTime([In] short id, [In] ref VB_LARGE_INTEGER value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new VB_LARGE_INTEGER GetElapsedTimeVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutElapsedTimeVQ([In] short id, [In] short quality, [In] ref VB_LARGE_INTEGER value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new VB_LARGE_INTEGER GetElapsedTimeArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutElapsedTimeArrayItem([In] short id, [In] int index, [In] ref VB_LARGE_INTEGER value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutElapsedTimeArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutElapsedTimeQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetElapsedTimeQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetElapsedTimeArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.BStr)]
new string GetString([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutString([In] short id, [In][MarshalAs(UnmanagedType.LPWStr)] string value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.BStr)]
new string GetStringVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutStringVQ([In] short id, [In] short quality, [In][MarshalAs(UnmanagedType.LPWStr)] string value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.BStr)]
new string GetStringArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutStringArrayItem([In] short id, [In] int index, [In][MarshalAs(UnmanagedType.LPWStr)] string value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutStringArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutStringQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetStringQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetStringArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetTime([In] short id, out VBFILETIME value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutTime([In] short id, [In] ref VBFILETIME value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetTimeVQ([In] short id, out short quality, out VBFILETIME value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutTimeVQ([In] short id, [In] short quality, [In] ref VBFILETIME value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetTimeArrayItem([In] short id, [In] int index, out VBFILETIME value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutTimeArrayItem([In] short id, [In] int index, [In] ref VBFILETIME value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutTimeArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutTimeQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetTimeQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetTimeArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetCustomEnum([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomEnum([In] short id, [In] short value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetCustomEnumVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomEnumVQ([In] short id, [In] short quality, [In] short value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetCustomEnumArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomEnumArrayItem([In] short id, [In] int index, [In] short value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomEnumArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomEnumQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetCustomEnumQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetCustomEnumArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.Interface)]
new MxReference GetReference([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutReference([In] short id, [In][MarshalAs(UnmanagedType.Interface)] MxReference value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.Interface)]
new MxReference GetReferenceVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutReferenceVQ([In] short id, [In] short quality, [In][MarshalAs(UnmanagedType.Interface)] MxReference value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.Interface)]
new MxReference GetReferenceArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutReferenceArrayItem([In] short id, [In] int index, [In][MarshalAs(UnmanagedType.Interface)] MxReference value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutReferenceArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutReferenceQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetReferenceQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetReferenceArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new MxStatus GetMxStatus([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxStatus([In] short id, [In] MxStatus value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new MxStatus GetMxStatusVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxStatusVQ([In] short id, [In] short quality, [In] MxStatus value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new MxStatus GetMxStatusArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxStatusArrayItem([In] short id, [In] int index, [In] MxStatus value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxStatusArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxStatusQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetMxStatusQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetMxStatusArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new MxDataType GetMxDataType([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxDataType([In] short id, [In] MxDataType value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new MxDataType GetMxDataTypeVQ([In] short id, out short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxDataTypeVQ([In] short id, [In] short quality, [In] MxDataType value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new MxDataType GetMxDataTypeArrayItem([In] short id, [In] int index);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxDataTypeArrayItem([In] short id, [In] int index, [In] MxDataType value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxDataTypeArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxDataTypeQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetMxDataTypeQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetMxDataTypeArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetCustomStruct([In] short id, out int guid, out int length, [Out] IntPtr value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomStruct([In] short id, [In] int guid, [In] int length, [In] ref byte value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetCustomStructVQ([In] short id, out short quality, out int guid, out int length, [Out] IntPtr value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomStructVQ([In] short id, [In] short quality, [In] int guid, [In] int length, [In] ref byte value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetCustomStructArrayItem([In] short id, [In] int index, out int guid, out int length, [Out] IntPtr value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomStructArrayItem([In] short id, [In] int index, [In] int guid, [In] int length, [In] ref byte value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomStructArrayQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomStructQ([In] short id, [In] short quality);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetCustomStructQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetCustomStructArrayQ([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void NotifyBROProxyOfAttributeChangeEx([In] ref PrimitiveAttributeTableEntry tableEntry, [In] short primitiveId, [In] short attributeId, [In] short propertyId, [In][MarshalAs(UnmanagedType.Interface)] MxValue pMxValue, out int writeToAttribute);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new bool GetBooleanVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutBooleanVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] bool value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetBooleanT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutBooleanT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetBooleanArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutBooleanArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new int GetIntegerVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutIntegerVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] int value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetIntegerT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutIntegerT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetIntegerArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutIntegerArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new float GetFloatVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutFloatVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] float value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetFloatT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutFloatT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetFloatArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutFloatArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new double GetDoubleVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutDoubleVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] double value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetDoubleT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutDoubleT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetDoubleArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutDoubleArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new VB_LARGE_INTEGER GetElapsedTimeVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutElapsedTimeVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] ref VB_LARGE_INTEGER value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetElapsedTimeT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutElapsedTimeT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetElapsedTimeArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutElapsedTimeArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.BStr)]
new string GetStringVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutStringVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In][MarshalAs(UnmanagedType.LPWStr)] string value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetStringT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutStringT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetStringArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutStringArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetTimeVTQ([In] short id, out short quality, out _FILETIME timeStamp, out VBFILETIME value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutTimeVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] ref VBFILETIME value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetTimeT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutTimeT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetTimeArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutTimeArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new short GetCustomEnumVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomEnumVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] short value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetCustomEnumT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomEnumT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetCustomEnumArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomEnumArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.Interface)]
new MxReference GetReferenceVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutReferenceVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In][MarshalAs(UnmanagedType.Interface)] MxReference value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetReferenceT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutReferenceT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetReferenceArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutReferenceArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new MxStatus GetMxStatusVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxStatusVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] MxStatus value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetMxStatusT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxStatusT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetMxStatusArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxStatusArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new MxDataType GetMxDataTypeVTQ([In] short id, out short quality, out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxDataTypeVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] MxDataType value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetMxDataTypeT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxDataTypeT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetMxDataTypeArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutMxDataTypeArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetCustomStructVTQ([In] short id, out short quality, out _FILETIME timeStamp, out int guid, out int length, [Out] IntPtr value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomStructVTQ([In] short id, [In] short quality, [In] _FILETIME timeStamp, [In] int guid, [In] int length, [In] ref byte value);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetCustomStructT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomStructT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new _FILETIME GetCustomStructArrayT([In] short id);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutCustomStructArrayT([In] short id, [In] _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetAttributeSupportedProperties([In] short attrId, out int SupportedProperties);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetDefaultTimestamp(out _FILETIME timeStamp);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetHasBuffer([In] short attributeId, out bool hasBuffer);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetBuffer([In] short attributeId, out int length, [Out] IntPtr buffer);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void PutBuffer([In] short attributeId, [In] int length, [In] ref byte buffer);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetAttributeBuffers([In] short primitiveId, [Out] IntPtr buffers);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
new void GetAttributeBufferById([In] short primitiveId, [In] short attributeId, [Out] IntPtr buffer);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
void NotifyRetentiveChange([In] short primitiveId, [In] short attributeId, [In] short propertyId, [In][MarshalAs(UnmanagedType.Interface)] MxValue pMxValue, [In] short quality);
}