c95824a65d
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>
191 lines
7.2 KiB
JSON
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"
|
|
}
|
|
]
|
|
} |