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>
531 lines
14 KiB
JSON
531 lines
14 KiB
JSON
[
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 142395346223871,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "817355b81bec51b8452669af7f1828de9d8e36f41352c5c45ed889f9b89e8b70",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 2,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "2771911259312f141b41fe6cb6923e10ae2a6ca08ee5b213627d2620a674e565",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 0,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "cc09fa0d9326b3a9b82470b1e4bb998fccaadc7bcfdf10097e0cc41781298030",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 1,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "2c513443dfed0784d7b8c2b0c150a0f24964b21675e3dc7759f81ba91f66b062",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 2,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "a090db2d30d28aa479dcb8852cc1c1558a09aa95eae99f40a3aaef442606f71f",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 3,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "02df33e2bdd1756adaadea04722fb7b736e4b7471ed667b887824212f06ac09a",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 4,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "5a1442caa2bbdbede319d5dd6aec57f9c9602e93676424b0cb7812cba0e21d78",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 5,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "74d03523892ef134c4ee2912301cca8541a4fe91fad4177078ee0468a5b0adf9",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 6,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "9fee1ad9d404a5d3b53cd57d229c68eb9d53ee71b8bf8e69678aa59c1d911bcf",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 7,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "3cf4c905c2098e492f8914ffd4f0baaa3f5c458a896f809e97051caf8f8c9ea0",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 8,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "d0efe9aa5b15624f58f3104148dc9210ca599257317e1372402fdcc6a9189603",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 9,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "8b536c73f0d36ab07d18272bd4d09eb519b92829c6fbcb4ea3770d7251dff4f3",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 10,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "425989a2bf9e2a3d46327d82edaec23d872280b991fe3c394ec4ef74083738fc",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 11,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "73e852c0ac3427a43b905f3c7bf895cfa937750cb82b63ab353bf0497ef1d1a5",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 12,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "eb1fb4cf7baa04e095b313c94cfcb1620b06c80e7ec685064d132dad20ff6fb3",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 13,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 262143,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "9f49c7ea7f2a9c5d457a9546065fa1593d519696ebbe3b127c3f9949eef6f8bc",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 14,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "NoOption",
|
|
"ColumnSelectorFlags": 65535,
|
|
"RequestByteCount": 263,
|
|
"RequestSha256": "3cfbfccf210ce1dd46c191e543b0999fb892b04f75c90cf53245d528c71c117c",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 2,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 65535,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "229b589fa8ecd97db2a6536088f37e218923dd4d89ba5750e96f4ca9902a51a1",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 2,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "NoOption",
|
|
"ColumnSelectorFlags": 18446744073709551615,
|
|
"RequestByteCount": 263,
|
|
"RequestSha256": "1bc580abc7e81c41ec81e5902e768350f11b13ab928a0b6fae62d629e02f56ef",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 2,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 18446744073709551615,
|
|
"RequestByteCount": 267,
|
|
"RequestSha256": "f28630155154f2fb627b4f1c21aad35b586f1194e1b106dfe7f19aff1dc5e8af",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 2,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 18446744073709551615,
|
|
"RequestByteCount": 343,
|
|
"RequestSha256": "f0a5ec4669a4f406e429747f0bba46fcdf4a9d6409affa5373bb787896325006",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 2,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
},
|
|
{
|
|
"Option": "",
|
|
"ColumnSelectorFlags": 18446744073709551615,
|
|
"RequestByteCount": 403,
|
|
"RequestSha256": "3b281f526bee334429a5e621c24ee59c0afaee74b9245c5f51ea6cd2842d3374",
|
|
"ClientHandle": 0,
|
|
"IsOriginalAllowedReturnCode": 0,
|
|
"IsOriginalAllowed": true,
|
|
"QueryType": 2,
|
|
"OpenSuccess": true,
|
|
"Success": false,
|
|
"QueryHandle": 0,
|
|
"ResponseSize": 0,
|
|
"ResponseByteCount": null,
|
|
"LegacyReturnCode": 238,
|
|
"LegacyQueryHandle": 0,
|
|
"LegacyResponseSize": 0,
|
|
"LegacyResponseByteCount": null,
|
|
"LegacyResponseSha256": null,
|
|
"LegacyError": null,
|
|
"ErrorSize": 0,
|
|
"NativeErrorCode": null,
|
|
"Error": null
|
|
}
|
|
]
|