diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 18dddf928cf..64fdb6fdb24 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -711,6 +711,7 @@ @ stdcall RtlFreeThreadActivationContextStack() @ stdcall RtlFreeUnicodeString(ptr) @ stdcall RtlFreeUserStack(ptr) +@ stdcall RtlGetDeviceFamilyInfoEnum(ptr ptr ptr) @ stdcall RtlGUIDFromString(ptr ptr) @ stub RtlGenerate8dot3Name @ stdcall RtlGetAce(ptr long ptr) diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c index 0d0b2d370f3..a077108b8d0 100644 --- a/dlls/ntdll/rtl.c +++ b/dlls/ntdll/rtl.c @@ -2193,3 +2193,15 @@ char WINAPI RtlQueryProcessPlaceholderCompatibilityMode(void) FIXME("stub\n"); return PHCM_APPLICATION_DEFAULT; } + +/********************************************************************* + * RtlGetDeviceFamilyInfoEnum [NTDLL.@] + */ +void WINAPI RtlGetDeviceFamilyInfoEnum(ULONGLONG *version, DWORD *family, DWORD *form) +{ + FIXME("%p %p %p: stub\n", version, family, form); + + if (version) *version = 0; + if (family) *family = DEVICEFAMILYINFOENUM_DESKTOP; + if (form) *form = DEVICEFAMILYDEVICEFORM_UNKNOWN; +} diff --git a/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c index 754f5b711dd..4a4370d5903 100644 --- a/dlls/ntdll/tests/rtl.c +++ b/dlls/ntdll/tests/rtl.c @@ -99,6 +99,7 @@ static void * (WINAPI *pRtlFindExportedRoutineByName)(HMODULE,const char *); static NTSTATUS (WINAPI *pLdrEnumerateLoadedModules)(void *, void *, void *); static NTSTATUS (WINAPI *pLdrRegisterDllNotification)(ULONG, PLDR_DLL_NOTIFICATION_FUNCTION, void *, void **); static NTSTATUS (WINAPI *pLdrUnregisterDllNotification)(void *); +static VOID (WINAPI *pRtlGetDeviceFamilyInfoEnum)(ULONGLONG *,DWORD *,DWORD *); static HMODULE hkernel32 = 0; static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL); @@ -142,6 +143,7 @@ static void InitFunctionPtrs(void) pLdrEnumerateLoadedModules = (void *)GetProcAddress(hntdll, "LdrEnumerateLoadedModules"); pLdrRegisterDllNotification = (void *)GetProcAddress(hntdll, "LdrRegisterDllNotification"); pLdrUnregisterDllNotification = (void *)GetProcAddress(hntdll, "LdrUnregisterDllNotification"); + pRtlGetDeviceFamilyInfoEnum = (void *)GetProcAddress(hntdll, "RtlGetDeviceFamilyInfoEnum"); } hkernel32 = LoadLibraryA("kernel32.dll"); ok(hkernel32 != 0, "LoadLibrary failed\n"); @@ -3754,6 +3756,27 @@ static void test_RtlFindExportedRoutineByName(void) ok( proc == NULL, "Shouldn't find forwarded function\n" ); } +static void test_RtlGetDeviceFamilyInfoEnum(void) +{ + ULONGLONG version; + DWORD family, form; + + if (!pRtlGetDeviceFamilyInfoEnum) + { + win_skip( "RtlGetDeviceFamilyInfoEnum is not present\n" ); + return; + } + + version = 0x1234567; + family = 1234567; + form = 1234567; + pRtlGetDeviceFamilyInfoEnum(&version, &family, &form); + ok( version != 0x1234567, "got unexpected unchanged value 0x1234567\n" ); + ok( family <= DEVICEFAMILYINFOENUM_MAX, "got unexpected %lu\n", family ); + ok( form <= DEVICEFAMILYDEVICEFORM_MAX, "got unexpected %lu\n", form ); + trace( "UAP version is %#I64x, device family is %lu, form factor is %lu\n", version, family, form ); +} + START_TEST(rtl) { InitFunctionPtrs(); @@ -3802,4 +3825,5 @@ START_TEST(rtl) test_RtlInitializeSid(); test_RtlValidSecurityDescriptor(); test_RtlFindExportedRoutineByName(); + test_RtlGetDeviceFamilyInfoEnum(); } diff --git a/include/winnt.h b/include/winnt.h index e9fef20c76d..e1de2f29ecd 100644 --- a/include/winnt.h +++ b/include/winnt.h @@ -5915,6 +5915,63 @@ typedef struct _TAPE_GET_MEDIA_PARAMETERS { ) /* ------------------------------ end registry ------------------------------ */ +#define DEVICEFAMILYINFOENUM_UAP 0x00 +#define DEVICEFAMILYINFOENUM_WINDOWS_8X 0x01 +#define DEVICEFAMILYINFOENUM_WINDOWS_PHONE_8X 0x02 +#define DEVICEFAMILYINFOENUM_DESKTOP 0x03 +#define DEVICEFAMILYINFOENUM_MOBILE 0x04 +#define DEVICEFAMILYINFOENUM_XBOX 0x05 +#define DEVICEFAMILYINFOENUM_TEAM 0x06 +#define DEVICEFAMILYINFOENUM_IOT 0x07 +#define DEVICEFAMILYINFOENUM_IOT_HEADLESS 0x08 +#define DEVICEFAMILYINFOENUM_SERVER 0x09 +#define DEVICEFAMILYINFOENUM_HOLOGRAPHIC 0x0A +#define DEVICEFAMILYINFOENUM_XBOXSRA 0x0B +#define DEVICEFAMILYINFOENUM_XBOXERA 0x0C +#define DEVICEFAMILYINFOENUM_SERVER_NANO 0x0D +#define DEVICEFAMILYINFOENUM_8828080 0x0E +#define DEVICEFAMILYINFOENUM_7067329 0x0F +#define DEVICEFAMILYINFOENUM_WINDOWS_CORE 0x10 +#define DEVICEFAMILYINFOENUM_WINDOWS_CORE_HEADLESS 0x11 +#define DEVICEFAMILYINFOENUM_MAX 0x11 + +#define DEVICEFAMILYDEVICEFORM_UNKNOWN 0x00 +#define DEVICEFAMILYDEVICEFORM_PHONE 0x01 +#define DEVICEFAMILYDEVICEFORM_TABLET 0x02 +#define DEVICEFAMILYDEVICEFORM_DESKTOP 0x03 +#define DEVICEFAMILYDEVICEFORM_NOTEBOOK 0x04 +#define DEVICEFAMILYDEVICEFORM_CONVERTIBLE 0x05 +#define DEVICEFAMILYDEVICEFORM_DETACHABLE 0x06 +#define DEVICEFAMILYDEVICEFORM_ALLINONE 0x07 +#define DEVICEFAMILYDEVICEFORM_STICKPC 0x08 +#define DEVICEFAMILYDEVICEFORM_PUCK 0x09 +#define DEVICEFAMILYDEVICEFORM_LARGESCREEN 0x0A +#define DEVICEFAMILYDEVICEFORM_HMD 0x0B +#define DEVICEFAMILYDEVICEFORM_INDUSTRY_HANDHELD 0x0C +#define DEVICEFAMILYDEVICEFORM_INDUSTRY_TABLET 0x0D +#define DEVICEFAMILYDEVICEFORM_BANKING 0x0E +#define DEVICEFAMILYDEVICEFORM_BUILDING_AUTOMATION 0x0F +#define DEVICEFAMILYDEVICEFORM_DIGITAL_SIGNAGE 0x10 +#define DEVICEFAMILYDEVICEFORM_GAMING 0x11 +#define DEVICEFAMILYDEVICEFORM_HOME_AUTOMATION 0x12 +#define DEVICEFAMILYDEVICEFORM_INDUSTRIAL_AUTOMATION 0x13 +#define DEVICEFAMILYDEVICEFORM_KIOSK 0x14 +#define DEVICEFAMILYDEVICEFORM_MAKER_BOARD 0x15 +#define DEVICEFAMILYDEVICEFORM_MEDICAL 0x16 +#define DEVICEFAMILYDEVICEFORM_NETWORKING 0x17 +#define DEVICEFAMILYDEVICEFORM_POINT_OF_SERVICE 0x18 +#define DEVICEFAMILYDEVICEFORM_PRINTING 0x19 +#define DEVICEFAMILYDEVICEFORM_THIN_CLIENT 0x1A +#define DEVICEFAMILYDEVICEFORM_TOY 0x1B +#define DEVICEFAMILYDEVICEFORM_VENDING 0x1C +#define DEVICEFAMILYDEVICEFORM_INDUSTRY_OTHER 0x1D +#define DEVICEFAMILYDEVICEFORM_XBOX_ONE 0x1E +#define DEVICEFAMILYDEVICEFORM_XBOX_ONE_S 0x1F +#define DEVICEFAMILYDEVICEFORM_XBOX_ONE_X 0x20 +#define DEVICEFAMILYDEVICEFORM_XBOX_ONE_X_DEVKIT 0x21 +#define DEVICEFAMILYDEVICEFORM_MAX 0x21 + +NTSYSAPI void WINAPI RtlGetDeviceFamilyInfoEnum(ULONGLONG*,DWORD*,DWORD*); #define EVENTLOG_SUCCESS 0x0000 #define EVENTLOG_ERROR_TYPE 0x0001