Files
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

191 lines
7.2 KiB
JSON

{
"GeneratedUtc": "2026-04-30T19:06:31.829829+00:00",
"Binaries": [
{
"Path": "C:\\Users\\dohertj2\\Desktop\\histsdk\\current\\aahClient.dll",
"Sha256": "77a778988e2d8f2d0e88113f8c8b0788a0ef34fa5134938a353976778144dc83",
"Exports": [
"?mdas_AddHistorianValue2@@YAHKPEAUHISTORIAN_VALUE2@@PEAUHISTORIAN_ERROR@@@Z",
"?mdas_AddNonStreamedValue2@@YAHKKPEAUHISTORIAN_VALUE2@@PEAUHISTORIAN_ERROR@@@Z",
"?mdas_GetNextEventDataQueryResult@@YAHKKPEAVEventQueryResultRow@@PEAUHISTORIAN_ERROR@@@Z",
"?mdas_GetRuntimeParameter@@YAHKAEBV?$vector@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@V?$allocator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@@std@@AEAV?$vector@VCRetVariant@@V?$allocator@VCRetVariant@@@std@@@2@PEAUHISTORIAN_ERROR@@@Z",
"?mdas_StartEventDataRetrievalQuery@@YAHK_K0IIGGAEAVEventQueryFilters@@PEB_WPEAKPEAUHISTORIAN_ERROR@@@Z",
"mdas_AddHistorianTag",
"mdas_AddHistorianTags",
"mdas_AddHistorianValue",
"mdas_AddNonStreamValues",
"mdas_AddNonStreamValuesBegin",
"mdas_AddNonStreamValuesEnd",
"mdas_AddNonStreamedValue",
"mdas_AddNonStreamedValue3",
"mdas_AddNonStreamedValueAsync",
"mdas_AddNonStreamedValuesBegin",
"mdas_AddNonStreamedValuesEnd",
"mdas_AddRevisionValue",
"mdas_AddRevisionValuesBegin",
"mdas_AddRevisionValuesEnd",
"mdas_AddStreamValue",
"mdas_AddStreamValue2",
"mdas_AddTagExtendedProperties",
"mdas_AddTagExtendedPropertyGroups",
"mdas_AddTags",
"mdas_AddTags2",
"mdas_CanUpdateAreaHierarchy",
"mdas_CloseConnection",
"mdas_ConfigureAutoStartProcess",
"mdas_ConfigureParameter",
"mdas_DeleteTag",
"mdas_DeleteTagExtendedPropertiesByName",
"mdas_EndQuery",
"mdas_ExchangeInfoWithProcess",
"mdas_GetErrorCount",
"mdas_GetErrorText",
"mdas_GetHistorianTagsByKey",
"mdas_GetJobStatus",
"mdas_GetLicenseFeatureInfo",
"mdas_GetLikeTagnames",
"mdas_GetLocalizedText",
"mdas_GetNextBlockQueryResult",
"mdas_GetNextDataQueryResult",
"mdas_GetSFParameter",
"mdas_GetStorageStatus",
"mdas_GetSystemParameter",
"mdas_GetSystemTimeZoneName",
"mdas_GetTagDeploymentStatus",
"mdas_GetTagExtendedPropertyByName",
"mdas_GetTagExtendedPropertyGroupStatusByName",
"mdas_GetTagInfoByName",
"mdas_GetTagInfoFromName",
"mdas_GetTagInfosByName",
"mdas_GetTagStatusByName",
"mdas_GetTagTypeFromName",
"mdas_GetTagidsByTagnameAndSource",
"mdas_GetTimeZoneInfo",
"mdas_GetTimeZoneNames",
"mdas_Initialize",
"mdas_IsAllForwarded",
"mdas_IsDBCaseSensitive",
"mdas_IsManualTag",
"mdas_IsOriginalAllowed",
"mdas_IsTagnameValid",
"mdas_IsTagsSynchronized",
"mdas_LogError",
"mdas_OpenConnection",
"mdas_OpenConnection2",
"mdas_OpenConnectionOffline",
"mdas_OpenConnectionOffline2",
"mdas_OpenConnectionOffline4",
"mdas_PingPipe",
"mdas_PingServer",
"mdas_ReleaseBuffer",
"mdas_ReleaseErrorDetail",
"mdas_RenameSourceTags",
"mdas_RenameTags",
"mdas_SendNonStreamedValues",
"mdas_SetBufferMemory",
"mdas_SetConnectState",
"mdas_SetConnectionParameter",
"mdas_SetParameter",
"mdas_SetRedundantSFMode",
"mdas_SetSFParameter",
"mdas_SetServerConnectionInfo",
"mdas_SetServerConnectionInfo2",
"mdas_SetServerConnectionInfo4",
"mdas_SetStoreForwardMode",
"mdas_SetTraceAccount",
"mdas_SetTraceFlags",
"mdas_StartBlockRetrievalQuery",
"mdas_StartDataRetrievalQuery",
"mdas_StartLikeTagNameSearch",
"mdas_StartProcess",
"mdas_StopProcess",
"mdas_UnInitialize",
"mdas_UnregisterTag",
"mdas_UpdateAreaHierarchy",
"mdas_UpdateConnection",
"mdas_UpdateObjectHierarchy"
]
},
{
"Path": "C:\\Users\\dohertj2\\Desktop\\histsdk\\current\\aahClientCommon.dll",
"Sha256": "c9e6bf37fd98131519a7460f0c7359242f4b89c3d75a3d3c4899d7564d249834",
"Exports": [
"?CreateClientCommon@@YAPEAVIClientCommon@@PEA_W@Z",
"?DeleteClientCommon@@YAXPEAVIClientCommon@@@Z"
]
},
{
"Path": "C:\\Users\\dohertj2\\Desktop\\histsdk\\current\\aahClientManaged.dll",
"Sha256": "0e58222c7c0b3ce82075ac5c5bc4c21546e92d8727b23be16188304b312eedba",
"Exports": []
}
],
"Scenarios": [
{
"Name": "connect-process",
"NativeOperation": "mdas_OpenConnection2",
"ManagedApi": "ProbeAsync/GetConnectionStatusAsync",
"EvidenceFile": "fixtures/protocol/2020/connect-process.bin"
},
{
"Name": "history-raw",
"NativeOperation": "mdas_StartDataRetrievalQuery \u002B mdas_GetNextDataQueryResult",
"ManagedApi": "ReadRawAsync",
"EvidenceFile": "fixtures/protocol/2020/history-raw.bin"
},
{
"Name": "history-aggregate",
"NativeOperation": "mdas_StartDataRetrievalQuery \u002B mdas_GetNextDataQueryResult",
"ManagedApi": "ReadAggregateAsync",
"EvidenceFile": "fixtures/protocol/2020/history-aggregate.bin"
},
{
"Name": "history-at-time",
"NativeOperation": "mdas_StartDataRetrievalQuery \u002B mdas_GetNextDataQueryResult",
"ManagedApi": "ReadAtTimeAsync",
"EvidenceFile": "fixtures/protocol/2020/history-at-time.bin"
},
{
"Name": "history-block",
"NativeOperation": "mdas_StartBlockRetrievalQuery \u002B mdas_GetNextBlockQueryResult",
"ManagedApi": "ReadBlocksAsync",
"EvidenceFile": "fixtures/protocol/2020/history-block.bin"
},
{
"Name": "event-query",
"NativeOperation": "mdas_StartEventDataRetrievalQuery \u002B mdas_GetNextEventDataQueryResult",
"ManagedApi": "ReadEventsAsync",
"EvidenceFile": "fixtures/protocol/2020/event-query.bin"
},
{
"Name": "tag-browse",
"NativeOperation": "mdas_StartLikeTagNameSearch \u002B mdas_GetLikeTagnames",
"ManagedApi": "BrowseTagNamesAsync",
"EvidenceFile": "fixtures/protocol/2020/tag-browse.bin"
},
{
"Name": "tag-metadata",
"NativeOperation": "mdas_GetTagInfoByName",
"ManagedApi": "GetTagMetadataAsync",
"EvidenceFile": "fixtures/protocol/2020/tag-metadata.bin"
},
{
"Name": "status",
"NativeOperation": "mdas_GetStorageStatus/mdas_GetSystemParameter",
"ManagedApi": "GetConnectionStatusAsync/GetStoreForwardStatusAsync",
"EvidenceFile": "fixtures/protocol/2020/status.bin"
},
{
"Name": "write-streamed-value",
"NativeOperation": "mdas_AddStreamValue",
"ManagedApi": "WriteStreamedValueAsync",
"EvidenceFile": "fixtures/protocol/2020/write-streamed-value.bin"
},
{
"Name": "write-event",
"NativeOperation": "mdas_AddStreamValue for HistorianEvent",
"ManagedApi": "WriteEventAsync",
"EvidenceFile": "fixtures/protocol/2020/write-event.bin"
}
]
}