Geoff Chappell, Software Analyst
As a CSRSS Server DLL, BASESRV implements API routines which a CSRSS client can call through the NTDLL function CsrClientCallServer and which other DLLs in the server process may be allowed to call through the CSRSRV function CsrCallServerFromServer.
The base server’s API routines each have the prototype
ULONG ApiRoutine (CSR_API_MSG *, CSR_REPLY_STATUS *);
The caller selects a routine by specifying an API number. The high word is a 0-based index for the base server as a CSRSS server DLL. Known clients and BASESRV itself (for the slightly different matter of accessing server-specific per-process data) assume that this index is 1. Whatever symbolic names Microsoft has for the API numbers as constants to use when calling the corresponding API routines are not known. The table below gives only the name of each API routine as known from public symbol files for BASESRV.DLL.
API Number | API Routine | Versions | Remarks |
---|---|---|---|
0x00000000 (3.10 to 3.51) | BaseSrvGlobalAddAtom | 3.10 to 3.51 | |
0x00010001 (3.10 to 3.51) | BaseSrvGlobalFindAtom | 3.10 to 3.51 | invalid as server call |
0x00010002 (3.10 to 3.51) | BaseSrvGlobalDeleteAtom | 3.10 to 3.51 | |
0x00010003 (3.10 to 3.51) | BaseSrvGlobalGetAtomName | 3.10 to 3.51 | |
0x00010004 (3.10 to 3.51) | BaseSrvProfileOperation | 3.10 only | |
0x00010005 (3.10); 0x00010004 (3.51); 0x00010000 |
BaseSrvCreateProcess | all | |
0x00010006 (3.10); 0x00010005 (3.51); 0x00010001 |
BaseSrvCreateThread | 3.10 to 6.1 | |
BaseSrvDeadEntry | 6.2 and higher | invalid as server call; fails trivially |
|
0x00010007 (3.10); 0x00010006 (3.51); 0x00010002 |
BaseSrvGetTempFile | 3.10 to 5.2 | |
BaseSrvDeadEntry | 6.0 and higher | invalid as server call; fails trivially |
|
0x00010008 (3.10); 0x00010007 (3.51); 0x00010003 |
BaseSrvExitProcess | 3.10 to 6.1 | invalid as server call |
BaseSrvDeadEntry | 6.2 and higher | invalid as server call; fails trivially |
|
0x00010009 (3.10); 0x00010008 (3.51); 0x00010004 |
BaseSrvDebugProcess | 3.10 to 5.2 | invalid as server call; fails trivially in 5.1 to 5.2 |
BaseSrvDeadEntry | 6.0 and higher | invalid as server call; fails trivially |
|
0x0001000A (3.10); 0x00010009 (3.51); 0x00010005 |
BaseSrvCheckVDM | all | |
0x0001000B (3.10); 0x0001000A (3.51); 0x000100006 |
BaseSrvUpdateVDMEntry | all | |
0x0001000C (3.10); 0x0001000B (3.51); 0x00010007 |
BaseSrvGetNextVDMCommand | all | |
0x0001000D (3.10); 0x0001000C (3.51); 0x00010008 |
BaseSrvExitVDM | all | |
0x0001000E (3.10); 0x0001000D (3.51); 0x00010009 |
BaseSrvIsFirstVDM | all | |
0x0001000F (3.10); 0x0001000E (3.51); 0x0001000A |
BaseSrvGetVDMExitCode | all | |
0x00010010 (3.10); 0x0001000F (3.51); 0x0001000B |
BaseSrvSetReenterCount | all | |
0x00010011 (3.10); 0x00010010 (3.51); 0x0001000C |
BaseSrvSetProcessShutdownParam | all | |
0x00010012 (3.10); 0x00010011 (3.51); 0x0001000D |
BaseSrvGetProcessShutdownParam | all | |
0x00010012 (3.51); 0x0001000E (4.0 to 5.2) |
BaseSrvNlsSetUserInfo | 3.51 to 5.2 | next as 0x0001001C |
0x00010013 (3.51); 0x0001000F (4.0 to 5.2) |
BaseSrvNlsSetMultipleUserInfo | 3.51 to 5.2 | |
0x00010013 (3.10); 0x00010014 (3.51); 0x00010010 (4.0 to 5.2) |
BaseSrvNlsCreateSortSection | 3.10 to 4.0 | |
BaseSrvNlsCreateSection | 5.0 to 5.2 | ||
0x00010014 (3.10); 0x00010015 (3.51); 0x00010011 (4.0) |
BaseSrvNlsPreserveSection | 3.10 to 4.0 | |
0x00010015 (3.10); 0x00010016 (3.51) |
BaseSrvDefineDosDevice | 3.10 to 3.51 | next as 0x00010018 |
0x00010016 (3.10); 0x00010017 (3.51); 0x00010012 (4.0); 0x00010011 (5.0 to 5.2); 0x0001000E |
BaseSrvSetVDMCurDirs | all | |
0x00010017 (3.10); 0x00010018 (3.51); 0x00010013 (4.0); 0x00010012 (5.0 to 5.2); 0x0001000F |
BaseSrvGetVDMCurDirs | all | |
0x00010018 (3.10); 0x00010019 (3.51); 0x00010014 (4.0); 0x00010013 (5.0 to 5.2); 0x00010010 |
BaseSrvBatNotification | all | |
0x0001001A (3.51); 0x00010015 (4.0); 0x00010014 (5.0 to 5.2); 0x00010011 |
BaseSrvRegisterWowExec | 3.51 and higher | |
0x0001001B (3.51); 0x00010016 (4.0); 0x00010015 (5.0 to 5.2); 0x00010012 |
BaseSrvSoundSentryNotification | 3.51 and higher | |
0x0001001C (3.51); 0x00010017 (4.0); 0x00010016 (5.0 to 5.2); 0x00010013 |
BaseSrvRefreshIniFileMapping | 3.51 and higher | |
0x0001001D (3.51) | BaseSrvRefreshDriveType | 3.51 only | |
0x00010018 (4.0); 0x00010017 (5.0 to 5.2); 0x00010014 |
BaseSrvDefineDosDevice | 4.0 and higher | previously 0x00010016 |
0x00010018 (5.0 to 5.2); 0x00010015 |
BaseSrvSetTermsrvAppInstallMode | 5.0 and higher | |
0x00010019 (5.0 to 5.2) | BaseSrvNlsUpdateCacheCount | 5.0 to 5.2 | next as 0x0001001D |
0x0001001A (5.1 to 5.2); 0x00010016 |
BaseSrvSetTermsrvClientTimeZone | 5.1 and higher | |
0x0001001B (5.1 to 5.2); 0x00010017 |
BaseSrvSxsCreateActivationContext | 5.1 to 6.0 | |
BaseSrvCreateActivationContext | 6.1 and higher | ||
0x0001001C (5.1 to 5.2); 0x00010018 |
BaseSrvDebugProcessStop | 5.1 to 5.2 | fails trivially |
BaseSrvDeadEntry | 6.0 and higher | fails trivially | |
0x0001001D (5.1 to 5.2); 0x00010019 |
BaseSrvRegisterThread | 5.1 and higher | |
0x0001001A | BaseSrvDeferredCreateProcess | 6.0 and higher | |
0x0001001E (early 5.2) | BaseSrvCheckApplicationCompatibility | early 5.2 only | |
0x0001001E (5.1); 0x0001001F (early 5.2); 0x0001001E (late 5.2); 0x0001001B |
BaseSrvNlsGetUserInfo | 5.1 and higher | |
0x0001001F (late 5.1) | BaseSrvAppHelpQueryModuleData | late 5.1 only | |
0x0001001C (6.0) | BaseSrvNlsSetUserInfo | 6.0 only | previously 0x0001000E |
0x0001001D (6.0); 0x0001001C |
BaseSrvNlsUpdateCacheCount | 6.0 and higher | previoously 0x00010019 |