Files
histsdk/docs/reverse-engineering/dnlib-historyquery-startquery-latest.json
dohertj2 c95824a65d Initial commit: managed .NET 10 AVEVA Historian SDK + reverse-engineering toolkit
Full read-only SDK (src/AVEVA.Historian.Client) implementing the CLAUDE.md required
surface against AVEVA Historian's binary WCF protocol — no native AVEVA runtime
dependency. All operations live-verified against a local Historian:

- ProbeAsync, ReadRawAsync, ReadAggregateAsync, ReadAtTimeAsync, ReadEventsAsync
- BrowseTagNamesAsync, GetTagMetadataAsync (17 native data-type codes mapped)
- GetConnectionStatusAsync, GetStoreForwardStatusAsync, GetSystemParameterAsync
- 108/108 unit + integration tests pass

Includes the reverse-engineering toolkit (tools/AVEVA.Historian.ReverseEngineering)
used to decode the protocol: WCF probes, IL inspection via dnlib, and IL-rewrite
instrumentation (instrument-wcf-{write,read}message etc.) plus the .NET Framework
trace harness (tools/AVEVA.Historian.NativeTraceHarness) for parity testing.

Sanitized handoff evidence under docs/reverse-engineering/. Native AVEVA binaries
(current/, aveva-install-x64/, aveva-install-x86/) are gitignored — fetch separately
from the AVEVA installer.

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

362 lines
17 KiB
JSON

{
"Path": "C:\\Users\\dohertj2\\Desktop\\histsdk\\current\\aahClientManaged.dll",
"Filter": "ArchestrA.HistoryQuery.StartQuery",
"IsILOnly": false,
"IsMixedMode": true,
"Methods": [
{
"DeclaringType": "ArchestrA.HistoryQuery",
"Name": {
"String": "StartQuery",
"Data": "U3RhcnRRdWVyeQ==",
"Length": 10,
"DataLength": 10
},
"Token": "0x060062A1",
"Rva": "0x0044012C",
"IsStatic": false,
"IsPublic": true,
"HasBody": true,
"InstructionCount": 426,
"Calls": [
{
"Offset": "0x0002",
"OpCode": "call",
"Operand": "HistorianClient* ArchestrA.BaseQuery::GetClient(ArchestrA.HistorianAccessError\u0026)",
"Token": "0x060061B5"
},
{
"Offset": "0x000F",
"OpCode": "call",
"Operand": "System.Boolean ArchestrA.HistoryQuery::EndQuery(ArchestrA.HistorianAccessError\u0026)",
"Token": "0x060062A3"
},
{
"Offset": "0x0054",
"OpCode": "calli",
"Operand": "System.Byte modopt(System.Runtime.CompilerServices.CompilerMarshalOverride) modopt(System.Runtime.CompilerServices.CallConvCdecl) (System.IntPtr,System.UInt32 modopt(System.Runtime.CompilerServices.IsLong),System.Boolean* modopt(System.Runtime.CompilerServices.IsImplicitlyDereferenced),SError* modopt(System.Runtime.CompilerServices.IsImplicitlyDereferenced))",
"Token": null
},
{
"Offset": "0x00B1",
"OpCode": "callvirt",
"Operand": "System.Boolean ArchestrA.HistoryQueryArgs::ProcessQueryArgs(ArchestrA.HistorianAccessError\u0026)",
"Token": "0x06006246"
},
{
"Offset": "0x00C7",
"OpCode": "call",
"Operand": "System.String ArchestrA.HistoryQueryArgs::get_Option()",
"Token": "0x06006251"
},
{
"Offset": "0x00D1",
"OpCode": "call",
"Operand": "System.Int32 \u003CModule\u003E::ArchestrA.ConvertHelper.ManagedToUnmanagedString(System.String,System.UInt64,System.Char*)",
"Token": "0x06005823"
},
{
"Offset": "0x00F3",
"OpCode": "call",
"Operand": "System.String ArchestrA.HistoryQueryArgs::get_Filter()",
"Token": "0x06006257"
},
{
"Offset": "0x00FD",
"OpCode": "call",
"Operand": "System.Int32 \u003CModule\u003E::ArchestrA.ConvertHelper.ManagedToUnmanagedString(System.String,System.UInt64,System.Char*)",
"Token": "0x06005823"
},
{
"Offset": "0x0116",
"OpCode": "call",
"Operand": "System.Collections.Specialized.StringCollection ArchestrA.BaseQueryArgs::get_TagNames()",
"Token": "0x060061B7"
},
{
"Offset": "0x011B",
"OpCode": "callvirt",
"Operand": "System.Int32 System.Collections.Specialized.StringCollection::get_Count()",
"Token": "0x0A00041C"
},
{
"Offset": "0x013B",
"OpCode": "call",
"Operand": "System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::std.vector\u003Cwchar_t *,std::allocator\u003Cwchar_t *\u003E \u003E.reserve(std.vector\u003Cwchar_t *,std::allocator\u003Cwchar_t *\u003E \u003E* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst),System.UInt64 modopt(System.Runtime.CompilerServices.IsConst))",
"Token": "0x06005856"
},
{
"Offset": "0x014A",
"OpCode": "call",
"Operand": "System.Void \u003CModule\u003E::___CxxCallUnwindDtor(System.Void (System.Void*),System.Void*)",
"Token": "0x06005C0F"
},
{
"Offset": "0x0152",
"OpCode": "call",
"Operand": "System.Collections.Specialized.StringCollection ArchestrA.BaseQueryArgs::get_TagNames()",
"Token": "0x060061B7"
},
{
"Offset": "0x015A",
"OpCode": "call",
"Operand": "System.Boolean \u003CModule\u003E::ArchestrA.ConvertHelper.ManagedToUnmanagedStrings(System.Collections.Specialized.StringCollection,stx.tsarray* modopt(System.Runtime.CompilerServices.IsImplicitlyDereferenced),ArchestrA.HistorianAccessError\u0026)",
"Token": "0x06005825"
},
{
"Offset": "0x016A",
"OpCode": "call",
"Operand": "QueryColumnSelector* modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::QueryColumnSelector.{ctor}(QueryColumnSelector* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst))",
"Token": "0x06000041"
},
{
"Offset": "0x0174",
"OpCode": "call",
"Operand": "System.Void ArchestrA.HistoryQuery::SelectQueryColumns(ArchestrA.HistoryQueryArgs,QueryColumnSelector* modopt(System.Runtime.CompilerServices.IsImplicitlyDereferenced))",
"Token": "0x0600629C"
},
{
"Offset": "0x017B",
"OpCode": "call",
"Operand": "SMemFile\u003CSCrtAllocator\u003E* modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::SMemFile\u003CSCrtAllocator\u003E.{ctor}(SMemFile\u003CSCrtAllocator\u003E* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst))",
"Token": "0x060011DE"
},
{
"Offset": "0x0193",
"OpCode": "call",
"Operand": "System.Void \u003CModule\u003E::___CxxCallUnwindDtor(System.Void (System.Void*),System.Void*)",
"Token": "0x06005C0F"
},
{
"Offset": "0x01A8",
"OpCode": "call",
"Operand": "System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::SMemFile\u003CSCrtAllocator\u003E.SaveEx(SMemFile\u003CSCrtAllocator\u003E* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst),System.Void modopt(System.Runtime.CompilerServices.IsConst)*,System.UInt64)",
"Token": "0x06000801"
},
{
"Offset": "0x01B4",
"OpCode": "call",
"Operand": "System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::SMemFile\u003CSCrtAllocator\u003E.SaveEx(SMemFile\u003CSCrtAllocator\u003E* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst),System.Void modopt(System.Runtime.CompilerServices.IsConst)*,System.UInt64)",
"Token": "0x06000801"
},
{
"Offset": "0x01C4",
"OpCode": "calli",
"Operand": "SByteStream\u003CSCrtMemFile\u003E* modopt(System.Runtime.CompilerServices.IsImplicitlyDereferenced) modopt(System.Runtime.CompilerServices.CallConvCdecl) (SByteStream\u003CSCrtMemFile\u003E* modopt(System.Runtime.CompilerServices.IsImplicitlyDereferenced))",
"Token": null
},
{
"Offset": "0x0210",
"OpCode": "call",
"Operand": "System.DateTime ArchestrA.BaseQueryArgs::get_EndDateTime()",
"Token": "0x060061BB"
},
{
"Offset": "0x0219",
"OpCode": "call",
"Operand": "System.DateTime System.DateTime::ToUniversalTime()",
"Token": "0x0A00040D"
},
{
"Offset": "0x0221",
"OpCode": "call",
"Operand": "System.DateTime ArchestrA.BaseQueryArgs::get_StartDateTime()",
"Token": "0x060061B9"
},
{
"Offset": "0x022A",
"OpCode": "call",
"Operand": "System.DateTime System.DateTime::ToUniversalTime()",
"Token": "0x0A00040D"
},
{
"Offset": "0x023D",
"OpCode": "calli",
"Operand": "System.Byte modopt(System.Runtime.CompilerServices.IsConst)* modopt(System.Runtime.CompilerServices.CallConvCdecl) (System.IntPtr)",
"Token": null
},
{
"Offset": "0x0250",
"OpCode": "call",
"Operand": "ArchestrA.HistorianRetrievalMode ArchestrA.BaseQueryArgs::get_RetrievalMode()",
"Token": "0x060061BD"
},
{
"Offset": "0x0258",
"OpCode": "call",
"Operand": "System.Collections.Specialized.StringCollection ArchestrA.BaseQueryArgs::get_TagNames()",
"Token": "0x060061B7"
},
{
"Offset": "0x025D",
"OpCode": "callvirt",
"Operand": "System.Int32 System.Collections.Specialized.StringCollection::get_Count()",
"Token": "0x0A00041C"
},
{
"Offset": "0x0264",
"OpCode": "call",
"Operand": "System.Char modopt(System.Runtime.CompilerServices.IsConst)* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst)* modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::stx.tsarray.get(stx.tsarray modopt(System.Runtime.CompilerServices.IsConst)* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst))",
"Token": "0x060057EA"
},
{
"Offset": "0x026E",
"OpCode": "call",
"Operand": "System.Int64 System.DateTime::ToFileTime()",
"Token": "0x0A00040C"
},
{
"Offset": "0x0275",
"OpCode": "call",
"Operand": "System.Int64 System.DateTime::ToFileTime()",
"Token": "0x0A00040C"
},
{
"Offset": "0x027B",
"OpCode": "call",
"Operand": "System.UInt64 ArchestrA.BaseQueryArgs::get_Resolution()",
"Token": "0x060061BF"
},
{
"Offset": "0x0283",
"OpCode": "call",
"Operand": "System.Single ArchestrA.HistoryQueryArgs::get_ValueDeadband()",
"Token": "0x06006247"
},
{
"Offset": "0x0289",
"OpCode": "call",
"Operand": "System.UInt32 ArchestrA.HistoryQueryArgs::get_TimeDeadband()",
"Token": "0x06006249"
},
{
"Offset": "0x0294",
"OpCode": "call",
"Operand": "ArchestrA.HistorianVersionType ArchestrA.BaseQueryArgs::get_DataVersion()",
"Token": "0x060061C1"
},
{
"Offset": "0x029A",
"OpCode": "call",
"Operand": "ArchestrA.HistorianInterpolationType ArchestrA.HistoryQueryArgs::get_InterpolationType()",
"Token": "0x0600624B"
},
{
"Offset": "0x02A0",
"OpCode": "call",
"Operand": "ArchestrA.HistorianTimestampRule ArchestrA.HistoryQueryArgs::get_TimeStampRule()",
"Token": "0x0600624D"
},
{
"Offset": "0x02A6",
"OpCode": "call",
"Operand": "ArchestrA.HistorianQualityRule ArchestrA.HistoryQueryArgs::get_QualityRule()",
"Token": "0x0600624F"
},
{
"Offset": "0x02B6",
"OpCode": "call",
"Operand": "ArchestrA.HistorianValueSelector ArchestrA.HistoryQueryArgs::get_ValueSelector()",
"Token": "0x06006253"
},
{
"Offset": "0x02BC",
"OpCode": "call",
"Operand": "ArchestrA.HistorianAggregationType ArchestrA.HistoryQueryArgs::get_AggregationType()",
"Token": "0x06006255"
},
{
"Offset": "0x02C9",
"OpCode": "call",
"Operand": "System.UInt16 ArchestrA.HistoryQueryArgs::get_MaxStates()",
"Token": "0x06006259"
},
{
"Offset": "0x02D2",
"OpCode": "call",
"Operand": "System.Boolean modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::HistorianClient.StartDataQuery(HistorianClient* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst),INSQL_QUERYTYPE,INSQL_QUERYFORMAT,HISTORIAN_SUMMARYTYPE,System.UInt32 modopt(System.Runtime.CompilerServices.IsLong),System.Char modopt(System.Runtime.CompilerServices.IsConst)**,System.UInt32 modopt(System.Runtime.CompilerServices.IsLong),System.Char modopt(System.Runtime.CompilerServices.IsConst)**,System.UInt64,System.UInt64,System.Double,System.Single,System.UInt32,System.Char modopt(System.Runtime.CompilerServices.IsConst)*,E_VERSIONTYPE,E_INTERPOLATIONTYPE,E_TIMESTAMPRULE,E_QUALITYRULE,System.Char modopt(System.Runtime.CompilerServices.IsConst)*,System.Char*,System.UInt16,System.Char*,System.UInt16,EValueSelector,E_AGGREGATIONTYPE,System.UInt32,System.Byte modopt(System.Runtime.CompilerServices.IsConst)*,System.Char modopt(System.Runtime.CompilerServices.IsConst)*,System.UInt16,System.UInt32 modopt(System.Runtime.CompilerServices.IsLong)*,SError* modopt(System.Runtime.CompilerServices.IsImplicitlyDereferenced))",
"Token": "0x060055E4"
},
{
"Offset": "0x031A",
"OpCode": "call",
"Operand": "System.Void \u003CModule\u003E::___CxxCallUnwindDtor(System.Void (System.Void*),System.Void*)",
"Token": "0x06005C0F"
},
{
"Offset": "0x0322",
"OpCode": "call",
"Operand": "System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::SError.ClearErrorDetail(SError* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst))",
"Token": "0x06000165"
},
{
"Offset": "0x0331",
"OpCode": "call",
"Operand": "System.Void \u003CModule\u003E::___CxxCallUnwindDtor(System.Void (System.Void*),System.Void*)",
"Token": "0x06005C0F"
},
{
"Offset": "0x0341",
"OpCode": "call",
"Operand": "System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::SMemFile\u003CSCrtAllocator\u003E.Free(SMemFile\u003CSCrtAllocator\u003E* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst))",
"Token": "0x060011E7"
},
{
"Offset": "0x0350",
"OpCode": "call",
"Operand": "System.Void \u003CModule\u003E::___CxxCallUnwindDtor(System.Void (System.Void*),System.Void*)",
"Token": "0x06005C0F"
},
{
"Offset": "0x0368",
"OpCode": "call",
"Operand": "System.Void \u003CModule\u003E::___CxxCallUnwindDtor(System.Void (System.Void*),System.Void*)",
"Token": "0x06005C0F"
},
{
"Offset": "0x0370",
"OpCode": "call",
"Operand": "System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::QueryColumnSelector.{dtor}(QueryColumnSelector* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst))",
"Token": "0x06000044"
},
{
"Offset": "0x037F",
"OpCode": "call",
"Operand": "System.Void \u003CModule\u003E::___CxxCallUnwindDtor(System.Void (System.Void*),System.Void*)",
"Token": "0x06005C0F"
},
{
"Offset": "0x0388",
"OpCode": "call",
"Operand": "System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::stx.clear_array_ptr_vector\u003Cwchar_t\u003E(std.vector\u003Cwchar_t *,std::allocator\u003Cwchar_t *\u003E \u003E* modopt(System.Runtime.CompilerServices.IsImplicitlyDereferenced))",
"Token": "0x06005886"
},
{
"Offset": "0x0397",
"OpCode": "call",
"Operand": "System.Void \u003CModule\u003E::___CxxCallUnwindDtor(System.Void (System.Void*),System.Void*)",
"Token": "0x06005C0F"
},
{
"Offset": "0x039F",
"OpCode": "call",
"Operand": "System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::std.vector\u003Cwchar_t *,std::allocator\u003Cwchar_t *\u003E \u003E._Tidy(std.vector\u003Cwchar_t *,std::allocator\u003Cwchar_t *\u003E \u003E* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst))",
"Token": "0x06005872"
},
{
"Offset": "0x03AE",
"OpCode": "call",
"Operand": "System.Void \u003CModule\u003E::___CxxCallUnwindDtor(System.Void (System.Void*),System.Void*)",
"Token": "0x06005C0F"
},
{
"Offset": "0x03B6",
"OpCode": "call",
"Operand": "System.Void modopt(System.Runtime.CompilerServices.CallConvCdecl) \u003CModule\u003E::SError.ClearErrorDetail(SError* modopt(System.Runtime.CompilerServices.IsConst) modopt(System.Runtime.CompilerServices.IsConst))",
"Token": "0x06000165"
}
]
}
]
}