You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -13,7 +13,7 @@ Specifies that the digital signature of the binary image must be checked at load
13
13
14
14
By default, **`/INTEGRITYCHECK`** is off.
15
15
16
-
The **`/INTEGRITYCHECK`** linker option sets a flag, `IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY`, in the PE header of the DLL file or executable file. This flag tells the memory manager to check for a digital signature in order to load the image in Windows. This option must be set for both 32-bit and 64-bit DLLs that are loaded by certain Windows features. It's recommended for all device drivers on Windows Vista, Windows Server 2008, and all later versions of Windows and Windows Server. Versions of Windows prior to Windows Vista ignore this flag. For more information, see [Forced Integrity Signing of Portable Executable (PE) files](https://social.technet.microsoft.com/wiki/contents/articles/255.forced-integrity-signing-of-portable-executable-pe-files.aspx).
16
+
The **`/INTEGRITYCHECK`** linker option sets a flag, `IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY`, in the PE header of the DLL file or executable file. This flag tells the memory manager to check for a digital signature in order to load the image in Windows. This option must be set for both 32-bit and 64-bit DLLs that certain Windows features load. It's recommended for all device drivers on Windows Vista, Windows Server 2008, and all later versions of Windows and Windows Server. Versions of Windows prior to Windows Vista ignore this flag. For more information, see [Forced Integrity Signing of Portable Executable (PE) files](https://social.technet.microsoft.com/wiki/contents/articles/255.forced-integrity-signing-of-portable-executable-pe-files.aspx).
17
17
18
18
### Signing `/INTEGRITYCHECK` files
19
19
@@ -25,14 +25,14 @@ Microsoft has new signing guidance for DLL and executable files linked by using
1. To build an image which requires digital signature verification to be loaded, add *`/INTEGRITYCHECK`* to the **Additional Options** command line. By default, **`/INTEGRITYCHECK`**is off.
28
+
1. To create a digitally signed image, include `/INTEGRITYCHECK` in the **Additional Options** command line. A digitally signed image must pass a verification check before it's loaded. This feature is disabled by default.
29
29
30
30
1. Choose **OK** to save your changes.
31
31
32
32
## See also
33
33
34
-
[MSVC linker reference](linking.md)<br/>
35
-
[MSVC linker options](linker-options.md)<br/>
36
-
[Forced integrity signing of portable executable (PE) files](https://social.technet.microsoft.com/wiki/contents/articles/255.forced-integrity-signing-of-portable-executable-pe-files.aspx)<br/>
description: "Learn more about: /KERNEL (Create kernel mode binary)."
3
+
title: /KERNEL
4
+
ms.date: "08/25/2023"
5
+
---
6
+
# /KERNEL (Create kernel mode binary)
7
+
8
+
Create a binary that is suitable for running in kernel mode.
9
+
10
+
## Syntax
11
+
12
+
> **`/KERNEL`**
13
+
14
+
## Remarks
15
+
16
+
Causes the linker to emit a warning if any object file or library linked in the binary wasn't compiled with [/kernel](kernel-create-kernel-mode-binary.md).
17
+
18
+
Code that can run in kernel mode must be compiled with the **`/kernel`** option. If you link a binary that contains code that wasn't compiled with **`/kernel`**, the binary might not run correctly in kernel mode.
19
+
20
+
Code for kernel mode is compiled with a simplified set of C++ language features that are specific to code that runs in kernel mode. The compiler produces warnings for C++ language features that are potentially disruptive but can't be disabled. For more information about compiling code in kernel mode, see [/kernel (Create kernel mode binary)](kernel-create-kernel-mode-binary.md).
21
+
22
+
### To set this linker option in Visual Studio
23
+
24
+
1. Open the project **Property Pages** dialog box. For more information, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).
@@ -13,11 +12,8 @@ LINK.exe links Common Object File Format (COFF) object files and libraries to cr
13
12
The following table lists options for LINK.exe. For more information about LINK, see:
14
13
15
14
-[Compiler-controlled LINK options](compiler-controlled-link-options.md)
16
-
17
15
-[LINK input files](link-input-files.md)
18
-
19
16
-[LINK output](link-output.md)
20
-
21
17
-[Reserved words](reserved-words.md)
22
18
23
19
On the command line, linker options aren't case-sensitive; for example, `/base` and `/BASE` mean the same thing. For details on how to specify each option on the command line or in Visual Studio, see the documentation for that option.
@@ -43,7 +39,7 @@ You can use the [`comment`](../../preprocessor/comment-c-cpp.md) pragma to speci
43
39
|[`/CLRIMAGETYPE`](clrimagetype-specify-type-of-clr-image.md)| Sets the type (IJW, pure, or safe) of a CLR image. |
44
40
|[`/CLRSUPPORTLASTERROR`](clrsupportlasterror-preserve-last-error-code-for-pinvoke-calls.md)| Preserves the last error code of functions that are called through the P/Invoke mechanism. |
45
41
|[`/CLRTHREADATTRIBUTE`](clrthreadattribute-set-clr-thread-attribute.md)| Specifies the threading attribute to apply to the entry point of your CLR program. |
46
-
|[`/CLRUNMANAGEDCODECHECK`](clrunmanagedcodecheck-add-suppressunmanagedcodesecurityattribute.md)| Specifies whether the linker will apply the `SuppressUnmanagedCodeSecurity` attribute to linker-generated P/Invoke stubs that call from managed code into native DLLs. |
42
+
|[`/CLRUNMANAGEDCODECHECK`](clrunmanagedcodecheck-add-suppressunmanagedcodesecurityattribute.md)| Specifies whether the linker applies the `SuppressUnmanagedCodeSecurity` attribute to linker-generated P/Invoke stubs that call from managed code into native DLLs. |
|[`/INTEGRITYCHECK`](integritycheck-require-signature-check.md)| Specifies that the module requires a signature check at load time. |
74
+
|[`/KERNEL`](link-code-for-kernel-mode.md)| Create a kernel mode binary. |
78
75
|[`/KEYCONTAINER`](keycontainer-specify-a-key-container-to-sign-an-assembly.md)| Specifies a key container to sign an assembly. |
79
76
|[`/KEYFILE`](keyfile-specify-key-or-key-pair-to-sign-an-assembly.md)| Specifies a key or key pair to sign an assembly. |
80
77
|[`/LARGEADDRESSAWARE`](largeaddressaware-handle-large-addresses.md)| Tells the compiler that the application supports addresses larger than 2 gigabytes |
You can use the **`/Zc`** compiler options to specify standard or Microsoft-specific compiler behavior.
9
+
Use the **`/Zc`** compiler options to specify standard or Microsoft-specific compiler behavior.
10
10
11
11
## Syntax
12
12
@@ -22,41 +22,41 @@ Here are the **`/Zc`** compiler options:
22
22
23
23
| Option | Behavior |
24
24
|--|--|
25
-
|[`/Zc:__cplusplus`](zc-cplusplus.md)| Enable the `__cplusplus` macro to report the supported standard (off by default). |
26
-
|[`/Zc:__STDC__`](zc-stdc.md)| Enable the `__STDC__` macro to report the C standard is supported (off by default). |
27
-
|[`/Zc:alignedNew`](zc-alignednew.md)| Enable C++17 over-aligned dynamic allocation (on by default in C++17). |
28
-
|[`/Zc:auto`](zc-auto-deduce-variable-type.md)| Enforce the new Standard C++ meaning for **`auto`** (on by default). |
29
-
|[`/Zc:char8_t`](zc-char8-t.md)| Enable or disable C++20 native `u8` literal support as `const char8_t` (off by default, except under **`/std:c++20`**). |
30
-
|[`/Zc:enumTypes[-]`](zc-enumtypes.md)| Enable Standard C++ rules for `enum` type deduction (off by default). |
31
-
|[`/Zc:externC`](zc-externc.md)| Enforce Standard C++ rules for `extern "C"` functions (implied by **`/permissive-`**). |
32
-
|[`/Zc:externConstexpr`](zc-externconstexpr.md)| Enable external linkage for **`constexpr`** variables (off by default). |
33
-
|[`/Zc:forScope`](zc-forscope-force-conformance-in-for-loop-scope.md)| Enforce Standard C++ **`for`** scoping rules (on by default). |
34
-
|[`/Zc:gotoScope`](zc-gotoscope.md)| Enforce Standard C++ **`goto`** rules around local variable initialization (implied by **`/permissive-`**). |
35
-
|[`/Zc:hiddenFriend`](zc-hiddenfriend.md)| Enforce Standard C++ hidden friend rules (implied by **`/permissive-`**)|
36
-
|[`/Zc:implicitNoexcept`](zc-implicitnoexcept-implicit-exception-specifiers.md)| Enable implicit **`noexcept`** on required functions (on by default). |
37
-
|[`/Zc:inline`](zc-inline-remove-unreferenced-comdat.md)| Remove unreferenced functions or data if they're COMDAT or have internal linkage only (off by default). |
38
-
|[`/Zc:lambda`](zc-lambda.md)| Enable new lambda processor for conformance-mode syntactic checks in generic lambdas. |
39
-
|[`/Zc:noexceptTypes`](zc-noexcepttypes.md)| Enforce C++17 **`noexcept`** rules (on by default in C++17 or later). |
40
-
|[`/Zc:nrvo[-]`](zc-nrvo.md)| Enable optional copy and move elisions (on by default under**`/O2`**, **`/permissive-`**, or **`/std:c++20`** or later). |
41
-
|[`/Zc:preprocessor`](zc-preprocessor.md)| Use the new conforming preprocessor (off by default, except in C11/C17). |
42
-
|[`/Zc:referenceBinding`](zc-referencebinding-enforce-reference-binding-rules.md)| A UDT temporary won't bind to a non-const lvalue reference (off by default). |
43
-
|[`/Zc:rvalueCast`](zc-rvaluecast-enforce-type-conversion-rules.md)| Enforce Standard C++ explicit type conversion rules (off by default). |
44
-
|[`/Zc:sizedDealloc`](zc-sizeddealloc-enable-global-sized-dealloc-functions.md)| Enable C++14 global sized deallocation functions (on by default). |
45
-
|[`/Zc:strictStrings`](zc-strictstrings-disable-string-literal-type-conversion.md)| Disable string-literal to `char*` or `wchar_t*` conversion (off by default). |
46
-
|[`/Zc:static_assert`](zc-static-assert.md)| strict handling of `static_assert` (implied by **`/permissive-`**). |
47
-
|[`/Zc:templateScope[-]`](zc-templatescope.md)| Enforce Standard C++ template parameter shadowing rules (off by default). |
48
-
|[`/Zc:ternary`](zc-ternary.md)| Enforce conditional operator rules on operand types (off by default). |
49
-
|[`/Zc:threadSafeInit`](zc-threadsafeinit-thread-safe-local-static-initialization.md)| Enable thread-safe local static initialization (on by default). |
50
-
|[`/Zc:throwingNew`](zc-throwingnew-assume-operator-new-throws.md)| Assume **`operator new`** throws on failure (off by default). |
51
-
|[`/Zc:tlsGuards[-]`](zc-tlsguards.md)| Generate runtime checks for TLS variable initialization (on by default). |
52
-
|[`/Zc:trigraphs`](zc-trigraphs-trigraphs-substitution.md)| Enable trigraphs (obsolete, off by default). |
53
-
|[`/Zc:twoPhase`](zc-twophase.md)| Use non-conforming template parsing behavior (conforming by default). |
54
-
|[`/Zc:wchar_t`](zc-wchar-t-wchar-t-is-native-type.md)|**`wchar_t`** is a native type, not a typedef (on by default). |
55
-
|[`/Zc:zeroSizeArrayNew[-]`](zc-zerosizearraynew.md)| Call member `new`/`delete` for 0-size arrays of objects (on by default). |
25
+
|[`/Zc:__cplusplus[-]`](zc-cplusplus.md)| Enable the `__cplusplus` macro to report the supported standard. Off by default. |
26
+
|[`/Zc:__STDC__`](zc-stdc.md)| Enable the `__STDC__` macro to report the C standard is supported. Off by default. |
27
+
|[`/Zc:alignedNew[-]`](zc-alignednew.md)| Enable C++17 over-aligned dynamic allocation. Off by default unless **`/std:c++17`** or later is specified. |
28
+
|[`/Zc:auto[-]`](zc-auto-deduce-variable-type.md)| Enforce the new Standard C++ meaning for **`auto`**. On by default. |
29
+
|[`/Zc:char8_t[-]`](zc-char8-t.md)| Enable or disable C++20 native `u8` literal support as `const char8_t`. Off by default unless **`/std:c++20`** or later is specified. |
30
+
|[`/Zc:enumTypes[-]`](zc-enumtypes.md)| Enable Standard C++ rules for `enum` type deduction. Off by default. |
31
+
|[`/Zc:externC[-]`](zc-externc.md)| Enforce Standard C++ rules for `extern "C"` functions. Off by default unless **`/permissive-`** is specified. |
32
+
|[`/Zc:externConstexpr[-]`](zc-externconstexpr.md)| Enable external linkage for **`constexpr`** variables. Off by default. |
33
+
|[`/Zc:forScope[-]`](zc-forscope-force-conformance-in-for-loop-scope.md)| Enforce Standard C++ **`for`** scoping rules. On by default. |
34
+
|[`/Zc:gotoScope[-]`](zc-gotoscope.md)| Enforce Standard C++ **`goto`** rules around local variable initialization. Off by default unless **`/permissive-`** is specified. |
35
+
|[`/Zc:hiddenFriend[-]`](zc-hiddenfriend.md)| Enforce Standard C++ hidden friend rules. Off by default unless **`/permissive-`** is specified.|
36
+
|[`/Zc:implicitNoexcept[-]`](zc-implicitnoexcept-implicit-exception-specifiers.md)| Enable implicit **`noexcept`** on required functions. On by default. |
37
+
|[`/Zc:inline[-]`](zc-inline-remove-unreferenced-comdat.md)| Remove unreferenced functions or data if they're COMDAT or have internal linkage only. Off by default. |
38
+
|[`/Zc:lambda[-]`](zc-lambda.md)| Enable new lambda processor for conformance-mode syntactic checks in generic lambdas. Off by default unless **`/std:c++20`** or later is specified. |
39
+
|[`/Zc:noexceptTypes[-]`](zc-noexcepttypes.md)| Enforce C++17 **`noexcept`** rules. Off by default unless **`/std:c++17`** or later is specified. |
40
+
|[`/Zc:nrvo[-]`](zc-nrvo.md)| Enable optional copy and move elisions. Off by default unless**`/O2`**, **`/permissive-`**, or **`/std:c++20`** or later is specified. |
41
+
|[`/Zc:preprocessor[-]`](zc-preprocessor.md)| Use the new conforming preprocessor. Off by default unless **`/std:c11`** or later is specified. |
42
+
|[`/Zc:referenceBinding[-]`](zc-referencebinding-enforce-reference-binding-rules.md)| A UDT temporary won't bind to a nonconst lvalue reference. Off by default unless **`/permissive-`** is specified. |
43
+
|[`/Zc:rvalueCast[-]`](zc-rvaluecast-enforce-type-conversion-rules.md)| Enforce Standard C++ explicit type conversion rules. Off by default unless **`/permissive-`** is specified. |
44
+
|[`/Zc:sizedDealloc[-]`](zc-sizeddealloc-enable-global-sized-dealloc-functions.md)| Enable C++14 global sized deallocation functions. On by default. |
45
+
|[`/Zc:strictStrings[-]`](zc-strictstrings-disable-string-literal-type-conversion.md)| Disable string-literal to `char*` or `wchar_t*` conversion. Off by default unless **`/permissive-`** is specified. |
46
+
|[`/Zc:static_assert[-]`](zc-static-assert.md)| strict handling of `static_assert`. Off by default unless **`/permissive-`** is specified. |
47
+
|[`/Zc:templateScope[-]`](zc-templatescope.md)| Enforce Standard C++ template parameter shadowing rules. Off by default. |
48
+
|[`/Zc:ternary[-]`](zc-ternary.md)| Enforce conditional operator rules on operand types. Off by default unless **`/permissive-`** is specified. |
49
+
|[`/Zc:threadSafeInit[-]`](zc-threadsafeinit-thread-safe-local-static-initialization.md)| Enable thread-safe local static initialization. On by default. |
50
+
|[`/Zc:throwingNew[-]`](zc-throwingnew-assume-operator-new-throws.md)| Assume **`operator new`** throws on failure. Off by default. |
51
+
|[`/Zc:tlsGuards[-]`](zc-tlsguards.md)| Generate runtime checks for TLS variable initialization. On by default. |
52
+
|[`/Zc:trigraphs[-]`](zc-trigraphs-trigraphs-substitution.md)| Enable trigraphs (obsolete, off by default). |
53
+
|[`/Zc:twoPhase-`](zc-twophase.md)| Use nonconforming template parsing behavior (only applicable when **`/permissive-`** is specified, which defaults to conforming). |
54
+
|[`/Zc:wchar_t[-]`](zc-wchar-t-wchar-t-is-native-type.md)|**`wchar_t`** is a native type, not a typedef. On by default. |
55
+
|[`/Zc:zeroSizeArrayNew[-]`](zc-zerosizearraynew.md)| Call member `new`/`delete` for 0-size arrays of objects. On by default. |
56
56
57
57
For more information about conformance issues in MSVC, see [Nonstandard behavior](../../cpp/nonstandard-behavior.md).
0 commit comments