IDA may already have what you need. Otherwise parsing the WDK headers would be the way to go. I did this a very long time ago, but could not dig up the IDC files. Depending on the sample you look at, something like DriverBuddy may also come in handy.
Consider the following snippet from ntdll.dll:
call RtlFreeHeap
test edi, edi
jns short loc_18001A2EA
cmp edi, 0C0000022h
jz short ReturnStatus
cmp edi, 0C0000043h
jz short ReturnStatus
Clearly 0C0000022h
and 0C0000043h
are NTSTATUS
values. You can use the "Use standard symbolic constant" menu item from the context menu (right click on any such value):

... and ideally you will already be presented with one or several usable choices:

... scrolling to the right within the dialog will also show which type lib introduced the constant(s):

If nothing pops up it's usually a good idea to add them yourself via File + Load file + FLIRT signature file, which should make the appropriate enums and structs available in your database:

The shown library modules would be the most appropriate for your purpose, it seems. However, if you wanted to outright add the complete enum (technically you will receive a copy of what in IDA lingo is a "standard enum"), you could do that from the enum subview (by default: Shift+F10). The subview, will be headed by a helpful reminder of the keyboard shortcuts:
; Ins/Del/Ctrl-E: create/delete/edit enumeration types
; N/Ctrl-N : create/edit a symbolic constant
; U : delete a symbolic constant
; ; or : : set a comment for the current item
And so after hitting Ins you should see the following dialog:

Since you have symbol names, pick option (2), if you knew the enum name you could also use (1).

From the opening dialog we could search for STATUS_ACCESS_DENIED
by typing it while the dialog is open. The search term will be helpfully shown below the list (highlighted). Once you found the constant/symbol name you were looking for, simply double click it or select it and press the OK button.
The result should show as a collapsed enum in the enum subview:
; [COLLAPSED ENUM MACRO_STATUS. PRESS CTRL-NUMPAD+ TO EXPAND]
So there you have it, had you known the name MACRO_STATUS
up front, you could have added the enum by its own name instead of the name of a contained symbol.
The resulting copy of the enum can now be freely amended by you.
If you wanted to do something like this with IDC you would use something like add_enum() and add_enum_member():
id = add_enum(-1, "MACRO_STATUS", 0x1100000)
add_enum_member(id,"STATUS_ACCESS_DENIED", 0XFFFFFFFFC0000022, -1);
And if you're wondering about the odd leading 0XFFFFFFFF
that's because the underlying type of NTSTATUS
is LONG
and therefore 32-bit signed. I was using a 64-bit IDB for this. If you use a 32-bit one you can simply get rid of the leading FFFFFFFF
(but not the 0X
).
After you have the enum added, you should be presented with a submenu from "Use standard symbolic constant" and inside of it you should see the appropriate symbol, which after selecting it will give us:

call RtlFreeHeap
test edi, edi
jns short loc_18001A2EA
cmp edi, STATUS_ACCESS_DENIED
jz short ReturnStatus
cmp edi, STATUS_SHARING_VIOLATION
jz short ReturnStatus