This repository has been archived by the owner on Nov 6, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NativeMethods.cs
79 lines (68 loc) · 2.96 KB
/
NativeMethods.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// <copyright file="NativeMethods.cs" company="OpenTelemetry Authors">
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
using System.Runtime.InteropServices;
namespace OpenTelemetry.AutoInstrumentation;
internal static class NativeMethods
{
private static readonly bool IsWindows = string.Equals(FrameworkDescription.Instance.OSPlatform, "Windows", StringComparison.OrdinalIgnoreCase);
public static void AddInstrumentations(string id, NativeCallTargetDefinition[] methodArrays)
{
if (methodArrays is null || methodArrays.Length == 0)
{
return;
}
if (IsWindows)
{
Windows.AddInstrumentations(id, methodArrays, methodArrays.Length);
}
else
{
NonWindows.AddInstrumentations(id, methodArrays, methodArrays.Length);
}
}
public static void AddDerivedInstrumentations(string id, NativeCallTargetDefinition[] methodArrays)
{
if (methodArrays is null || methodArrays.Length == 0)
{
return;
}
if (IsWindows)
{
Windows.AddDerivedInstrumentations(id, methodArrays, methodArrays.Length);
}
else
{
NonWindows.AddDerivedInstrumentations(id, methodArrays, methodArrays.Length);
}
}
// the "dll" extension is required on .NET Framework
// and optional on .NET Core
private static class Windows
{
[DllImport("OpenTelemetry.AutoInstrumentation.Native.dll")]
public static extern void AddInstrumentations([MarshalAs(UnmanagedType.LPWStr)] string id, [In] NativeCallTargetDefinition[] methodArrays, int size);
[DllImport("OpenTelemetry.AutoInstrumentation.Native.dll")]
public static extern void AddDerivedInstrumentations([MarshalAs(UnmanagedType.LPWStr)] string id, [In] NativeCallTargetDefinition[] methodArrays, int size);
}
// assume .NET Core if not running on Windows
private static class NonWindows
{
[DllImport("OpenTelemetry.AutoInstrumentation.Native")]
public static extern void AddInstrumentations([MarshalAs(UnmanagedType.LPWStr)] string id, [In] NativeCallTargetDefinition[] methodArrays, int size);
[DllImport("OpenTelemetry.AutoInstrumentation.Native")]
public static extern void AddDerivedInstrumentations([MarshalAs(UnmanagedType.LPWStr)] string id, [In] NativeCallTargetDefinition[] methodArrays, int size);
}
}