rpc_server/srv_ntsvcs_nt.c

ソースコードを見る。

関数

static char * get_device_path (const char *device)
WERROR _ntsvcs_get_version (pipes_struct *p, NTSVCS_Q_GET_VERSION *q_u, NTSVCS_R_GET_VERSION *r_u)
WERROR _ntsvcs_get_device_list_size (pipes_struct *p, NTSVCS_Q_GET_DEVICE_LIST_SIZE *q_u, NTSVCS_R_GET_DEVICE_LIST_SIZE *r_u)
WERROR _ntsvcs_get_device_list (pipes_struct *p, NTSVCS_Q_GET_DEVICE_LIST *q_u, NTSVCS_R_GET_DEVICE_LIST *r_u)
WERROR _ntsvcs_get_device_reg_property (pipes_struct *p, NTSVCS_Q_GET_DEVICE_REG_PROPERTY *q_u, NTSVCS_R_GET_DEVICE_REG_PROPERTY *r_u)
WERROR _ntsvcs_validate_device_instance (pipes_struct *p, NTSVCS_Q_VALIDATE_DEVICE_INSTANCE *q_u, NTSVCS_R_VALIDATE_DEVICE_INSTANCE *r_u)
WERROR _ntsvcs_get_hw_profile_info (pipes_struct *p, NTSVCS_Q_GET_HW_PROFILE_INFO *q_u, NTSVCS_R_GET_HW_PROFILE_INFO *r_u)
WERROR _ntsvcs_hw_profile_flags (pipes_struct *p, NTSVCS_Q_HW_PROFILE_FLAGS *q_u, NTSVCS_R_HW_PROFILE_FLAGS *r_u)


関数

static char* get_device_path ( const char *  device  )  [static]

srv_ntsvcs_nt.c30 行で定義されています。

参照先 pstr_sprintf().

参照元 _ntsvcs_get_device_list()_ntsvcs_get_device_list_size().

00031 {
00032         static pstring path;
00033 
00034         pstr_sprintf( path, "ROOT\\Legacy_%s\\0000", device );
00035 
00036         return path;
00037 }

WERROR _ntsvcs_get_version ( pipes_struct p,
NTSVCS_Q_GET_VERSION q_u,
NTSVCS_R_GET_VERSION r_u 
)

srv_ntsvcs_nt.c42 行で定義されています。

参照先 NTSVCS_R_GET_VERSION::version.

参照元 api_ntsvcs_get_version().

00043 {
00044         r_u->version = 0x00000400;      /* no idea what this means */
00045                 
00046         return WERR_OK;
00047 }

WERROR _ntsvcs_get_device_list_size ( pipes_struct p,
NTSVCS_Q_GET_DEVICE_LIST_SIZE q_u,
NTSVCS_R_GET_DEVICE_LIST_SIZE r_u 
)

srv_ntsvcs_nt.c52 行で定義されています。

参照先 UNISTR2::bufferNTSVCS_Q_GET_DEVICE_LIST_SIZE::devicenameget_device_path()rpcstr_pull()NTSVCS_R_GET_DEVICE_LIST_SIZE::sizeUNISTR2::uni_str_len.

参照元 api_ntsvcs_get_device_list_size().

00053 {
00054         fstring device;
00055         const char *devicepath;
00056 
00057         if ( !q_u->devicename )
00058                 return WERR_ACCESS_DENIED;
00059 
00060         rpcstr_pull(device, q_u->devicename->buffer, sizeof(device), q_u->devicename->uni_str_len*2, 0);
00061         devicepath = get_device_path( device );
00062 
00063         r_u->size = strlen(devicepath) + 2;
00064 
00065         return WERR_OK;
00066 }

WERROR _ntsvcs_get_device_list ( pipes_struct p,
NTSVCS_Q_GET_DEVICE_LIST q_u,
NTSVCS_R_GET_DEVICE_LIST r_u 
)

srv_ntsvcs_nt.c72 行で定義されています。

参照先 UNISTR2::bufferNTSVCS_Q_GET_DEVICE_LIST::devicenameNTSVCS_R_GET_DEVICE_LIST::devicepathget_device_path()init_unistr2()NTSVCS_R_GET_DEVICE_LIST::neededrpcstr_pull()UNI_STR_DBLTERMINATEUNISTR2::uni_str_len.

参照元 api_ntsvcs_get_device_list().

00073 {
00074         fstring device;
00075         const char *devicepath;
00076 
00077         if ( !q_u->devicename )
00078                 return WERR_ACCESS_DENIED;
00079 
00080         rpcstr_pull(device, q_u->devicename->buffer, sizeof(device), q_u->devicename->uni_str_len*2, 0);
00081         devicepath = get_device_path( device );
00082 
00083         /* This has to be DOUBLE NULL terminated */
00084 
00085         init_unistr2( &r_u->devicepath, devicepath, UNI_STR_DBLTERMINATE );
00086         r_u->needed = r_u->devicepath.uni_str_len;
00087 
00088         return WERR_OK;
00089 }

WERROR _ntsvcs_get_device_reg_property ( pipes_struct p,
NTSVCS_Q_GET_DEVICE_REG_PROPERTY q_u,
NTSVCS_R_GET_DEVICE_REG_PROPERTY r_u 
)

srv_ntsvcs_nt.c94 行で定義されています。

参照先 UNISTR2::bufferNTSVCS_Q_GET_DEVICE_REG_PROPERTY::devicepathNTSVCS_R_GET_DEVICE_REG_PROPERTY::neededcurrent_user::nt_user_tokenpipes_struct::pipe_userNTSVCS_Q_GET_DEVICE_REG_PROPERTY::propertyreg_init_regval_buffer()regval_ctr_getvalue()rpcstr_pull()NTSVCS_R_GET_DEVICE_REG_PROPERTY::sizestrrchr_m()svcctl_fetch_regvalues()UNISTR2::uni_str_lenNTSVCS_R_GET_DEVICE_REG_PROPERTY::unknown1NTSVCS_R_GET_DEVICE_REG_PROPERTY::valuevalues.

参照元 api_ntsvcs_get_device_reg_property().

00095 {
00096         fstring devicepath;
00097         char *ptr;
00098         REGVAL_CTR *values;
00099         REGISTRY_VALUE *val;
00100 
00101         rpcstr_pull(devicepath, q_u->devicepath.buffer, sizeof(devicepath), q_u->devicepath.uni_str_len*2, 0);
00102 
00103         switch( q_u->property ) {
00104         case DEV_REGPROP_DESC:
00105                 /* just parse the service name from the device path and then 
00106                    lookup the display name */
00107                 if ( !(ptr = strrchr_m( devicepath, '\\' )) )
00108                         return WERR_GENERAL_FAILURE;    
00109                 *ptr = '\0';
00110                 
00111                 if ( !(ptr = strrchr_m( devicepath, '_' )) )
00112                         return WERR_GENERAL_FAILURE;    
00113                 ptr++;
00114                 
00115                 if ( !(values = svcctl_fetch_regvalues( ptr, p->pipe_user.nt_user_token )) )
00116                         return WERR_GENERAL_FAILURE;    
00117                 
00118                 if ( !(val = regval_ctr_getvalue( values, "DisplayName" )) ) {
00119                         TALLOC_FREE( values );
00120                         return WERR_GENERAL_FAILURE;
00121                 }
00122                 
00123                 r_u->unknown1 = 0x1;    /* always 1...tested using a remove device manager connection */
00124                 r_u->size = reg_init_regval_buffer( &r_u->value, val );
00125                 r_u->needed = r_u->size;
00126 
00127                 TALLOC_FREE(values);
00128 
00129                 break;
00130                 
00131         default:
00132                 r_u->unknown1 = 0x00437c98;
00133                 return WERR_CM_NO_SUCH_VALUE;
00134         }
00135 
00136         return WERR_OK;
00137 }

WERROR _ntsvcs_validate_device_instance ( pipes_struct p,
NTSVCS_Q_VALIDATE_DEVICE_INSTANCE q_u,
NTSVCS_R_VALIDATE_DEVICE_INSTANCE r_u 
)

srv_ntsvcs_nt.c142 行で定義されています。

参照元 api_ntsvcs_validate_device_instance().

00143 {
00144         /* whatever dude */
00145         return WERR_OK;
00146 }

WERROR _ntsvcs_get_hw_profile_info ( pipes_struct p,
NTSVCS_Q_GET_HW_PROFILE_INFO q_u,
NTSVCS_R_GET_HW_PROFILE_INFO r_u 
)

srv_ntsvcs_nt.c151 行で定義されています。

参照先 NTSVCS_Q_GET_HW_PROFILE_INFO::bufferNTSVCS_R_GET_HW_PROFILE_INFO::bufferNTSVCS_Q_GET_HW_PROFILE_INFO::buffer_sizeNTSVCS_R_GET_HW_PROFILE_INFO::buffer_size.

参照元 api_ntsvcs_get_hw_profile_info().

00152 {
00153         /* steal the incoming buffer */
00154 
00155         r_u->buffer_size = q_u->buffer_size;
00156         r_u->buffer = q_u->buffer;
00157 
00158         /* Take the 5th Ammentment */
00159 
00160         return WERR_CM_NO_MORE_HW_PROFILES;
00161 }

WERROR _ntsvcs_hw_profile_flags ( pipes_struct p,
NTSVCS_Q_HW_PROFILE_FLAGS q_u,
NTSVCS_R_HW_PROFILE_FLAGS r_u 
)

srv_ntsvcs_nt.c166 行で定義されています。

参照元 api_ntsvcs_hw_profile_flags().

00167 {       
00168         /* just nod your head */
00169         
00170         return WERR_OK;
00171 }


Sambaに対してSat Aug 29 21:24:17 2009に生成されました。  doxygen 1.4.7